本文討論WebLogic Server 9(下簡稱WLS9)中的新特性:java Web Service (JWS)。WLS9的Web Services子系統實現了J2EE 1.4中的Web Services的新標準: EnterPRise Web Services 1.1 specification (JSR-921)。該規范定義了標準的J2EE Web Service打包格式,部署模塊以及運行時服務。
public class StringChanger { @WebMethod() public String toUpper(String upperReqString) { …… 這個類的源代碼和普通的JAVA代碼沒太多區別,但和普通JAVA代碼不同的是這里面還包含了很多以@開頭的代碼,或者稱為注釋,也就是在Java 5中的新語法,JSR-175。JSR-175規范只是定義這種語法規則,而用這種語法來如何將這個類生成一個Web Service接口,則需要由JSR-181規范來決定。所以這些JSR-175的注釋才真正決定了這個Web Service的行為和外觀。
假如希望Eclipse的配置盡量吻合本文的環境,可參考我的另一篇文章:“使用Eclipse加速Weblogic Server開發”的第一步到第二步。配置好后在Eclipse的File->New Project中選取Java Project,在Project Name中將我們這個練習的名字設為JSR-181 Web Services或任何你喜歡的名字,JDK Compliance中選擇“Use a project specific compliance 5.0”,其余保持默認。一個符合我們需要的Project就建好了。
做好1到4步驟就可以按照后面幾節所述完成練習。但假如想快速看一下練習結果,將本文附件solution包括所有源代碼。解壓到您磁盤任何位置,用Eclipse創建好一空的名為JSR-181 Web Services的Project后,用solution解出的JSR-181 Web Services文件夾替換這個Project的文件夾。最后在Eclipse的Package Explorer中刷新一下,就瀏覽已經開發配置好Eclipse Project代碼了。修改項目的wls-build-tools路徑下weblogicServer.properties中的WLS和JDK環境變量,然后就可以執行ANT腳本中的任務來編譯,部署,測試等步驟。
Buildfile: C:/project/eclipse31/workspace/JSR-181 Web Services/build.xml build.jbClient: [clientgen] Generating client from http://localhost:7001/jb/StringChangerService?WSDL ... [clientgen] Getting partner link [clientgen] Package name is client.test [clientgen] DestDir is C:/project/eclipse31/workspace/JSR-181 Web Services [clientgen] class name is StringChangerPort_Stub [clientgen] service class name is StringChangerService [clientgen] Porttype name is StringChangerPort [clientgen] service impl name is StringChangerService_Impl [javac] Compiling 4 source files to C:/temp BUILD SUCCESSFUL Total time: 20 seconds
回到Eclipse的Package Explorer視圖,在“JSR-181 Web Services”上右鍵選Refresh,能看到在項目中增加了一個名為client.test的包。展開這個包能看到里面包含若干JAVA文件,XML文件和WSDL文件。這些文件就是自動生成的客戶端代碼。打開資源治理器到C:/TEMP/client/test,能看到生成的客戶端代碼的class文件。
toUpper request: This is my test String ;-) toUpper results: THIS IS MY TEST STRING ;-) toLower request: This is my test String ;-) toLower results: this is my test string ;-)
Buildfile: C:/project/eclipse31/workspace/JSR-181 Web Services/build.xml build.ejbClient: [clientgen] Generating client from jar:file:C:/temp/ejb/PurchaseOrder.jar!/META-INF/PurchaseOrderService.wsdl … [clientgen] Getting partner link [clientgen] Package name is client.test [clientgen] DestDir is C:/project/eclipse31/workspace/JSR-181 Web Services [clientgen] class name is PurchaseOrderPort_Stub [clientgen] service class name is PurchaseOrderService [clientgen] Porttype name is PurchaseOrderPort [clientgen] service impl name is PurchaseOrderService_Impl [javac] Compiling 4 source files to C:/temp BUILD SUCCESSFUL Total time: 11 seconds
import client.test.PurchaseOrderPort; import client.test.PurchaseOrderService; import client.test.PurchaseOrderService_Impl; public class TestDriver_EJB { public static void main(String[] args) throws ServiceException, RemoteException{ String url = “http://localhost:7001/ejb/PurchaseOrderService?WSDL”; PurchaseOrderService service = new PurchaseOrderService_Impl(url); PurchaseOrderPort port = service.getPurchaseOrderPort(); String testString = “This is my test String ;-)”;