如何用JAX-WS RI在Tomcat中发布WebService。
项目整体结构
服务端
java EE 6Libraries中带webservices-api的jar包。还需导入webservices-rt.jar ,为web监听做准备
创建服务接口
package org.csapi.wsdl.parlayx.data.sync.v1_0.service;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService(name = "DataSync", targetNamespace = "http://www.csapi.org/wsdl/parlayx/data/sync/v1_0/interface")
@SOAPBinding(style = Style.RPC)
public interface DataSync {
String getName();
}
创建服务接口实现类
package org.csapi.wsdl.parlayx.data.sync.v1_0.service; @javax.jws.WebService( endpointInterface = "org.csapi.wsdl.parlayx.data.sync.v1_0.service.DataSync",// 接口路径 targetNamespace = "http://www.csapi.org/wsdl/parlayx/data/sync/v1_0/service", //包名 serviceName = "DataSyncService", portName = "DataSync") public class DataSyncImpl { public String getName() { return "my name is 哈哈."; } }
在WEB-INF中创建配置文件sun-jaxws.xml,配置文件中一个WebService对应一个Endpoint。
<?xml version = "1.0"?> <endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"> <endpoint name="DataSync" implementation="org.csapi.wsdl.parlayx.data.sync.v1_0.service.DataSyncImpl"//实现类路径 url-pattern="/services/testGetName"> //随便 </endpoint> </endpoints>
在web.xml中添加WSServlet配置
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>jaxws</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jaxws</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
运行tomact后,在浏览器中输入http://localhost:8080/webservice_service/services/testGetName?wsdl
客户端
在JDK的bin文件夹中,提供了一个根据wsdl生成java类的工具wsimport.exe。
输入以下命令,即可生成Java类
- wsimport -keep -d D:\ -s D:\ -p client -verbose http://localhost:8080/webservice_service/services/testGetName?wsdl
-keep:是否生成java源文件
-d:指定.class文件的输出目录
-s:指定.java文件的输出目录
-p:定义生成类的包名,不定义的话有默认包名
-verbose:在控制台显示输出信息
-b:指定jaxws/jaxb绑定文件或额外的schemas
-extension:使用扩展来支持SOAP1.2
最后生成的客户端Java类
我放这了
在客户端调用服务
package client; public class client { public static void main(String[] args) throws Exception { DataSyncService dss = new DataSyncService(); DataSync ds = dss.getDataSync(); System.out.println(ds.getName()); } }输出
源码:http://download.csdn.net/download/qq_36967136/10207287