JAX-RPC 1.1 和 JSR 109 是 J2EE 1.4 的組成部分。
服務查找
有兩種客戶機,它們在代碼的編寫、打包和調用的方式上都不相同:
非受管客戶機
J2EE 容器管理的客戶機
這裡,非受管意指不是 J2EE 容器管理的。這些客戶機是 Java 2 Standard Edition(J2SE)客戶機,它們是通過簡單的 Java 命令進行調用的。對於非受管客戶機,服務查找是通過 JAX-RPC ServiceFactory 進行的,JAX-RPC ServiceFactory 是創建服務訪問點的工廠。對於 J2EE 容器管理的客戶機,服務查找是通過 JNDI 查找進行的。
ServiceFactory
JSR 101:“JAX-RPC ServiceFactory 是在 J2SE 環境中查找 Web 服務的標准方式。”
JAX-RPC ServiceFactory
JAX-RPC ServiceFactory 是一個抽象類,用作實例化 JAX-RPC Service 的工廠。它是廠商無關的,使您能夠編寫可移植代碼。ServiceFactory 是實例化的,可以如下進行使用: Javax.XML.rpc.Service service = ServiceFactory.newInstance().createService(...);
您需要將 Web 服務的全限定名(也就是名稱空間加上服務名稱)傳送到 createService() 方法和(可選)描述您想要查找的 Web 服務的 WSDL URL。步驟如下:
(可選)指定 WSDL URL。
指定 Web 服務的全限定名。
調用 ServiceFactory 的 createService() 方法。
然後可以使用獲得的服務接口(Service Interface)來獲取存根、動態代理、或 DII Call 對象,如“ 服務訪問”部分所述。在該部分中,同時還描述了動態調用接口(Dynamic Invocation Interface,DII)。使用這種方法,您不需要知道您想要調用的 Web 服務的 WSDL URL,您只需要指定 createService() 方法中的服務名稱參數。清單1展示了如何使用 ServiceFactory 實現 JAX-RPC Service 。QName 是一個 Javax.XML.namespace.QName 。
清單 1. 使用 JAX-RPC ServiceFactory 獲得 JAX-RPC 服務
String wsdlURL = http://localhost:6080/HelloWebService/services/Hello?wsdl";
String namespace = "http://Hello.com";
String serviceName = "HelloWebService";
QName serviceQN = new QName(namespace, serviceName);
ServiceFactory serviceFactory = ServiceFactory.newInstance();
/* The "new URL(wsdlURL)" parameter is optional */
Service service = serviceFactory.createService(new URL(wsdlURL), serviceQN);
由特定於廠商的 JAX-RPC ServiceFactory 可供選擇。如果您想要利用某個廠商的存根,使用這些 JAX-RPC ServiceFactory 通常是非常容易的(客戶機代碼編寫起來很簡單)。然而,這樣的擴展不是標准的,將很可能在其他廠商的 J2EE 實現上不起作用。
JNDI 查找
JSR 109:“JNDI 查找是在 J2EE 環境中查找 Web 服務的標准方式。”