[size=small]最近,我们的项目有个融合需求,合作方需要我们根据其客户端规范提供相应的SOAP服务,对方提供了文档,并且提供了相应的wsdl文件。
我们用xfire框架根据文档中的描述做好了demo,然后使用它们提供的wsdl文件生成了客户端的代码,再进行测试,结果发现,客户端代码可以调用程序,却不能将参数正确地传递到服务端。
开始分析对比两份wsdl文件。一开始以为是namespace的原因,配置好了以后还是不行。后来比对了两份wsdl文件生成的客户端代码,发现对方提供的wsdl文件生成的客户端代码是使用的请求对象的属性使用的是原始对象,如String等,而我们生成的客户端代码,几乎都是JAXBElement类定义的属性。上网查了下资料,发现是因为 nillable 这个属性造成的。
找到原因后,开始查怎样才能把 nillable 这个属性去掉。找了很多资料都说XFire框架没办法控制这个 nillable 这个属性,建议换成JAXB,后来不断地折腾,一会儿是用axis2,一会儿是XFIRE+JAXB,可以把nillable这个属性值去掉,但又会引起其他一些乱七八糟的问题。
在我都要放弃的时候,忽然想说,把这个nillable放到aegis配置文件中,看看有啥作用。结果nillable这个属性去掉了,但是生成出来的wsdl文件中丢掉了minOccurs这个属性,既然可以在aegis文件配置nillable属性,minOccurs这个应该也可以起作用,测试了下后是可以使用的。至此,问题总算解决了。[/size]
[color=red][size=small]注:maxOccurs这个属性貌似不起作用。[/size][/color]
[b][size=small]配置文件信息如下:[/size][/b]
[b][size=small]生成的WSDL文件内容为:[/size][/b]
[b][size=small]参考资料:[/size][/b]
[url]http://www.blogjava.net/wufalong/articles/209901.html[/url]
[url]http://hi.baidu.com/hero8_8_8/item/413e16fb75f70a1ba62988d8[/url]
我们用xfire框架根据文档中的描述做好了demo,然后使用它们提供的wsdl文件生成了客户端的代码,再进行测试,结果发现,客户端代码可以调用程序,却不能将参数正确地传递到服务端。
开始分析对比两份wsdl文件。一开始以为是namespace的原因,配置好了以后还是不行。后来比对了两份wsdl文件生成的客户端代码,发现对方提供的wsdl文件生成的客户端代码是使用的请求对象的属性使用的是原始对象,如String等,而我们生成的客户端代码,几乎都是JAXBElement类定义的属性。上网查了下资料,发现是因为 nillable 这个属性造成的。
找到原因后,开始查怎样才能把 nillable 这个属性去掉。找了很多资料都说XFire框架没办法控制这个 nillable 这个属性,建议换成JAXB,后来不断地折腾,一会儿是用axis2,一会儿是XFIRE+JAXB,可以把nillable这个属性值去掉,但又会引起其他一些乱七八糟的问题。
在我都要放弃的时候,忽然想说,把这个nillable放到aegis配置文件中,看看有啥作用。结果nillable这个属性去掉了,但是生成出来的wsdl文件中丢掉了minOccurs这个属性,既然可以在aegis文件配置nillable属性,minOccurs这个应该也可以起作用,测试了下后是可以使用的。至此,问题总算解决了。[/size]
[color=red][size=small]注:maxOccurs这个属性貌似不起作用。[/size][/color]
[b][size=small]配置文件信息如下:[/size][/b]
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:s="http://yournamespace.com/">
<mapping name="s:RequestName">
<property name="code" mappedName="Code" minOccurs="0" componentType="java.lang.String" />
</mapping>
</mappings>
[b][size=small]生成的WSDL文件内容为:[/size][/b]
<xsd:complexType name="RequestName">
<xsd:sequence>
<xsd:element minOccurs="0" name="Code" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
[b][size=small]参考资料:[/size][/b]
[url]http://www.blogjava.net/wufalong/articles/209901.html[/url]
[url]http://hi.baidu.com/hero8_8_8/item/413e16fb75f70a1ba62988d8[/url]