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

Soap 使用带有MTOM附件的wsdl2cpp客户端生成wso2 cpp代码,soap,attachment,wso2,mtom,Soap,Attachment,Wso2,Mtom,我有一个用axis2(Java)公开的soap web服务,它将POJO(例如有名字的人等)序列化为动作响应。此外,我还有一个操作,它使用一个序列化的DataHandler,以便使用 < >我使用WSO2WSFCP提供的WSDL2CPP生成C++客户端代码。getPerson(personId)操作运行良好,结果与预期一致。然而,getFile(someId)操作是成功的,尽管生成的代码似乎不能正常工作 axis2.xml中设置的服务as enableMTOM=true以及客户端。我甚至在客户端

我有一个用axis2(Java)公开的soap web服务,它将POJO(例如有名字的人等)序列化为动作响应。此外,我还有一个操作,它使用一个序列化的DataHandler,以便使用

< >我使用WSO2WSFCP提供的WSDL2CPP生成C++客户端代码。getPerson(personId)操作运行良好,结果与预期一致。然而,getFile(someId)操作是成功的,尽管生成的代码似乎不能正常工作

axis2.xml中设置的服务as enableMTOM=true以及客户端。我甚至在客户端添加了Options.setEnableMTOM(true)以确保基本上是正确的

我认为问题在于从wsdl生成的代码,因为getFile(someId)响应的信封是有效的(我已经用Axis2CAPI手动测试了它,我可以按预期检索文件)

以下是响应的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>
以下是从服务收到的响应:

<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)


提前谢谢

我用gSoap做了同样的尝试,我也遇到了同样的问题。我认为axis2会自动检测二进制文件是否经过优化。此外,我发现在这两种情况下,wsdl公开的返回元素类型都是type=“xs:base64Binary”

我发现的唯一解决方法是使用python(或其他)脚本修补WSDL,用xop:Include替换xs:base64Binary,然后生成代码

这解决了问题,但也带来了可维护性问题

<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>