我使用Axis2框架生成了一个客户端,XMLBeans作为数据绑定方法。
XSD架构如下:
<xsd:schema>
<xsd:element name="profile" type="anyType"/>
</xsd:schema>
生成的参与SOAP请求的java对象包含允许获取和设置配置文件的getter和setter方法。这是方法签名:
requestDocument.setProfile(XmlObject profile);
问题是,即使我必须传递多个节点作为配置文件而不是有效的XML文档,但XMLObject需要一个带有根节点的XML文档。
我需要通过:
<accounts></accounts>
<payees></payees>
实际上,我使用的服务需要这些节点,但不会在架构中约束它们。因此,我无法添加另一个根节点,因为即使该服务不会抛出任何异常,该配置文件也将无法使用。
XMLBeans已经添加了基础XML树,我的意思是请求文档中的配置文件节点。因此,我不能将它用作根节点。如果我添加根节点,将创建以下XML
<profile>
<profile></profile>
</profile>
我希望将文档格式化如下:
<profile>
<accounts></accounts>
<payees></payees>
</profile>
我不想修改服务的架构。我想知道Axis2 / XMLBeans是否有办法解决这个问题。
答案 0 :(得分:1)
我找到的解决方案可能是一种解决方法,而不是应该采取的干净方式。
而不是使用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);
我希望它有所帮助。