У меня есть веб-служба мыла, представленная с помощью оси 2 (Java), которая сериализует POJO, например, человека с именем и т. Д., В качестве ответов на действия. Кроме того, у меня есть действие, которое использует DataHandler, который сериализован, чтобы поместить двоичное вложение в ответ, используя <xop:Include ...></xop:Include>
Я сгенерировал клиентский код на С++, используя wsdl2cpp, предоставленный wso2 wsfcpp. Действие getPerson(personId) работает нормально, и результаты соответствуют ожиданиям. Однако действие getFile(someId) выполнено успешно, хотя сгенерированный код не работает должным образом.
Служба как enableMTOM=true устанавливается в axis2.xml, а также в клиенте. Я даже добавил Options.setEnableMTOM(true), чтобы быть уверенным в главном на стороне клиента.
Я считаю, что проблема заключается в коде, сгенерированном из wsdl, поскольку конверт ответа getFile(someId) действителен (и я протестировал его вручную с помощью API axis2c, и я могу получить файл, как и ожидалось).
Вот схема, содержащаяся в wsdl (сгенерированном из оси 2 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:[email protected]"></xop:Include>
</ns:return>
</ns:getFileResponse>
Что-то отсутствует в wsdl или эта функция (мыло с генерацией кода клиента MTOM) не реализована в wsfcpp?
Заранее спасибо!