java中axis是什么意思_包含在复杂类型中的数组在Java代码中被解开(Axis 1.4)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值