我已经使用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);

希望对您有所帮助。

关于java - 带有XMLBeans数据绑定(bind)的Axis2-从具有anyType的XSD架构生成的Java客户端出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4041636/

10-09 03:04