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。
<xs:schema> 生成 Java 對象圖(支援 import/include)。不足:無法從 XML 文檔反推 Schema(工具可補);解析效能略低於 SAX/StAX。
jwsc Ant 任務(內部封裝 wsimport)。wsdlc Ant 任務(內部封裝 wsimport)。控制生成包名、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>
<xs:complexType name="DataStaging">
<xs:sequence>
<xs:element name="inputURIs">...</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="dataStaging" type="tns:DataStaging"/>
類路徑:引用 ${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 任務中聲明,保持代碼可移植。
wldeploy Ant 任務部署至運行中 WLS 實例。/wls_utc) 進行功能測試。Dispatch<Source> + StreamSource/StreamResult 處理 XML Payload,配合 JAXP 轉換器輸出結果。@XmlRootElement,需包裝為 JAXBElement 才能編組。示例代碼零 WebLogic 專有類依賴,修改 build.xml 的 Ant 任務與 JAR 路徑即可在 Axis2 等其他 JAX-WS 實現上編譯運行。
WebLogic 10 通過 GlassFish RI + BEA Ant 任務,提供標準、可移植的 JAX-WS/JAXB 開發體驗。掌握自定義文件與 Ant 任務配置,即可高效構建下一代 Java Web Service。