使用JAX-WS开发简单webservice

来源:互联网 发布:spark入门书籍推荐知乎 编辑:程序博客网 时间:2024/04/28 04:42

     webservice的技术有很多,现在流行的有JAX-WS、XFile、CXF、Axis1、Axis2等。不过JAX-WS是webservice技术最轻量级的,不需要引入额外jar包。
 在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
 在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

 我们使用JAX-WS开发WebService只需要很简单的几个步骤:写接口和实现=>发布=>生成客户端。

 开发webservice服务端我们可以先编写接口,接口中只需要把类注明为@WebService,把要暴露给客户端的方法注明为@WebMethod即可。

 1:编写webservice服务端接口 

package service;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;/** * 测试webservice接口 * @author  * */@WebService@SOAPBinding(style = SOAPBinding.Style.RPC)public interface TestService {/** * 测试接口 */@WebMethod    void SayHiDefault();@WebMethod    void SayHi(@WebParam(name = "name") String name);@WebMethodString sayHello(String userName);}

 2:编写接口的实现类

package service.imp;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import service.TestService;@WebService(endpointInterface = "service.TestService")@SOAPBinding(style = SOAPBinding.Style.RPC)public class TestServiceImp implements TestService {@Overridepublic void SayHiDefault() {System.out.println("Hi,wangql!");}@Overridepublic void SayHi(String name) {System.out.println("Hi,"+name+"!");}@WebMethodpublic String sayHello(@WebParam(name = "userName") String userName) {return "hi," + userName + " welcome to wangql";}}

 3:发布

 方法一:(此方式只能作为调试,有以下BUG:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在service接口和实现类添加“@SOAPBinding(style = SOAPBinding.Style.RPC)”注解)

package main;import javax.xml.ws.Endpoint;import service.TestService;import service.imp.TestServiceImp;public class ServerStart {public static void main(String[] args) {System.out.println("start publish jax-ws ...");TestService service = new TestServiceImp();Endpoint.publish("http://localhost:8080/jaxwsTest/TestService", service);System.out.println("publish webservice successful");}}
 方法二:(基于web服务器Servlet方式,使用tomcat发布)

 以Tomcat为例,首先编写sun-jaxws.xml文件并放到WEB-INF下:

<?xml version="1.0" encoding="UTF-8"?><endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"><endpoint name="TestService"        implementation="service.imp.TestServiceImp"        url-pattern="/service/test" /></endpoints>

 然后编辑web.xml,添加listener和servlet(url-pattern要保持一致):

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  <display-name></display-name>    <listener>          <listener-class>            com.sun.xml.ws.transport.http.servlet.WSServletContextListener          </listener-class>  </listener>  <servlet>        <servlet-name>TestService</servlet-name>          <servlet-class>            com.sun.xml.ws.transport.http.servlet.WSServlet          </servlet-class>  </servlet>    <servlet-mapping>          <servlet-name>TestService</servlet-name>          <url-pattern>/service/test</url-pattern>    </servlet-mapping>      <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>
 完成之后启动tomcat,访问http://localhost:8080/jaxwsTest/service/test?wsdl


 成功访问wsdl文件,服务端可以正常运行。

 注:@SOAPBinding(style = SOAPBinding.Style.RPC)一定要加上

 http://www.micmiu.com/soa/webservice/jdk6-webservice-doc-rpc/ 可以看一下这篇文章,我再研究一下这个东西。

 

 3:生成webservice客户端

 方法一:使用jdk自带工具wsimport生成客户端

 一般情况下直接输入wsimport命令行直接生成客户端,因为我是用java开发的,所以我是先在MyEclipse上创建一个webservice项目,然后在通过wsimport命令生成客户端,这样可以尽量避免因为编写造成的不必要麻烦。

 (1)在Eclipse或者MyEclipse上创建一个webservice项目

 

 (2)我们先访问到项目的src目录下,然后执行"wsimport -keep http://localhost:8080/jaxwsTest/TestService?wsdl"生成客户端代码。

  注:我们访问的http://localhost:8080/jaxwsTest/TestService?wsdlwsdl文件的路径

 

 我们查看我们的项目,如图

 

 这样就自动生成webservice客户端了。

 我们在客户端编写测试代码

package main;import service.imp.TestServiceImpService;public class WSClient {public static void main(String[] args) {TestServiceImpService test = new TestServiceImpService();String name = test.getTestServiceImpPort().sayHello("123213");System.out.println(name);}}
 如图调用成功

 

 方法二:使用MyEclipse创建webservice Client

 在webservice服务端工程中 右击 new----> other ---->web service client创建客户端

 

 在WSDL URL添加地址就可以了

 

 如果出错检查自己的地址和tomcat服务是否已开启

 

 方法三:自己创建webservice客户端,因为webservice可以跨平台,我们可以用任何语言编写客户端,所以自己编写客户端是最好的选择。

0 0
原创粉丝点击