NPPYQ的学习笔记

每天进步一点点

导航

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字符串.

这样能够避免各个系统之间的兼容性问题.

 

 

 

 

 

 

 

posted on 2008-12-05 15:11  NPPYQ  阅读(2019)  评论(0编辑  收藏  举报