首页 > 代码库 > 基于JAX-WS规范的WebService实现

基于JAX-WS规范的WebService实现

1、相关介绍

        介绍Web Service需要首先了解SOA。SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过中间的契约(独立于硬件平台、操作系统和编程语言)连接起来,使得各种形式的功能单元更好的集成。WebService是SOA的一种很好的实现方式,WebService采用HTTP作为传输协议,SOAP(Simple Object Access Protocol)作为传输消息的格式。
       本文重要介绍基于JAX-WS规范的WebService实现方式。首先我们先了解什么是JAX-WS。
        JAX-WS (Java API for XML Web Services )是Java程序设计语言一个用来创建Web服务的API。在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然 JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。

【转载使用,请注明出处:http://blog.csdn.net/mahoking

2、使用一般方式实现基于JAX-WS规范的WebService

        本例以MyEclipse开发工具为例,服务器为Tomcat 6,演示实现基于JAX-WS规范的WebService的一般方式。
 第一步:打开MyEclipse,new→Web Service Project。Framework选择JAX-WS。本例项目工程命名为WebServer。
 第二步:新建包名cn.mahaochen.web.ws,在该包下建立类SayHello。

package cn.mahaochen.web.ws;

public class SayHello {

	public String sayHello(String name) {

		return "Welcome " + name + "Come here!";
	}
}

第三步:new→Other→Web Services→Web Service。Next,Java package选择我们之前建立的cn.mahaochen.web.ws,Next。这样MyEclipse会自动在cn.mahaochen.web.ws包上生成一个类SayHelloDelegate.java。

package cn.mahaochen.web.ws;

@javax.jws.WebService(targetNamespace = "http://ws.web.mahaochen.cn/", serviceName = "SayHelloService", portName = "SayHelloPort")
public class SayHelloDelegate {

	cn.mahaochen.web.ws.SayHello sayHello = new cn.mahaochen.web.ws.SayHello();

	public String sayHello(String name) {
		return sayHello.sayHello(name);
	}

}


同时在WEB-INF文件下会生成一个新的XML文件为:sun-jaxws.xml。

<?xml version = "1.0"?>
<endpoints version="2.0"
	xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
	<endpoint name="SayHelloPort" implementation="cn.mahaochen.web.ws.SayHelloDelegate"
		url-pattern="/SayHelloPort">
	</endpoint>
</endpoints>

web.xml中的内容也会发生改变。

<?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>	
  <servlet>
  	<description>JAX-WS endpoint - SayHelloService</description>
  	<display-name>SayHelloService</display-name>
  	<servlet-name>SayHelloService</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>SayHelloService</servlet-name>
  	<url-pattern>/SayHelloPort</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <listener>
  	<listener-class>
  		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
  	</listener-class>
  </listener>
  </web-app>


第三步:将该项目发布(部署)到Tomcat中,启动服务,通过浏览器访问http://127.0.0.1/WSServer/SayHelloPort?wsdl测试,会出现如下报文。

<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-hudson-390-. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3-hudson-390-. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.web.mahaochen.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.web.mahaochen.cn/" name="SayHelloService">
<types>
<xsd:schema>
<xsd:import namespace="http://ws.web.mahaochen.cn/" schemaLocation="http://127.0.0.1:80/WSServer2/SayHelloPort?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="sayHello">
<part name="parameters" element="tns:sayHello"></part>
</message>
<message name="sayHelloResponse">
<part name="parameters" element="tns:sayHelloResponse"></part>
</message>
<portType name="SayHelloDelegate">
<operation name="sayHello">
<input message="tns:sayHello"></input>
<output message="tns:sayHelloResponse"></output>
</operation>
</portType>
<binding name="SayHelloPortBinding" type="tns:SayHelloDelegate">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="sayHello">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="SayHelloService">
<port name="SayHelloPort" binding="tns:SayHelloPortBinding">
<soap:address location="http://127.0.0.1:80/WSServer2/SayHelloPort"></soap:address>
</port>
</service>
</definitions>


3、使用注解/注释的方式实现基于JAX-WS规范的WebService

       “基于 XML 的 Web Service 的 Java API”(JAX-WS)通过使用注解/注解来指定与 Web Service 实现相关联的元数据以及简化 Web Service 的开发步骤。
       本案例涉及的主要注解/注释类如下:

使用方式作用
javax.jws.WebService@WebService当实现 Web Service 时,@WebService 注释标记 Java 类;实现 Web Service 接口时,标记服务端点接口(SEI)。
javax.jws.WebMethod@WebMethod@WebMethod 注释表示作为一项 Web Service 操作的方法。
将此注释应用于客户机或服务器服务端点接口(SEI)上的方法,或者应用于 JavaBeans 端点的服务器端点实现类。
javax.jws.WebParam@WebParam@WebParam 注释用于定制从单个参数至 Web Service 消息部件和 XML 元素的映射。
将此注释应用于客户机或服务器服务端点接口(SEI)上的方法,或者应用于 JavaBeans 端点的服务器端点实现类。


除以上的注解/注释类还包括javax.jws.Oneway、 javax.jws.WebResult、javax.jws.HandlerChain、javax.jws.SOAPBinding等等。
【详细说明请阅读如下地址】

http://www-01.ibm.com/support/knowledgecenter/SSAW57_6.1.0/com.ibm.websphere.wsfep.multiplatform.doc/info/ae/ae/rwbs_jaxwsannotations.html?lang=zh

【转载使用,请注明出处:http://blog.csdn.net/mahoking