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

时间:2012-05-23 15:47:23

标签: soap attachment wso2 mtom

我有一个用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)?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我和gSoap尝试过同样的事情,我遇到了同样的问题。我想轴2会自动检测二进制是否优化。另外,我发现在任何一种情况下,wsdl公开的返回元素类型是type =“xs:base64Binary”。

我发现的唯一工作是修补,通过xop替换xs:base64Binary:Include,使用python(或其他)脚本编写WSDL,然后生成代码。

解决了这个问题,但却产生了可维护性问题。