首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WebLogic Server 10 中 JAX-WS 2.0 與 JAXB 2.0 實戰指南

     編輯:Java 相關知識

背景:JAX-WS 與 JAXB 關係

JAX-WS 繼承 JAX-RPC,採用標準 API 開發/部署 Web Service。JAXB 負責 Java/XML 綁定,JAX-WS 全面委託 JAXB 處理數據綁定。WebLogic 10.1 基於 GlassFish RI 實現,支援 JAX-WS 2.0 / JAXB 2.0。

JAXB 2.0 能力速覽

  • 從 WSDL <xs:schema> 生成 Java 對象圖(支援 import/include)。
  • 從 Java 類生成 XML Schema。
  • 支援 SAX/StAX/Fast Infoset 解析與序列化。
  • XML Infoset 隨機訪問。
  • 內嵌/外部綁定自定義。
  • 基於事件的流式取消編組。
  • 二進制數據編組(MTOM/MIME)。
  • 插件擴展代碼生成。

不足:無法從 XML 文檔反推 Schema(工具可補);解析效能略低於 SAX/StAX。

兩大編程模型

  1. 從 Java 起步:手寫/工具生成 Java 類與 JWS 註解,完全掌控方法簽名數據類型。WebLogic 提供 jwsc Ant 任務(內部封裝 wsimport)。
  2. 從 WSDL 起步:由 WSDL 生成服務端點骨架代碼。WebLogic 提供 wsdlc Ant 任務(內部封裝 wsimport)。

實戰:DataStagingService 開發全流程

1. 綁定自定義文件

控制生成包名、Javadoc、Schema 綁定:

<bindings xmlns:jxb="https://java.sun.com/xml/ns/jaxb"
          xmlns="https://java.sun.com/xml/ns/jaxws"
          wsdlLocation="DataStagingService2.wsdl">
  <bindings node="wsdl:definitions">
    <package name="services.datastaging">...</package>
    <jxb:schemaBindings>
      <jxb:package name="com.acmeworld.irad.services.datastaging"/>
    </jxb:schemaBindings>
  </bindings>
</bindings>

2. WSDL Schema 片段

<xs:complexType name="DataStaging">
  <xs:sequence>
    <xs:element name="inputURIs">...</xs:element>
  </xs:sequence>
</xs:complexType>
<xs:element name="dataStaging" type="tns:DataStaging"/>

3. Ant 構建關鍵片段

類路徑:引用 ${bea.home}/modules 下 GlassFish RI JAR(共享 Java EE 庫模塊)。

wsdlc 生成骨架:

<wsdlc type="JAXWS" srcWsdl="etc/${wsdl.file}.wsdl"
       destJwsDir="WebContent/WEB-INF/lib" destImplDir="${src.dir}"
       explode="false">
  <binding dir="etc" includes="${client.binding}"/>
</wsdlc>

生成實現類位於自定義包 com.acmeworld.irad.services.datastaging。

jwsc 編譯打包 WAR:

<jwsc destdir="${domain.home}/deployments/${project.name}"
       srcdir="${src.dir}/${package.path}">
  <binding dir="etc" includes="${client.binding}"/>
  <module name="${portType.name}Impl">
    <jws file="${service.name}Impl.java" type="JAXWS"
         compiledWsdl="WebContent/WEB-INF/lib/${wsdl.file}_wsdl.jar">
      <WLHttpTransport contextPath="datastaging"
          serviceUri="DataStagingService" portName="DataStagingServicePort"/>
    </jws>
  </module>
</jwsc>

避免在代碼中硬編碼 WebLogic 專有註解(如 @WLHttpTransport),改在 Ant 任務中聲明,保持代碼可移植。

4. 部署與測試

  • wldeploy Ant 任務部署至運行中 WLS 實例。
  • WebLogic Test Client (/wls_utc) 進行功能測試。
  • 編寫 JAX-WS 客戶端:使用 Dispatch<Source> + StreamSource/StreamResult 處理 XML Payload,配合 JAXP 轉換器輸出結果。

最佳實踐精華

  1. 避免廠商專有註解:在 Ant 任務中聲明傳輸綁定,代碼保持標準化。
  2. 優先使用 StreamSource/StreamResult:最高效處理 XML 序列化/反序列化。
  3. 緩存 JAXBContext:創建開銷大,務必複用。
  4. 內部類編組用 JAXBElement:匿名複雜類型生成的內部類缺 @XmlRootElement,需包裝為 JAXBElement 才能編組。

可移植性驗證

示例代碼零 WebLogic 專有類依賴,修改 build.xml 的 Ant 任務與 JAR 路徑即可在 Axis2 等其他 JAX-WS 實現上編譯運行。

結語

WebLogic 10 通過 GlassFish RI + BEA Ant 任務,提供標準、可移植的 JAX-WS/JAXB 開發體驗。掌握自定義文件與 Ant 任務配置,即可高效構建下一代 Java Web Service。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved