繁体   English   中英

带有MTOM附件的wsdl2cpp客户端的wso2 cpp代码生成

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM