包含在复杂类型中的数组在Java代码中被解开(Axis 1.4)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了包含在复杂类型中的数组在Java代码中被解开(Axis 1.4),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1541字,纯文字阅读大概需要3分钟。
内容图文
![包含在复杂类型中的数组在Java代码中被解开(Axis 1.4)](/upload/InfoBanner/zyjiaocheng/815/6dc47f17e4c045609f7fc98556256c8d.jpg)
WSDL看起来像这样:
<xsd:element name="Parent">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" ref="tns:Child"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
预期的行为
如果我让Axis 1.4基于WSDL生成Java代码,我希望我的对象中包含以下字段:
public class MyComplexObject {
private Parent parent;
}
Parent类由一组Child对象组成.
public class Parent {
private Child[] child;
}
实际行为
实际行为是Child对象列表直接在父对象级别定义:
public class MyComplexObject {
private Child[] parent;
}
当我们通过填充数组调用webservice时,它将产生以下XML:
<Parent>
...
</Parent>
<Parent>
...
</Parent>
导致服务器端出现故障.似乎Axis对复杂类型的嵌套数组有困难.任何人都面临同样的问题,知道任何解决方法/修复?
发现
经过一些调查后,我能够通过在XSD定义中添加一个虚拟字段来产生预期的行为:
<xsd:element name="Parent">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Dummy" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" ref="tns:Child"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
看来,在这种情况下,Axis正确创建了一个Parent包装器对象:
public class Parent {
private String dummy;
private Child[] child;
}
我的XML输出是正确的:
<Parent>
<Dummy>...</Dummy>
<Child>...</Child>
<Child>...</Child>
</Parent>
所以这似乎是Axis 1.4中的一个错误…
解决方法:
我最近找到了解决方案. wsdl2java似乎有一个未记录的-w选项,它是–wrapArrays的简写.如果使用SoapUI生成类,则可以选择此选项:
如上所述,此选项将为“某些架构阵列模式”创建类,例如我的问题中概述的模式.
如果您正在使用Eclipse生成Web服务客户端,则可以通过转到Eclipse的Preferences下的Axis Emitter并选中相应的复选框来配置相同类型的选项.
内容总结
以上是互联网集市为您收集整理的包含在复杂类型中的数组在Java代码中被解开(Axis 1.4)全部内容,希望文章能够帮你解决包含在复杂类型中的数组在Java代码中被解开(Axis 1.4)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。