带有XMLBeans数据绑定的Axis2 - 使用anyType从XSD架构生成的Java客户端的问题

时间:2010-10-28 09:47:31

标签: java xsd axis2 xmlbeans

我使用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是否有办法解决这个问题。

1 个答案:

答案 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);

我希望它有所帮助。