[英]wso2 cpp code generation with wsdl2cpp client side with MTOM attachment
我有一个用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客户端代码生成的功能)?
提前致谢!
我用gSoap尝试了同样的事情,但遇到了同样的问题。 我发现axis2会自动检测二进制文件是否已优化。 另外,我发现无论哪种情况,wsdl公开的返回元素类型都是type =“ xs:base64Binary”。
我发现的唯一解决方法是通过使用xop:Include替换xs:base64Binary到xop:Include来打补丁,然后使用python(或其他方式)脚本编写WSDL,然后生成代码。
这就解决了问题,但提出了可维护性问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.