由于做到的项目需要跟别的系统交互,我们这边提供wsdl文档给其他系统的开发人员,今天测试的时候,用C#来根据wsdl生成的客户端调用Java的Web Server时,连最简单的返回string类型获取的值都是null,但是如果直接根据Web服务产生的wsdl来生成C#客户端,就能正常返回值.对比了下原wsdl文档与Web服务产生的wsdl文档,发现之间没有什么区别。
后来把利用wsdl.exe和wsdl文档生成的客户端代码与直接在项目中引用Java的Web服务产生的代码对比一下。发现只有一个地方不同,就是在调用Web 服务的方法中返回值特性中存在差异:根据wsdl 工具生成的客户端代码的是 [return: System.Xml.Serialization.XmlElementAttribute("out", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)];直接引用Web服务的客户端代码是 [return: System.Xml.Serialization.XmlElementAttribute("out")],直接去掉Form = System.Xml.Schema.XmlSchemaForm.Unqualified这个属性,原来利用工具生成的客户端调用Java Web服务也能正确获取返回值了。
System.Xml.Schema.XmlSchemaForm这个枚举中有三个值:None,Qualified,Unqualified,代表的意思是架构中不指定元素和属性窗体、必须用命名空间限定元素和属性、不要求用命名空间限定元素和属性。这个属性存在于跨平台调用时如果wsdl文档没有设计好,可能就会会在返回值为null的问题了。例如wsdl中的<xsd:schema />元素中没有设定attributeFormDefault和elementFormDefault属性,则默认值是qualified。这样当在Java中生成Web服务时,消息传送时会带上命名空间。而在C#里利用wsdl工具生成的客户端中,则会在schem声明的各个元素中默认加上Form = System.Xml.Schema.XmlSchemaForm.Unqualified,当调用Java的web 服务获取返回值时,接收消息的时候不会带上命名空间,这样一来,双方的消息格式不一致,就造成了获取值为null。
除了在设计wsdl时在<xsd:schema />中设置attributeFormDefault和elementFormDefault属性来避免这个外,还可以修改客户端代码,例如直接在C#的客户端代码中把Form = System.Xml.Schema.XmlSchemaForm.Unqualified取消或者设置Qualified。
分享到:
相关推荐
NULL 博文链接:https://747017186.iteye.com/blog/2371155
NULL 博文链接:https://caerun.iteye.com/blog/793998
NULL 博文链接:https://hongyegu.iteye.com/blog/637103
NULL 博文链接:https://13851619632.iteye.com/blog/2359075
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户...
NULL 博文链接:https://shenxueliang.iteye.com/blog/1734414
NULL 博文链接:https://13851619632.iteye.com/blog/2359067
2.使用VS.NET中的Add Web Reference菜单选项 23..net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 24.在C#中,string str = null 与 string str = ...
使用VS.NET中的Add Web Reference菜单选项 23..net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 24.在C#中,string str = null 与 string str = “” ...
ps:主要解决在webservice中,我们想从另外一个项目调用webservice项目的接口,也就是跨项目调用接口 这里主要用到了xfire wsdl 废话不说了 直接上东西 1. 首先新建一个项目 2. 在src下创建两个文件: a) 第一个是你...
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...
NULL 博文链接:https://ap0406708.iteye.com/blog/685745
NULL 博文链接:https://hefengjun1.iteye.com/blog/2326367
八、ASP.NET有多种维护状态的技术,以下哪种是保存在客户端的?( ) A.VIEWSTATEB.SESSIONC.APPLICATIOND.数据CACHE 九、Cookies的默认生命周期有多长? ( ) A.20分钟B.30分钟C. 一天D.随浏览器的关闭而失效 十...
入/web/WEB-INF/services/目录中就能被访问和调用,有点繁琐,但axis2功能十分强大,方法的返回类型不仅可 以用自定义实体类,还可以是List,Map,Set之类的集合,基本数据类型就不用说了。 下载这个资源后,把它部署...
WSDL – WebService Description Language – Web服务描述语言。 SOAP-Simple Object Access Protocol(简单对象访问协议) SOA(Service-Oriented Architecture) :面向服务的架构 它是一种思想,...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
NULL 博文链接:https://larry-lv.iteye.com/blog/1149281
NULL 博文链接:https://xiaoming123123.iteye.com/blog/1609654