AXIS的"dotnet_soapenc_bugfix"属性会自动重设的bug,将导致c++客户端调用soap接口失败
2011-03-12 20:44
387 查看
项目里开发的JIRA,使用了AXIS对外提供了soap接口。另外我们使用了gsoap开发了一个com组件,并通过它实现Excel上传问题单到JIRA服务器上。今天碰到一台服务器的这个功能居然失效了,经定位发现是com组件调用java的soap接口失败了。
通常遇到这种情况肯定会认为是JIRA出问题了,但是后来我使用了soapTest工具测试了一些SOAP接口,并写了一个JAVA CLIENT调用了下SOAP接口发现接口并没有问题。后来只能比较本地正常的JIRA服务返回数据与出问题的服务器返回数据有什么区别,这才发现是服务的wsdl定义变了
正常的wsdl是定义为:<element name="email" nillable="true" type="xsd:string"/>
而出问题的wsdl定义为<element name="email" nillable="true" type="xsoapenc:string"/>
即里面的所有的xsd:string都莫名其妙的变成了xsoapenc:string
经过查找了相关资料:http://www.thatsjava.com/java-enterprise/4866
http://issues.apache.org/jira/browse/AXIS-1879
http://issues.apache.org/jira/browse/AXIS-1976
这才发现原来AXIS存在一个"dotnet_soapenc_bugfix"属性会自动重设的bug。而一旦发生这个bug后,wsdl定义的xsd:string都会变成了xsoapenc:string,而xsd与xsoapenc两种声明方式在个大部分的客户端语言联合调用时都没有问题,比如JAVA,.NET,PHP等,但是却对c++的影响很大。而我们写的com组件是通过gsoap调用wsdl后生成的文件编译而成的,所以一旦wsdl的定义都发生了变化,自然调用接口失败。
目前这个bug产生的频率还不知道有多高,只能先观察一段时间后再看是否修改了。
或许只能像网上说的那样,即在每个方法钱都调用
if ( !TypeMappingImpl.dotnet_soapenc_bugfix ) {
TypeMappingImpl.dotnet_soapenc_bugfix = true;
}
通常遇到这种情况肯定会认为是JIRA出问题了,但是后来我使用了soapTest工具测试了一些SOAP接口,并写了一个JAVA CLIENT调用了下SOAP接口发现接口并没有问题。后来只能比较本地正常的JIRA服务返回数据与出问题的服务器返回数据有什么区别,这才发现是服务的wsdl定义变了
正常的wsdl是定义为:<element name="email" nillable="true" type="xsd:string"/>
而出问题的wsdl定义为<element name="email" nillable="true" type="xsoapenc:string"/>
即里面的所有的xsd:string都莫名其妙的变成了xsoapenc:string
经过查找了相关资料:http://www.thatsjava.com/java-enterprise/4866
http://issues.apache.org/jira/browse/AXIS-1879
http://issues.apache.org/jira/browse/AXIS-1976
这才发现原来AXIS存在一个"dotnet_soapenc_bugfix"属性会自动重设的bug。而一旦发生这个bug后,wsdl定义的xsd:string都会变成了xsoapenc:string,而xsd与xsoapenc两种声明方式在个大部分的客户端语言联合调用时都没有问题,比如JAVA,.NET,PHP等,但是却对c++的影响很大。而我们写的com组件是通过gsoap调用wsdl后生成的文件编译而成的,所以一旦wsdl的定义都发生了变化,自然调用接口失败。
目前这个bug产生的频率还不知道有多高,只能先观察一段时间后再看是否修改了。
或许只能像网上说的那样,即在每个方法钱都调用
if ( !TypeMappingImpl.dotnet_soapenc_bugfix ) {
TypeMappingImpl.dotnet_soapenc_bugfix = true;
}
相关文章推荐
- 在DLL编程中调用模版类时出现的类似"class“XXX”需要有 dll 接口由 class“XXX”的客户端使用"的warning的解决方案
- "getline" bug fix for Microsoft Visual C++ 6.0 关于VC6的getline输入需要两个回车才结束的BUG修改方法
- 不知道发布端(即服务器端)是哪种发布技术的情况下,客户端使用axis去调用,报错:unexpected element (uri:" Expected elements are <
- html中input type="text" 的readonly 属性与asp.net服务器控件TextBox的readonly属性的js赋值、调用的小bug
- KNI接口 "KNI_GetFieldID" 调用失败问题的解决
- axis1.4 客户端调用webservice接口返回错误:no SOAPAction header!
- C++ CreateInstance("ADODB.Connection");创建接口失败的解决方法
- "在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"
- Eclipse编写和调试Applet程序,调试的时候Eclipse会自动调用Java "小程序查看程序",而不用嵌入到网页中查看运行效果。
- 关于stm32 APB总线上的"接口时钟使能"与"外设时钟使能"
- 在DLL编程中调用模版类时出现的类似"class“XXX”需要有 dll 接口由 class“XXX”的客户端使用"的warning的解决方案
- <c:forEach varStatus="status">中 varStatus的属性简介
- 关于将RadioButtonList的AutoPostBack属性设置为"True"获取子项时候引起回发的问题解决方法
- VS 如何自动生成 aspx.designer.cs文件内容(解决"The base class includes the field ''"错误)
- "使用 Windows 身份验证"连接 SQL Server 失败
- &nbsp;符号导致DIV,a,u自动换行
- "Pure Virtual Function Called" 纯虚函数调用错误分析(翻译)
- msql 如何用"最小缺失数"实现日期的自动补全
- IOS Layer的"自动布局"
- 图解用"MySQL Administrator"工具实现自动备份数据库