文章中http://5148737.blog.51cto.com/5138737/1604472 中我们曾谈到,JAX-WS可以实现webservice,与axis,cxf不同的是,JAX-WS是一种规范。
一、什么是jax-ws
JAX-WS规范是一组XML web services的JAVA API,JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services
二、jax-ws与jax-rpc的关系
Sun最开始的web services的实现是JAX-RPC 1.1 (JSR 101)。这个实现是基于Java的RPC,并不完全支持schema规范,同时没有对Binding和Parsing定义标准的实现。
JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173),同时它还完全支持schema规范。
三、使用jax-ws构建web服务
使用jax-ws实现webservice的话,需要导入jax-ws的jar包,因为使用的是jdk中的jar,需要使用wsgen与wsimport两个命令,下面一一道来:
(1)新建java类,添加注解,@WebService标志该类为一个webservice,WebMethod标志方法为webservice的方法。
1
2
3
4
5
6
7
8
9
|
@WebService
public
class
Hello {
@WebMethod
public
String sayhello(String name) {
System.out.println(
"hello,"
+name);
return
"hello,"
+name;
}
}
|
(2)javac编译该java类
javac Hello.java
(3)生成wsdl等文件
此处,使用wsgen生成WSDL和相关的xsd文件,
1
|
D:\workspace\jaxws\src>wsgen -cp . com.xj.service.Hello -wsdl
|
-wsdl参数代表生成webservice,缺省的话将默认不生成
- s参数代表生成的.java文件置于何处
-d 参数代表生成的编译class文件置于何处
-r 参数代表生成的.wsdl文件与.xsd文件生成在何处
-cp参数代表classpath,即Hello.class的所在路径
此时,可以看到目录中生成了wsdl与xsd文件。
(4)编写服务端并启动
1
2
3
4
5
6
7
8
|
public
class
test {
public
static
void
main(String[] args) {
String address=
"http://localhost/Jaxws/HelloService"
;
Endpoint.publish(address,
new
Hello());
System.out.println(
"启动server服务"
);
}
}
|
测试发现不需要wsgen命令,上述方式也可以启动服务端,查看服务端是否启动成功
访问,http://localhost/Jaxws/HelloService,可以看到wsdl文件
(5)编写客户端,并访问服务端
新建客户端项目jaxws-client
使用wsimport生成Java的客户端实现
1
|
D:\workspace\jaxws-client>wsimport -p com.xj.client -keep http:
//localhost/Jaxws/HelloService?wsdl
|
命令参数说明:
-d:生成客户端执行类的class文件的存放目录
-s:生成客户端执行类的源文件的存放目录
-p:定义生成类的包名
地址为我们服务端中暴露的wsdl的地址,命令执行完后,可以看到客户端项目中生成如下文件:
代码实现访问:
1
2
3
4
5
6
7
8
|
public
class
test {
public
static
void
main(String[] args) {
HelloService helloService =
new
HelloService();
Hello hello = helloService.getHelloPort();
System.out.println(hello.sayhello(
"sdf"
));
}
}
|
如上,创建webservice代理,得到port,通过port可以访问所有的方法。
下面给出jax-ws的jar包地址
http://yun.baidu.com/share/link?shareid=573524266&uk=2836507213