アクション応答として、名前を持つ Person などの POJO をシリアル化する axis2 (Java) で公開された SOAP Web サービスがあります。さらに、バイナリ添付ファイルを使用して応答に入れるためにシリアル化された DataHandler を使用するアクションがあります<xop:Include ...></xop:Include>
wso2 wsfcpp が提供する wsdl2cpp を使用して、c++ でクライアント側コードを生成しました。getPerson(personId) アクションは正常に機能し、結果は期待どおりです。ただし、生成されたコードは正しく動作していないように見えますが、getFile(someId) アクションは成功しています。
サービスは、クライアントと同様に axis2.xml で enableMTOM=true に設定されます。クライアント側のメインに確実に Options.setEnableMTOM(true) を追加しました。
getFile(someId) 応答のエンベロープが有効であるため、問題は wsdl から生成されるコードにあると思います (そして、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 に何か欠けているものがありますか、それともその機能 (MTOM クライアント コード生成を伴う SOAP) が wsfcpp によって実装されていませんか?
前もって感謝します!