目录:
[一]、概述
Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。
在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。
当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。
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与JAX-RPC的区别 可参见:http://java.sun.com/xml/faq.html#JAX-WS-and-JAX-RPC-difference
JAX-WS一些参考资料:
- JAX-RPC 2.0 renamed to JAX-WS 2.0
- The Java web service Tutorial
- javax.jws.WebService
[二]、实验环境
- java version “1.6.0_18″、Eclipse3.7
- maven构建项目:mvn archetype:create -DgroupId=com.micmiu.jaxws.demo -DartifactId=jaxws-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[三]、服务端的实现
1.最基本的实例
编写接口代码:HelloService.java
packagecom.micmiu.jaxws.demo;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
public interfaceHelloService {
StringsayHello(StringuserName);
}
实现接口并添加webservice注释:HelloServiceImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
packagecom.micmiu.jaxws.demo.impl;
importjavax.jws.WebMethod;
import javax.jws.WebParam;
importjavax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import com.micmiu.jaxws.demo.HelloService;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
@WebService()
//默认SOAPBinding style = Style.DOCUMENT
@SOAPBinding()
public classHelloServiceImpl implements HelloService{
@WebMethod
publicString sayHello(@WebParam(name= "userName")String userName){
return"hi," +userName +" welcom to www.micmiu.com";
}
}
编写服务端发布代码:ServerStart.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
packagecom.micmiu.jaxws.demo;
importjavax.xml.ws.Endpoint;
importcom.micmiu.jaxws.demo.impl.HelloServiceImpl;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
public classServerStart {
/**
* @param args
*/
publicstatic voidmain(String[]args){
System.out.println("start publish jax-ws ...");
HelloServiceservice =new HelloServiceImpl();
Endpoint.publish("http://localhost:8082/HelloService",service);
System.out.println("publish webservice successful");
}
}
运行ServerStart,日志如下:
startpublish jax-ws...
2012-7-1210:56:41com.sun.xml.internal.ws.model.RuntimeModelergetRequestWrapperClass
信息:Dynamically creating request wrapper Classcom.micmiu.jaxws.demo.impl.jaxws.SayHello
2012-7-1210:56:42com.sun.xml.internal.ws.model.RuntimeModelergetResponseWrapperClass
信息:Dynamically creating response wrapper beanClass com.micmiu.jaxws.demo.impl.jaxws.SayHelloResponse
publish webservice successful
浏览器打开:http://localhost:8082/HelloService?wsdl 回车显示如下:
可见服务端已经发布成功。
运用JDK自动的命令: wsgen 生成wsdl文件和异常处理的相关类
ps:如果webservice中有异常声明,必须用wsgen生成常处理的相关类之后,才能发布。
按win+R键,输入cmd回车进入命令行界面,切换到target下创建目录ws,在执行如下命令:
- bin -> 存放生成的class文件
- src -> 存放生成的源代码文件
- wsdl -> 存放生成的wsdl 文件
再执行如下命令:
wsgen-cp.;classes/-rws/wsdl-sws/src-dws/bin-wsdl com.micmiu.jaxws.demo.impl.HelloServiceImpl
生成后的目录如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
D:\workspace_dev\jaxws-demo\target>tree/Fws
卷 work的文件夹 PATH列表
卷序列号为2AF7-9BD9
D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\WS
├─bin
│ └─com
│ └─micmiu
│ └─jaxws
│ └─demo
│ └─impl
│ └─jaxws
│ SayHello.class
│ SayHelloResponse.class
│
├─src
│ └─com
│ └─micmiu
│ └─jaxws
│ └─demo
│ └─impl
│ └─jaxws
│ SayHello.java
│ SayHelloResponse.java
│
└─wsdl
HelloServiceImplService.wsdl
HelloServiceImplService_schema1.xsd
2.@WebService 指定 endpointInterface 实例
修改接口代码:HelloService.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
packagecom.micmiu.jaxws.demo;
importjavax.jws.WebMethod;
import javax.jws.WebParam;
importjavax.jws.WebService;
import javax.jws.soap.SOAPBinding;
importjavax.jws.soap.SOAPBinding.Style;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
@WebService
@SOAPBinding(style= Style.DOCUMENT)
public interfaceHelloService {
@WebMethod
StringsayHello(@WebParam(name= "userName")String userName);
}
修改接口实现类:HelloServiceImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
packagecom.micmiu.jaxws.demo.impl;
importjavax.jws.WebService;
importcom.micmiu.jaxws.demo.HelloService;
/**
* blog http://www.micmiu.com
*
* @author Michael
*/
@WebService(endpointInterface= "com.micmiu.jaxws.demo.HelloService")
publicclass HelloServiceImplimplements HelloService{
publicString sayHello(StringuserName){
return"hi," +userName +" welcom to www.micmiu.com";
}
}
运行ServerStart 启动程序,可通过运行日志和浏览器访问wsdl文件进行验证。
[四]、客户端的实现
1. wsimport 生成客户端
按win+R键,输入cmd回车进入dos,切到target目录,然后创建目录:client、client\bin、client\src
在target目录下运行如下命令回车即可生成客户端文件:
wsimport-sclient/src-dclient/bin-pcom.micmiu.jaxws.clienthttp://localhost:8082/HelloService?wsdl
生成源文件目录结构如下:
D:\WORKSPACE_DEV\JAXWS-DEMO\TARGET\CLIENT\SRC
└─com
└─micmiu
└─jaxws
└─client
HelloServiceImpl.java
HelloServiceImplService.java
ObjectFactory.java
package-info.java
SayHello.java
SayHelloResponse.java
2.编写客户端测试程序:HelloClient.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
packagecom.micmiu.jaxws.client;
/**
* blog http://www.micmiu.com
* @author Michael
*/
publicclass HelloClient{
/**
* @param args
*/
publicstatic voidmain(String[]args){
HelloServiceImplServiceservice =new HelloServiceImplService();
HelloServiceImpl hello= service.getHelloServiceImplPort();
System.out.println("start webservice client ...");
System.out.println("send Michael to server ");
System.out.println(hello.sayHello("Michael"));
System.out.println("test client end.");
}
}
运行测试程序,日志如下:
startwebservice client...
send Michael toserver
hi,Michaelwelcom towww.micmiu.com
test client end.
可见客户端调用成功。
——————-
原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[http://www.micmiu.com/ ]
本文链接地址: http://www.micmiu.com/soa/webservice/jax-ws-demo/