webservice_发布服务_客户端调用(sun-jaxws)

如何用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类
[plain]  view plain  copy
  1. 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

猜你喜欢

转载自blog.csdn.net/qq_36967136/article/details/79067147