WSDL看起来像这样:
预期的行为
如果我让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:
...
...
导致服务器端出现故障.似乎Axis对复杂类型的嵌套数组有困难.任何人都面临同样的问题,知道任何解决方法/修复?
发现
经过一些调查后,我能够通过在XSD定义中添加一个虚拟字段来产生预期的行为:
看来,在这种情况下,Axis正确创建了一个Parent包装器对象:
public class Parent {
private String dummy;
private Child[] child;
}
我的XML输出是正确的:
...
...
...
所以这似乎是Axis 1.4中的一个错误…
解决方法:
我最近找到了解决方案. wsdl2java似乎有一个未记录的-w选项,它是–wrapArrays的简写.如果使用SoapUI生成类,则可以选择此选项:
如上所述,此选项将为“某些架构阵列模式”创建类,例如我的问题中概述的模式.
如果您正在使用Eclipse生成Web服务客户端,则可以通过转到Eclipse的Preferences下的Axis Emitter并选中相应的复选框来配置相同类型的选项.
标签:java,serialization,web-services,axis
来源: https://codeday.me/bug/20190530/1184378.html