創建Dispatch對象,該對象用于調用Web服務操作。Dispatch對象在功能上等同于JAX-RPC中的Call對象(與DII編程模型一起使用)。
通過XML文檔創建有效負載。這違背了“為各個元素實例化一個對象”的實踐,JAX-RPC需要這樣。
調用Web服務操作。此外需要格外小心,因為“操作名稱”包裝器元素并不會自動添加。如果服務端點需要一個,則需要自己添加。
使用JAXP轉換類將響應從Web服務操作編組到java.io.ByteArrayOutputStream中。您可以處理所需的一切內容(比如說byte[]、String和XML)。同樣,這遠沒有在JAX-RPC中處理JavaBean圖(或javax.xml.soap.SOAPElement對象)費力。
以上是整個步驟的總結。希望您可更好的理解如何在WebLogic Server 10中使用JAX-WS 2.0和JAXB 2.0實現。這些實現中的API即可以在服務提供者端使用,也可以在服務用戶端使用。請查看我所提供的示例代碼,您會發現其中沒有使用(或導入)任何特定于WebLogic的類。這表示該代碼是完全可移植的,并且應該能夠在Axis2上編譯,而無需對代碼(或定制文件)進行任何修改。但是,您需要修改build.xml文件,使JAX-WS和JAXB實現使用Axis2所使用的.jar文件。還需要修改用于JAX-WS、JAXB和部署的Ant任務。
一些最佳實踐
以下列出了在WebLogic Server 10中使用JAX-WS和JAXB 實現的一些最佳實踐:
避免在代碼中使用特定于供應商的注釋。這樣在嘗試不同供應商的JAX-WS實現時就無需對代碼進行修改。通常,JAX-WS實現供應商都提供了在Ant任務中訪問特定于供應商注釋的方法。WebLogic Server使用的是這一選項,因此您應該利用這一特性,以避免在JWS中使用特定于供應商的注釋。
在可能的地方使用JAXP StreamSource和 and StreamResult。javax.xml.transform.stream.StreamSource和javax.xml.transform.stream.StreamResult所類提供的方法可以最有效地處理Java串行化(和并行化)問題。因此,您應該盡可能地使用它們。
緩存JAXBContext對象。javax.xml.bind.JAXBContext對象是一個用于通過Java類創建JAXB對象的工廠。創建JAXBContext對象需要的開銷比較大,因此應該緩存它們從而便于重用。
使用JAXBElement編組內部類。JAXB 2.0將使用內部類用于匿名complexType元素。如果您之后在Web服務操作的方法簽名中使用其中某個元素,那么將在構建時接收到一個javax.xml.bind.MarshalException異常。問題是內部類并不是高級元素,因此并沒有@XmlRootElement注釋。解決的方法是為內部類創建一個JAXBElement對象。要了解如何創建該對象,請在DataStagingServiceImpl.java文件中搜索"JAXBElement"。
文章來源于領測軟件測試網 http://www.kjueaiud.com/