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

Axis2 物件與 XML 字串雙向轉換實作

     編輯:Java 相關知識

Axis2 針對 WSDL 複雜型型別會生成對應的 Java Bean(支援序列化)。利用 StAX 與 Axis2 OM API,可在物件與 XML 字串間自由轉換,適用於訊息記錄、快取、跨系統傳遞等場景。

一、物件 → XML 字串

// 假設 userCredentialsType 為 Axis2 生成的 Bean
StringWriter stringWriter = new StringWriter();
XMLStreamWriter xmlWriter = StAXUtils.createXMLStreamWriter(stringWriter);
MTOMAwareXMLStreamWriter mtomWriter = new MTOMAwareXMLSerializer(xmlWriter);

userCredentialsType.serialize(
    new QName("https://newautovideo.com/siteengine/ws/types", "ns1"),
    OMAbstractFactory.getSOAP11Factory(),
    mtomWriter
);

xmlWriter.flush();
xmlWriter.close();
String xmlString = stringWriter.toString();
System.out.println("OM String ==> " + xmlString);

二、XML 字串 → 物件

XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(
    new ByteArrayInputStream(xmlString.getBytes())
);
UserCredentialsType result = UserCredentialsType.Factory.parse(xmlReader);
System.out.println("OM Object ==> " + result.getUserID());

三、關鍵類別說明

  • StAXUtils:Axis2 提供的 StAX 工具類,建立 Reader/Writer。
  • MTOMAwareXMLSerializer:處理 MTOM 附件序列化的包裝 Writer。
  • OMAbstractFactory.getSOAP11Factory():指定 SOAP 1.1 訊息工廠。
  • QName:元素的命名空間與本地名稱,需與 WSDL 定義一致。

四、應用場景

  1. 請求/回應 XML 寫入日誌或資料庫稽核。
  2. 將物件序列化存入 Redis 快取,取出後反序列化繼續處理。
  3. 單元測試中比對預期 XML 與實際產出。

五、注意事項

  • 命名空間前綴(如 ns1)需與對端協定一致,否則可能驗證失敗。
  • 大量資料轉換建議使用 ByteArrayOutputStream 避免字串拼接效能問題。
  • 異常處理:XMLStreamException、FactoryConfigurationError 需妥善捕獲。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved