我有一个用axis2(Java)公开的soap web服务,它将POJO序列化,例如具有名称等的Person,作为动作响应。此外,我有一个动作,它使用一个序列化的DataHandler,以便使用<xop:Include ...></xop:Include>
我使用wso2 wsfcpp提供的wsdl2cpp在c ++中生成了客户端代码。 getPerson(personId)操作正常,结果如预期。但是,尽管生成的代码似乎无法正常工作,但getFile(someId)操作仍然成功。
在axis2.xml和客户端中设置enableMTOM = true的服务。我甚至在主客户端添加了Options.setEnableMTOM(true)。
我认为问题是从wsdl生成的代码,因为getFile(someId)响应的包络是有效的(我已经使用axis2c api手动测试了它,我可以按预期检索文件)。
以下是响应中wsdl(由axis2 Java生成)中包含的模式:
<xs:element name="getFileResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:base64Binary"/>
</xs:sequence>
</xs:complexType>
</xs:element>
以下是用于生成客户端代码的命令行:
WSDL2CPP -uri MyService.xml -g -d adb -u -f
以下是从服务收到的回复:
<ns:getFileResponse xmlns:ns="http://services.myplace.com">
<ns:return>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:1.3ad8fc0571509f196559ee5312c14d23250854e4c9c8383e@apache.org"></xop:Include>
</ns:return>
</ns:getFileResponse>
wsdl中是否缺少某些内容或wsfcpp未实现该功能(具有MTOM客户端代码生成的soap)?
提前致谢!
答案 0 :(得分:1)
我和gSoap尝试过同样的事情,我遇到了同样的问题。我想轴2会自动检测二进制是否优化。另外,我发现在任何一种情况下,wsdl公开的返回元素类型是type =“xs:base64Binary”。
我发现的唯一工作是修补,通过xop替换xs:base64Binary:Include,使用python(或其他)脚本编写WSDL,然后生成代码。
解决了这个问题,但却产生了可维护性问题。