1、环境
- IntelliJ IDEA 14.0.2
- JAVA 1.6
- Tomcat 7
2、新建项目
进入File > New Project…
菜单打开新建项目窗口,依次选择Java
、WebServices
,Version
项选择 Apache Axis,Libraries
项选择 Download。然后点击Next
按钮进入下一页。
在下一页中输入项目名称,然后点击Finish
按钮开始下载依赖包。依赖包下载完成后进入新建的项目。
3、项目初始结构
src/example
目录下自动创建了一个 HelloWold 类:
package example;/**
* Created by Administrator on 2015/7/30.
*/
public class HelloWorld {
public String sayHelloWorldFrom(String from) {
String result = "Hello, world, from " + from;
System.out.println(result);
return result;
}
}
web/WEB-INF
目录下创建一个server-config.wsdd
服务配置文件。
4、生成 WSDL 文件
在HelloWorld.java
文件上点击右键,选WebServices > Generate Wsdl From Java Code
。
然后在出现的窗口里点击确定
按钮。
在HelloWorld.java
所在目录会生成一个HelloWorld.wsdl
文件。
5、启动服务
启动服务这里稍微有点复杂,因为要配置 Tomcat 服务器。先喝口茶再继续往下看。
选择Run > Edit Configurations…
菜单,打开Run/Debug Configurations
窗口。
在Run/Debug Configurations
窗口里添加+
按钮,在出现的菜单里选择Tomcat Server > Local
。如果看不到Tocmat Server
菜单项,则点击最下面的29 items more (irelevant)…
菜单项查找。
然后在添加的Tomcat Server
配置页面中添加配置的Name
、Application server
和HTTP Port
。如果Application server
为空,将本地的 Tomcat 安装地址添加进来。如果本地没有,从网上下载 Tomcat 7:
https://tomcat.apache.org/download-70.cgi
这时配置页面底部可能会显示有Warning:No Artifacts marked for deployment
(警告:没有标记要部署的产物)。
点击警告信息右侧的Fix…
按钮切换到Deployment标签页。
在Deployment标签页点击Deploy at the server startup
区的+
按钮,选择Artifacts
添加 Artifact 后的界面如下,已经没有警告了。点击OK
完成运行参数的配置。
到这个时候,然后可以运行起服务了,但是访问服务页面时还是会报错。因为还要给部署的 Artifact 添加 Apache Axis 包的依赖。
选择File> Project Structure…
菜单。
在出现的窗口中选择Project Settings > Artifacts
,会到在新的警告信息。点击警告信息右侧的Fix…
按钮。
在弹出菜单里选择Add 'JAX-WS-Apache Axis' to the artifact
。
修复完成后警告消失。
点击工具栏上的运行或调试按钮运行服务。
然后在浏览器里输入:
http://localhost:8080/services
访问结果如下:
6、从 WSDL 文件生成服务端代码
WSDL 文件可以用来生成客户端代码,也可以用来生成服务端代码。客户端代码用于访问远程服务,服务端代码用于提供远程服务。在 IntelliJ IDEA 里这两个操作是类似的。这里主要讲述服务端代码的生成。
一个 WSDL 文件对应一个 JAVA 类,比如前面的HelloWorld.wsdl
文件对应HelloWorld.java
。复杂的 WSDL 文件除了对应有一个主类外,还会有辅助类,比如主类方法中使用到的 Bean 等。
这里假设要将主类生成到 services 包目录下,那么在src/services
(没有的自己创建一个)目录上点击右键,在出现在的菜单中选择WebService > Genarete Java Code From Wsdl…
:
在出现的窗口是选择远程 WSDL 的地址,或者选择本地的 WSDL 文件,然后选择Output mode(输出模式)
。这里作者选择成功server
生成服务端代码, 用于对外提供服务。当然也可以选择client
生成客户端代码用于访问远程服务。
下面是电信 TSM WebService 的 WSDL 文件生成的代码文件列表:
点击OK
按钮后生成对应的文件。其中包含一个名为deploy.wsdd
的文件,将该文件中的service
标签复制到web/WEB-INF/service-config.wsdd
文件的<deployment>
标签下,用于对外发布。
运行项目的结果如下:
7、输出 WSDL 文件
如果手动写的service-config.wsdd
文件,可能不能访问 WSDL 文件。这个时候可以在server-config.wsdd
文件的<deployment>
标签下手动添加<transport>
标签。内容如下:
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http">
<requestFlow>
<handler type="java:org.apache.axis.handlers.http.URLMapper"/>
</requestFlow>
</transport>
...
</deployment>
评论(共8条)
WebService浅析-IT大道 01月18日 10:41
[…] IntelliJ IDEA 开发 WebService […]
Trojx 04月05日 20:16
thx for sharing this.
it helps me a lot!
taylor 11月16日 10:46
你好,我按照你的流程走,访问http://localhost:8080/services报404
萌新瑟瑟发抖 12月12日 22:20
如上图配置后打开http://localhost:8080/services并不能看到自己配置好的helloworld
必须在server-config.wsdd的deployment标签下写下
重启服务器才能看到
李国威 12月18日 01:16
生成的服务端代码里边 实现里边返回null 这个我不是很理解 希望能回复。谢谢啦。
/**
* HelloWorldSoapBindingImpl.java
*
* This file was auto-generated from WSDL
* by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
*/
package services;
public class HelloWorldSoapBindingImpl implements services.HelloWorld_PortType{
public java.lang.String sayHelloWorldFrom(java.lang.String from) throws java.rmi.RemoteException {
return null;
}
public java.lang.String sayTitle(java.lang.String from) throws java.rmi.RemoteException {
return null;
}
}
知莫问 12月22日 08:35
留空是需要编写自己的业务代码。
WebService-IT文库 03月06日 02:47
[…] http://www.biliyu.com/article/986.html […]
Akira Chen 11月14日 08:30
請問一下我Web Service建立成功了,接下來要寫一個Java Web Application去呼叫Web Service,呼叫時代參數java語法要如何寫?