gpt4 book ai didi

java - Axis 1.4 无法正确反序列化数组

转载 作者:行者123 更新时间:2023-11-30 07:24:12 35 4
gpt4 key购买 nike

我有一个网络服务,它返回一个包含数组的对象。我由 wsdl4j 生成的 Bean 类。如果我调用该服务,该对象始终返回正确的字段,但数组始终只有一个条目。 Web 服务响应有两个条目,但在 Axis 中的某个位置,第二个条目将丢失。服务似乎没问题,只是 Axis 代码内的处理似乎是错误的。

这是响应正文的内容

[<projectDataReturn xsi:type="ns4:ProjectDataResult" xmlns:ns4="http://results.ws.appserver.secutrial.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<errorCode xsi:type="xsd:int">0</errorCode>
<message xsi:type="soapenc:string" xsi:nil="true" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>
<statusCode xsi:type="xsd:int">1</statusCode>
<project xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HAHA</project>
<centres xsi:type="ns5:CentreBean" xmlns:ns5="http://beans.eo.secutrial.de"><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name></centres>
<centres xsi:type="ns6:CentreBean" xmlns:ns6="http://beans.eo.secutrial.de"><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center2</name></centres>
</projectDataReturn>]

所以最后我只在 ProjectDataResult 的 CentreBean 数组中得到“Center2”。我尝试过单步调试,但没有成功。

我发现RPCElement.publishToHandler()方法后RPCElement的参数是错误的。该方法重播一些 SAX 事件 (org.apache.axis.message.SAX2EventRecorder),两个 CentreBean 都被处理,但只有最后一个会成为结果的一部分。

有人解决这个问题了吗?

最佳答案

我猜问题出在网络服务的设计方式上。

中心应该是一个复杂的类型,可以发送多个中心数据。 (数组类型)

所以理想情况下网络服务应该已经返回

[<projectDataReturn xsi:type="ns4:ProjectDataResult" xmlns:ns4="http://results.ws.appserver.secutrial.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<errorCode xsi:type="xsd:int">0</errorCode>
<message xsi:type="soapenc:string" xsi:nil="true" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/>
<statusCode xsi:type="xsd:int">1</statusCode>
<project xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HAHA</project>
<centres xsi:type="ns5:CentreBean" xmlns:ns5="http://beans.eo.secutrial.de">
<centre>
<name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name>
</centre>
<centre>
<name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name>
</centre>
</centres>

]

所以我在这里想说的是,“Centres”应该是一个具有“Centre”bean 数组类型的 bean,并且每个 Center 将具有字符串类型名称。

如果网络服务被设计为以这种方式返回数据,则 Axis 将生成如上所述的 stub ,并且您将能够以数组形式获取中心。

现在发生的情况是它穿过两个中心,并且由于它不是数组类型,当 Centre2 读取第二个值时,它的值将被 Centre2 覆盖。

关于java - Axis 1.4 无法正确反序列化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031566/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com