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

Apache CXF 入門:JAXB/JAX-WS 標準下的 Web 服務開發與部署實戰

     編輯:Java 相關知識

Apache CXF 是 Apache 基金會繼 Axis2 後的另一力作,雖同源卻採截然不同設計哲學。本文介紹 CXF 使用 JAXB 2.x 數據綁定與 JAX-WS 2.x 註解配置的基礎開發流程,並與 Axis2、Metro 進行横向對比,展示跨堆棧相容性與模組化部署優勢。

CXF 核心特性對比

特性CXFAxis2Metro
開發起點Java 代碼或 WSDL 雙向同同
服務建模操作↔方法、端口類型↔介面同同
數據綁定選擇支援 JAXB/XMLBeans/其他,WSDL 生成代碼僅限 JAXB/XMLBeans支援多種,但 WSDL 生成不支援 JAXB 標準僅 JAXB(參考實現)
配置技術(前端)首選 JAX-WS 2.x 註解 + XML 配置JAX-WS 支援有限制JAX-WS 參考實現,支援完整
模組化 JAR高度模組化,按需打包(/lib/WHICH_JARS 指引)單體部署模式單體部署模式
部署單元WAR 檔(內建 Jetty 生產級 HTTP 伺服器)服務安裝目錄熱部署多服務WAR 檔
WS-Security內建完整支援需額外模組內建完整支援

示例應用:圖書館服務

定義 4 操作:getBook、getBooksByType、getTypes、addBook。WSDL、JAXB 數據模型、服務類與 Axis2/Metro 版本幾乎相同,僅包名與服務名稱異,驗證 JAXB/JAX-WS 跨堆棧相容性。

客戶端開發

  • 代碼與 Axis2/Metro 完全相同,僅構建工具從 wsimport 換為 CXF wsdl2java。
  • 預設 CXF 大量日誌輸出至控制台,需設定 -Djava.util.logging.config.file=logging.properties 抑制(僅 WARNING/SEVERE)。

伺服器端部署:Spring 整合配置

需建立 WAR 包含:服務實作類、JAXB 模型類、CXF 庫 JAR、兩個配置文件。

web.xml:標準 Servlet 配置


<web-app version="2.4" xmlns="https://java.sun.com/xml/ns/j2ee">
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath:META-INF/cxf/cxf.xml
      classpath:META-INF/cxf/cxf-extension-soap.xml
      classpath:META-INF/cxf/cxf-servlet.xml
    </param-value>
  </context-param>
  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

cxf-servlet.xml:Spring Bean 定義端點


<beans xmlns="https://www.springframework.org/schema/beans"
  xmlns:jaxws="https://cxf.apache.org/jaxws"
  xsi:schemaLocation="...
  https://cxf.apache.org/jaxws https://cxf.apache.org/schemas/jaxws.xsd">

  <jaxws:endpoint
    id="Processor"
    implementor="com.sosnoski.ws.library.cxf.CXFLibraryImpl"
    wsdlLocation="WEB-INF/wsdl/library.wsdl"
    address="/" />
</beans>

jaxws:endpoint 即 Spring Bean(EndpointImpl 實例),wsdlLocation 可選(未指定則運行時自動生成)。

構建與運行:Java SE 6 類別載入衝突注意

  • Java SE 6 內建 JAXB/JAX-WS 參考實現,若 CXF 版本較新可能衝突。構建腳本需視 JDK 版本決定是否打包 JAXB/JAX-WS JAR。
  • Ant build.xml 自動調用 wsdl2java、編譯、打包 WAR。部署後 ant run 執行客戶端驗證。

Spring 在 CXF 中的角色

CXF 全棧配置(含內部訊息流攔截器鏈)均基於 Spring IoC。cxf-servlet.xml 僅是冰山一角,核心流程配置內建於 CXF JAR 的 XML 中(參見 web.xml 的 contextConfigLocation),可透過自訂配置覆蓋或擴展。

展望

CXF 功能遠超此簡介,後續將深入 WS-Security 實作,對比三大堆棧在安全領域的差異。JAXB/JAX-WS 標準化帶來的跨堆棧遷移自由,是技術選型的重要資產。

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