Axis2 針對 WSDL 複雜型型別會生成對應的 Java Bean(支援序列化)。利用 StAX 與 Axis2 OM API,可在物件與 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);
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 定義一致。ns1)需與對端協定一致,否則可能驗證失敗。ByteArrayOutputStream 避免字串拼接效能問題。XMLStreamException、FactoryConfigurationError 需妥善捕獲。