`
hu437
  • 浏览: 193180 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

axis2客户端调用时ArrayOf_xsd_string类型的处理

阅读更多

今天在使用axis2调用一个Axis1的webservice时出现了一个如下类型的数据

 

 

<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="xxxxxxx">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ArrayOf_xsd_string">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
</wsdl:types>

 

 这个类型的数据在,服务端也就是一个string数组,在客户端写的调用代码自然而然的想到也是映射成一个string数组,调用时出现:

Found character data inside an array element while deserializing

 

在网上搜索了半天,无果,也没有找到解决办法。关键时刻还是要靠自己。

 

在使用eclipse里面的web Service Explorer调用时看到请求的SOAP信息如下:

 

 

 <phone q0:arrayType="xsd:string[1]" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="q0:Array">
  <string xsi:type="xsd:string">1592523xxxx</string> 
  </phone>

 

在使用HttpAnalyzer监控java代码的调时发现传递的这样的信息:

  <item0 xmlns="">1592823xxxx</item0> 
  <item0 xmlns="">1338333xxxx</item0> 

 

感觉这个不像是数组,所以我就将java代码中,原先的一维数组变成二维数组试一下

String[] phones = {"1592823xxxx","1338333xxxx"};

 

String[][] phones = {{"15925232137","1837393xxxx"}};

 重新调用测试,发现调用成功

 

 

 

0
2
分享到:
评论
2 楼 xhbgq 2016-03-10  
谢谢分享,虽然没明白为啥要二维数组才能解决,可能还有好的办法,比如通过设置。
但是解决了我碰到的问题。
1 楼 cs6641468 2013-01-29  
请问客户端代码如何调用的?
我定义了一个getArray的方法,返回一个Strings数组,客户端如下调用:
String[] strs = (String[]) serviceClient.invokeBlocking(getArrayMethod, new Object[]{},new Class[]{String[].class})[0];

可以结果得到的strs的length=1(即数组只有一个值),而这个值是几个换行符(\n),并不是getArray应该返回的内容

相关推荐

Global site tag (gtag.js) - Google Analytics