WebService 開發中,掌握請求/響應細節至關重要。三大神器各司其職:
SOAP(Simple Object Access Protocol)是基於 XML 的輕量級協議,運行於 HTTP 之上,實現跨語言、跨平台的遠程調用。核心結構:
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/> <!-- 可選:安全、事務等元數據 -->
<soap:Body> <!-- 必選:實際業務負載 -->
<ns:methodName>...</ns:methodName>
</soap:Body>
</soap:Envelope>
qqCheckOnline輸入 QQ 號 → 發送請求 → 獲得響應:
<soap:Envelope ...>
<soap:Body>
<qqCheckOnlineResponse xmlns="https://WebXml.com.cn/">
<qqCheckOnlineResult>N</qqCheckOnlineResult> <!-- N=離線, Y=在線 -->
</qqCheckOnlineResponse>
</soap:Body>
</soap:Envelope>
Window → Show View → Other → MyEclipse Common → TCP/IP Monitor9876127.0.0.1(目標服務地址)6666(目標服務端口)TCP/IP(保持原始路徑轉發)https://127.0.0.1:9876/helloworld?wsdl 即可捕獲完整交互。通過 JAX-WS 注解精確控制生成的 WSDL 結構,實現契約穩定與版本演進:
@WebService(
name = "MyName", // portType name
portName = "MyPort", // port name
serviceName = "MyService", // service name
targetNamespace = "https://leaf.com/mynamespace"
)
public class HelloWorld {
private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@WebMethod(action = "myAction", operationName = "myOperationName")
@WebResult(name = "mySayHelloResult")
public String sayHello() {
return "HelloWorld";
}
@WebMethod(action = "mySayHiAction", operationName = "mySayHiOperationName")
@WebResult(name = "mySayHiResult")
public String sayHi(
@WebParam(name = "myParamName", header = true, mode = Mode.IN) String name
) {
return "你好:" + name + ",當前時間:" + SDF.format(new Date());
}
public static void main(String[] args) {
Endpoint.publish("https://127.0.0.1:6666/helloworld", new HelloWorld());
}
}
| 注解 | 作用 | 對應 WSDL 元素 |
|---|---|---|
@WebService | 定義服務端點 | portType, service, port |
@WebMethod | 暴露為操作 | operation, soapAction |
@WebParam | 自定義參數名、位置 | message part, header/body |
@WebResult | 自定義返回值名 | output message part |
// 1. 生成存根:wsimport -s . https://127.0.0.1:6666/helloworld?wsdl
// 2. 調用代碼
public class Client {
public static void main(String[] args) {
MyName port = new MyService().getMyPort(); // 對應 portName
String result = port.mySayHiOperationName("王健"); // 對應 operationName
System.err.println(result);
}
}
@WebService 即可。掌握 SOAP 結構、工具鏈與註解定制,即可構建健壯、可演進的企業級 WebService 服務。