JDK1.6 自帶webservice構建

JDK1.6中自帶了webservice的功能,由於集成了JAX-WS,這很是方便,不用再用第三方包來開發了。java

下面咱們開始構建:web

  1,先用Eclipse創建一個動態網站,注意須要生成web.xml,建工程的時候不要忘記勾選;apache

  2,創建類實現Web Services接口,下面是一個簡單定義Web Services接口的實現類:瀏覽器

複製代碼

代碼app

1 package javaWebServiceTest;
2
3  import javax.jws.WebMethod;
4  import javax.jws.WebParam;
5  import javax.jws.WebResult;
6  import javax.jws.WebService;
7  import javax.jws.WebParam.Mode;
8  import javax.jws.soap.SOAPBinding;
9  import javax.jws.soap.SOAPBinding.Style;
10  import javax.jws.soap.SOAPBinding.Use;
11
12  import webServiceInterface.Person;
13
14 @WebService(name="SayHello", portName="SayHellowServicePort", serviceName="SayHelloServiceName",
15         targetNamespace="http://www.webservice.com")
16 @SOAPBinding(style = Style.RPC,use = Use.LITERAL)  
17 public class ChService {
18    
19    @WebMethod(action="sayHello", operationName="saySomeWord")
20    @WebResult(name="Person", partName="PersonName")
21    public Person sayHelloWord(@WebParam(name="paramA", partName="p1", mode = Mode.IN)String name){
22        Person persons = new Person();
23        persons.setName("My name is " +name);
24        return persons;
25    }
26
27 }
28 網站

複製代碼

 

 

    

 3,Person類this

複製代碼

1 package webServiceInterface;
2
3
4 public class Person
5 {
6    String name;
7
8    public String getName() {
9        return name;
10    }
11
12    public void setName(String name) {
13        this.name = name;
14    }
15 }編碼

複製代碼

這樣,咱們基本上就實現了webservice的構建,是否是感受不是很難,跟寫普通的java方法同樣,其實jdk自帶的webservice是經過註釋注入方法實現的。因此上面那些以"@"符號開頭的都是很是重要的,也是必須的。url

下面咱們來配置咱們寫的WebService到Apache中:spa

1,上面第一步,咱們生成了一個web.xml類,咱們向<web-app>節點裏面加入如下內容:

複製代碼

代碼

1 <listener>          
2    <listener-class>  
3            com.sun.xml.ws.transport.http.servlet.WSServletContextListener  
4    </listener-class>  
5  </listener>
6    
7    <servlet>  
8        <servlet-name>TestService</servlet-name>  
9        <servlet-class>  
10            com.sun.xml.ws.transport.http.servlet.WSServlet  
11        </servlet-class>  
12    </servlet>  
13      
14    <servlet-mapping>  
15        <servlet-name>TestService</servlet-name>  
16        <url-pattern>/jdkService</url-pattern>
17    </servlet-mapping>

複製代碼

 2,在web.xml的目錄中再創建一個sun-jaxws.xml來配置endpoint的相關內容。

 

複製代碼

代碼

1 <?xml version="1.0" encoding="UTF-8"?>
2 <endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>  
3    <endpoint
4    name='TestService'
5    implementation='javaWebServiceTest.ChService'
6    binding="http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"
7    url-pattern='/jdkService'/>
8 </endpoints>

複製代碼

 

 

好了,配置完了。把咱們創建的項目加入到apache7.0中,而後啓動。

在瀏覽器輸入:http://localhost:8080/TestWebService/jdkService?wsdl,即可以訪問到。

如圖:

 

 

如今咱們來講說那些以"@"符號開頭的內容。

1,@WebService(name="SayHello", portName="SayHellowServicePort",  serviceName="SayHelloServiceName", targetNamespace="http://www.possystem.com")

name: SayHello
  用戶實例化用,例:
      private WinService.SayHelloClient win = new winformService.WinService.SayHelloClient();
  WSDL中:<portType name="SayHello">
 serviceName: SayHelloServiceName
      指定Web Service的名稱 ,WSDL中:<service name="SayHelloServiceName">
 portName: SayHellowServicePort
       WSDL中:<port name="SayHellowServicePort" binding="tns:SayHellowServicePortBinding">   
 wsdlLocation:wsdlLocation 是引用預先存在的 WSDL 文件的 URL(相對或絕對)。
 targetNamespace:wsdl命名空間

 

2,@SOAPBinding(style = Style.RPC,use = Use.LITERAL) 
style: 定義發送到 Web Service 的消息和從 Web Service 發送的消息的編碼樣式。
        Document和RPC兩種形式    
        默認值:
             javax.jws.soap.SOAPBinding.Style.DOCUMENT 
         
   use:  定義發送到 Web Service 的消息和從 Web Service 發送的消息的格式樣式。          
         ENCODED和 LITERAL兩種形式

          默認值:
             javax.jws.soap.SOAPBinding.Use.LITERAL    

 

3, @WebMethod(action="sayHello", operationName="saySomeWord")

   action: sayHello
     此操做的動做。 對於 SOAP 綁定,此方法可肯定 soap 動做的值。
     WSDL中: <soap12:operation soapAction="sayHello" />
  operationName: sayHelloWord1
     與此方法匹配的 wsdl:operation 的名稱。
     此名稱也用於客戶端調用的方法的名稱。
  exclude 
         將某一方法標記爲不做爲一個 web 方法公開。

 

4, @WebResult(name="Person", partName="PersonName")

   name: Person
     返回值的名稱。 若是操做是 rpc 樣式,而且partName還沒有指定, 表示此返回值的 wsdl:part 的名稱
     WSDL中:<part name="Person" type="tns:person" /> 
  partName: PersonName
     表示此返回值的 wsdl:part 的名稱。 
     此名稱只在操做是 rpc 樣式,或者操做是文檔樣式且參數樣式爲 BARE 時使用。
     WSDL中:<part name="PersonName" type="tns:person" />

 

5,  public Person sayHelloWord(@WebParam(name="paramA", partName="p1", mode = Mode.IN)String name){……}
   name: paramA
   若是該操做是 rpc 樣式的,而且還沒有指定 @WebParam.partName,則此名稱是表示參數的 wsdl:part 的名稱。
   若是該操做是文檔樣式的,或者參數映射到某一個頭,則此名稱是表示參數的 XML 元素的本地名稱。 
   若是操做是文檔樣式的,參數樣式爲 BARE 而且模式爲 OUT 或 INOUT,則必須指定一個名稱。
   客戶端調用時參數名稱顯示該值。
  partName: p1
   表示此參數的 wsdl:part 的名稱。 
   此名稱僅在操做是 rpc 樣式,或者操做是文檔樣式且參數樣式爲 BARE 時使用。 
   WSDL中:
    <message name="sayHelloWord1">
       <part name="p1" type="xsd:string" /> 
      </message>
     客戶端調用時參數名稱顯示該值。
    這個主要是根據樣式來。
    mode:參數的流向(IN、OUT 或 INOUT 之一)。 

 

以上只是對一些經常使用的做了一些解釋,都是自我理解的,有不正確的地方,還請指正。    

相關文章
相關標籤/搜索