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

Java Web 服務:Metro 框架入門與部署實戰

     編輯:Java 相關知識

Metro 是 Sun 開源的 Web 服務堆疊,整合 JAXB 2.x、JAX-WS 2.x 參考實現與 WS-* 擴展。可獨立部署於 Tomcat 等 Servlet 容器,亦內建於 Glassfish。本文對比 Metro 與 Axis2 架構差異,並以圖書館服務示範從 WSDL 生成代碼到 WAR 部署的完整流程。

Metro vs Axis2 核心差異

維度MetroAxis2
核心基礎JAXB 2.x + JAX-WS 2.x(唯一支援)模組化,支援多種資料綁定
處理器架構整合於引擎,非可拔插模組模組化處理器鏈,高度可配置
WSDL 角色運行時必需,動態構建服務模型主要用於代碼生成,運行時可選
部署單元每服務一個 WAR,含 sun-jaxws.xml單一 Axis2 WAR 托管多服務(AAR)
管理工具無內建,依賴外部監控Web 控制台支援部署/監控

範例服務:圖書館管理

四個操作:getBook、getBooksByType、getTypes、addBook。WSDL 與 Axis2 版本相同,僅服務名與端點不同。

伺服器端部署:兩個關鍵配置檔

WEB-INF/web.xml

<listener>
  <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
  <servlet-name>MetroLibraryPort</servlet-name>
  <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>MetroLibraryPort</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

WEB-INF/sun-jaxws.xml

<endpoints version="2.0" xmlns="https://java.sun.com/xml/ns/jax-ws/ri/runtime">
  <endpoint name="MetroLibraryPort"
      implementation="com.example.MetroLibraryImpl"
      url-pattern="/"
      wsdl-location="WEB-INF/wsdl/library.wsdl"/>
</endpoints>

若省略 wsdl-location,Metro 會自動生成 WSDL;使用 WSIT 時必須提供包含策略擴展的 WSDL。

JRE 內建 JAX-WS 衝突處理

Java SE 6+ 內建 JAX-WS API,若 Metro 版本較新會發生類載入衝突。解決方案:

  1. 升級 JRE 至最新版
  2. 設定 java.endorsed.dirs 指向 Metro webservices-api.jar(Tomcat 可用 JAVA_ENDORSED_DIRS 環境變數)
  3. 或在 JRE/lib/endorsed/ 放入 webservices-api.jar

採用方案 2/3 時,WAR 無需打包該 JAR。

建構與運行

  1. 下載 Metro 1.5+,設定 build.properties 的 metro-home
  2. ant:調用 wsimport 生成代碼、編譯、打包 metro-library.war
  3. 部署 WAR 至 Tomcat
  4. 設定 Tomcat CATALINA_OPTS=-Dcom.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace=false 避免預設發送堆疊追蹤導致客戶端 NPE
  5. ant run 執行客戶端測試

客戶端代碼

與 Axis2/JAX-WS 版本相同:wsimport 生成服務介面,客戶端透過注入 WebServiceRef 或手動建立 Service 呼叫操作。

總結

Metro 採用嵌入式部署模型,配置簡潔(web.xml + sun-jaxws.xml),適合「一服務一 WAR」的微服務風格。下一篇將深入 WS-Security 配置與互操作性。

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