程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 用Java客戶機調用Web服務: J2SE和J2EE環境中Web服務客戶機簡介(4)

用Java客戶機調用Web服務: J2SE和J2EE環境中Web服務客戶機簡介(4)

編輯:J2SE

存根

動態代理

動態調用接口(Dynamic Invocation Interface,DII)

存根和動態代理方法使用服務端點接口(Service Endpoint Interface,SEI)。它基本上是 WSDL 端口類型元素中描述 Web 服務操作的 Java 表示。它是定義 Java 客戶機用來與 Web 服務進行交互的方法的 Java 接口。SEI 是由從 WSDL 到 Java 的映射工具(比如 apache Axis 的 Java2WSDL 或 IBM WSDK 的 WSDL2ClIEnt)生成的。

SEI

服務端點接口(Service Endpoint Interface,SEI)是 WSDL A  is the Java representation of a WSDL port type.

存根

存根方法使用在從 WSDL 到 Java 映射階段運行之前創建的特定於平台的存根。因為存根是在運行之前創建的,所以它有時稱為 靜態存根。它是一個實現 SEI 的 Java 類。從 WSDL 到 Java 的映射工具生成所需的客戶端構件;該工具主要導入 WSDL 服務定義,然後創建相應的 Java 代碼。構件包括 SEI、存根、(可選)Holder、序列化器、反序列化器和實用程序類。JAX-RPC 建議把存根的實例綁定到特定的協議和傳輸上,比如 SOAP 綁定存根。對於存根方法,需要執行的步驟如下:

獲取一個 JAX-RPC 服務。

獲得一個存根。

在該存根上調用 Web 服務的操作。

步驟2和3顯示在 清單4中。請注意,使用 JAX-RPC Service 的 getPort 方法(在下一部分中進行描述)來獲取存根也是有可能的。

清單 4. 通過存根訪問 Web 服務

Hello myStub = (Hello) service.getHello();
System.out.println(myStub.getGreeting("Jane");

此方法的優勢在於它的簡單性。基本上指需要兩行代碼來訪問和調用 Web 服務的操作。然而,您需要知道開發時的 WSDL URL 並且運行您的從 WSDL 到 Java 的映射工具。另外,這些存根不是可移植的,因為它們依賴於實現類,並且不應該作為應用程序的一部分進行打包。可移植存根的設計超出了 JAX-RPC 1.0 和 1.1 的范圍。

動態代理

您可以使用代理從 JAX-RPC Service中調用 Web 服務的操作。代理是實現 SEI 的 Java 類。獲得代理使用的是 JAX-RPC Service 的getPort() 方法,它接受您想要調用的 Web 服務的端口的名稱(存在於 WSDL 文檔中)以及代理實現的 SEI。它之所以稱為 動態是因為該代理是在運行時創建的。動態代理客戶機的步驟如下:

獲取一個 JAX-RPC Service 。

使用 JAX-RPC Service 的 getPort() 方法來獲得一個代理以調用 Web 服務的操作。

在步驟1中,對於受管客戶機,通過把 WSDL URL 以及 Web 服務名參數傳送到 createService() 方法來獲得 JAX-RPC Service 。對於 J2EE 容器管理的客戶機,您通過 JNDI 查找來獲取 JAX-RPC Service 。清單5展示了在 Web 服務上調用“getGreeting”操作的動態代理方法(步驟2)。

清單 5. 在動態代理上調用 Web 服務的操作

String namespace = "http://Hello.com";
String portName = "Hello";
QName portQN = new QName(namespace, portName);

Hello myProxy = service.getPort(portQN, Hello.class);
System.out.println(myProxy.getGreeting("Jane"));

這是所有您為了使用動態代理方法調用 Web 服務而需要編寫的代碼。使用這種方法的優勢在於您可以編寫可移植的、廠商無關的代碼。然而,您需要知道開發時的 WSDL URL,並且需要在運行之前根據 WSDL 文檔運行您的從 WSDL 到 Java 的映射工具。如果您沒有這方面的信息,或者 WSDL URL 很可能改變,那麼您應該改為使用 DII 方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved