使用 JAX-WS 建立簡單 Web 服務和客戶端(文件文字)
這是專案目錄。
- 服務端點介面
首先,我們將建立一個服務端點介面。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);
}
- 服務端點實施(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;
}
}
- 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());
}
}
- 接下來的步驟,我們將執行
HelloSoapPublisher.java
作為 java 應用程式。然後,我們將通過在 Web 瀏覽器中請求 URLhttp://localhost:9000/ws/hello-soap?wsdl
來檢視 WSDL 檔案。
HTTP://本地主機:9000 / WS /你好皁 WSDL
如果在 Web 瀏覽器上顯示 XML 資料格式,那麼我們就可以開始下一步了。
注意:
如果你收到某種錯誤訊息,可能需要使用wsgen
工具生成必要的 JAX-WS 可移植工件。我們在這裡沒有涉及wsgen
工具。
- 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 的功能測試 。