JAX-WS範例(文件樣式)


與RPC樣式一樣,可以在文件樣式中建立JAX-WS範例。 為此,您只需要在服務介面中更改一行。
需要將Style.DOCUMENT用於@SOAPBinding注釋來代替Style.RPC。下面我們來看看:

檔案: HelloWorld.java -

@SOAPBinding(style = Style.DOCUMENT) // 它從RPC更改為 DOCUMENT

現在讓我們看一下文件樣式中JAX-WS的完整範例。開啟 Eclipse ,建立一個Java工程:jaxwsdocument,並建立4個檔案:

  • HelloWorld.java
  • HelloWorldImpl.java
  • Publisher.java
  • HelloWorldClient.java

3個檔案是為伺服器端應用程式建立的,用戶端應用程式為建立1個檔案。

JAX-WS伺服器程式碼

檔案:HelloWorld.java -

package com.yiibai;

import javax.jws.WebMethod;  
import javax.jws.WebService;  
import javax.jws.soap.SOAPBinding;  
import javax.jws.soap.SOAPBinding.Style; 

//Service Endpoint Interface  
@WebService  
@SOAPBinding(style = Style.DOCUMENT)  
public interface HelloWorld{  
    @WebMethod String getHelloWorldAsString(String name);  
}

檔案:HelloWorldImpl.java -

package com.yiibai;

import javax.jws.WebService;  

//Service Implementation  
@WebService(endpointInterface = "com.yiibai.HelloWorld")  
public class HelloWorldImpl implements HelloWorld{  
  @Override  
  public String getHelloWorldAsString(String name) {  
      return "Hello World JAX-WS " + name;  
  }  
}

檔案:Publisher.java -

package com.yiibai;

import javax.xml.ws.Endpoint;

//Endpoint publisher  
public class Publisher {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:7788/ws/hello", new HelloWorldImpl());
    }
}

如果執行Publisher類,則可能會生成以下錯誤:

Wrapper class com.yiibai.GetHelloWorldAsString is not found. 
Have you run APT to generate them?

要解決此問題,請在命令提示字元下轉到當前專案的bin目錄。然後,執行以下命令:

wsgen -keep -cp . com.yiibai.HelloWorldImpl

現在,它將生成2個檔案:

  • SayHello
  • SayHelloResponse

將這些檔案貼上到com.yiibai 目錄中,然後執行Publisher 類。

如何檢視生成的WSDL?

執行Publisher 程式碼後,可以通過存取URL來檢視生成的WSDL檔案:

http://localhost:7788/ws/hello?wsdl

JAX-WS用戶端程式碼

檔案:HelloWorldClient.java -

package com.yiibai;

import java.net.URL;  
import javax.xml.namespace.QName;  
import javax.xml.ws.Service;  
public class HelloWorldClient{  
    public static void main(String[] args) throws Exception {  
    URL url = new URL("http://localhost:7788/ws/hello?wsdl");  

        //1st argument service URI, refer to wsdl document above  
    //2nd argument is service name, refer to wsdl document above  
        QName qname = new QName("https://www.tw511.com/", "HelloWorldImplService");  
        Service service = Service.create(url, qname);  
        HelloWorld hello = service.getPort(HelloWorld.class);  
        System.out.println(hello.getHelloWorldAsString("yiibai document web service"));  
     }  
 }

執行上面用戶端程式碼,得到以下結果-

Hello World JAX-WS yiibai document web service