簡體   English   中英

帶有XMLBeans數據綁定的Axis2-從具有anyType的XSD架構生成的Java客戶端出現問題

[英]Axis2 with XMLBeans data binding - Problem with a java client generated from a XSD schema with anyType

我已經使用Axis2框架和XMLBeans作為數據綁定方法生成了一個客戶端。 XSD架構如下:
<xsd:schema>
<xsd:element name="profile" type="anyType"/>
</xsd:schema>

生成的Java對象(包含SOAP請求)包含getter和setter方法,這些方法允許獲取和設置概要文件。 這是方法簽名: requestDocument.setProfile(XmlObject profile);

問題是,即使我必須傳遞多個節點作為概要文件,也不傳遞有效的XML文檔,但是XMLObject期望具有根節點的XML文檔。

我需要通過:
<accounts></accounts>
<payees></payees>

實際上,我使用的服務期望這些節點,但沒有將它們約束在架構中。 因此,我無法添加另一個根節點,因為即使該服務不會引發任何異常,該配置文件也將無法使用。

XMLBeans已經添加了基礎XML樹,我的意思是請求文檔中的profile節點。 因此,我不能將其用作根節點。 如果添加根節點,將創建以下XML
<profile> <profile></profile> </profile>

我希望文檔的格式如下:
<profile>
<accounts></accounts> <payees></payees>
</profile>

我更喜歡不修改服務的架構。 我想知道Axis2 / XMLBeans是否可以解決此問題。

我發現一個解決方案可能是一種解決方法,而不是應采用的干凈方法。 代替使用XMLObject設置配置文件,如下所示:
requestDocument.setProfile(XmlObject profile);
我使用org.w3c.dom.Node對象創建配置文件內容。 見下文:
1.創建要添加到概要文件中的元素org.w3c.dom.Element
Element accountsElt = profileDocument.createElement("accounts");
Element payeesElt = profileDocument.createElement("payees");
2.在要發送到服務的文檔中創建一個空的配置文件,請注意該對象是自動生成的:
requestDocument.addNewProfile();
3.獲取空的配置文件並將子級添加到其根節點: requestDocument.getProfile().getDomNode().appendChild(accountsElt); requestDocument.getProfile().getDomNode().appendChild(payeesElt);

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM