使用 JAX-WS 建立簡單 Web 服務和客戶端(文件文字)

這是專案目錄。

StackOverflow 文件

  1. 服務端點介面

首先,我們將建立一個服務端點介面。javax.jws.WebService @WebService 批註將類定義為 Web 服務端點。


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

// Service Interface with customize targetNamespace
@WebService(targetNamespace = "http://hello-soap/ws")
@SOAPBinding(style = Style.DOCUMENT, use=Use.LITERAL) //optional
public interface HelloSoap {

    @WebMethod String getHelloSoap(String name);

}
  1. 服務端點實施(SEI)

接下來我們將建立服務端點實現。我們將通過將 endpointInterface 元素新增到實現類中的 @WebService 註釋來建立顯式介面。以下是一些規則集 28.1.1 JAX-WS 端點必須遵循的 JAX-WS 端點的要求。getHelloSoap 方法向客戶端返回一個問候語,並將名稱傳遞給它。


import javax.jws.WebService;

// Customized Service Implementation (portName,serviceName,targetNamespace are optional)

@WebService(portName = "HelloSoapPort", serviceName = "HelloSoapService",
endpointInterface = "com.wonderland.hellosoap.HelloSoap", targetNamespace = "http://hello-soap/ws")
public class HelloSoapImpl implements HelloSoap {

    @Override
    public String getHelloSoap(String name) {
        return "[JAX-WS] Hello : " + name;
    }

}
  1. Web 服務端點發布者

import javax.xml.ws.Endpoint;

public class HelloSoapPublisher {

    public static void main(String[] args) {
        // creating web service endpoint publisher
        Endpoint.publish("http://localhost:9000/ws/hello-soap", new HelloSoapImpl());
    }

}
  1. 接下來的步驟,我們將執行 HelloSoapPublisher.java 作為 java 應用程式。然後,我們將通過在 Web 瀏覽器中請求 URL http://localhost:9000/ws/hello-soap?wsdl 來檢視 WSDL 檔案。

HTTP://本地主機:9000 / WS /你好皁 WSDL

如果在 Web 瀏覽器上顯示 XML 資料格式,那麼我們就可以開始下一步了。

StackOverflow 文件

注意:
如果你收到某種錯誤訊息,可能需要使用 wsgen 工具生成必要的 JAX-WS 可移植工件。我們在這裡沒有涉及 wsgen 工具。

  1. Web 服務客戶端

最後一步,我們將建立一個訪問我們已釋出服務的客戶端。


import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class HelloSoapClient {

    public static void main(String[] args) throws Exception {

        // create wsdl url
        URL wsdlDocumentUrl = new URL("http://localhost:8000/ws/hello-soap?wsdl");
        QName helloSoapService = new QName("http://hello-soap/ws", "HelloSoapService");
        // create web service
        Service service = Service.create(wsdlDocumentUrl, helloSoapService);
        // get object of pointed service port
        HelloSoap helloSoap = service.getPort(HelloSoap.class);
        // testing request
        System.out.println(helloSoap.getHelloSoap("Soap "));

    }

}

輸出: [JAX-WS] Hello : Soap

注意: 我們的 Web 服務客戶端中的埠號已更改為 8000。這裡的原因是,我使用 Eclipse IDE,內建 TCP/IP monitor 工具來跟蹤訊息(更多資訊: 如何在 Eclipse IDE 中跟蹤 SOAP 訊息 )。出於功能測試目的嘗試 SoapUI | SOAP 和 REST API 的功能測試