標籤:web service tomcat wsdl xml
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】