JAVA调用DOTNET写的返回为DataSet类型的WebService函数出错 [cvc-complex-type.4:Attribte 'part' must appear on element 'mime:content'.]
JAVA调用DOTNET写的返回为DataSet类型的WebService函数出错
出错信息为:
<mime:content type="application/x-www-form-urlencoded" />
cvc-complex-type.4:Attribte 'part' must appear on element 'mime:content'.
因为它是使用匿名架构类型声明的,仅顶级命名类型可以与 rpc\literal SOAP 消息一...
根本原因为:
DOTNET编写的WebService函数,如果返回类型为DataSet,则出现该问题.
客户Java端到底是怎样的,由于我只是做服务端,客户只反应上面2个问题.
而我用DotNet程序测试无问题,最后客户说明是Java端调用.
Java中没有DotNet内置的DataSet类,无法解析.
虽然网上有些在Java下的类似DataSet类能有限解决该问题,但是最好还是用标准方法.
解决方法:
WebService函数,最终返回结果是个xml字符串,而DataSet产生的xml字符串,是使用匿名架构类型声明的.
所以必须使用简单数据类型或简单数据类型数组.
在尽量少改变原有代码的基础上,有以下2种解决方法.
1 服务器端返回为string,内容为xml字符串,可以使用DataSet.GetXml()方法.
服务端改动量很少.
对应客户端需要自己读取该xml字符串.
2 返回为包含简单数据类型的类数组,但在服务端要将DataSet中的各个字段都一一映射的数组中.
客户端很方便读取.
服务端改动量稍微大点,如果字段多的话就麻烦了.
总结:
WebService传输数据时,参数类型最好是简单数据类型,或者直接是个xml字符串.
这样能够避免各个系统之间的兼容性问题.