Генерация кода wso2 cpp на стороне клиента wsdl2cpp с вложением MTOM

У меня есть веб-служба мыла, представленная с помощью оси 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?

Заранее спасибо!


person the wonderer    schedule 23.05.2012    source источник


Ответы (1)


Я пробовал то же самое с gSoap, и у меня была та же проблема. Я понял, что axis2 автоматически определяет, оптимизирован двоичный файл или нет. Кроме того, я обнаружил, что в любом случае тип возвращаемого элемента, предоставляемый wsdl, — это type="xs:base64Binary".

Единственная работа, которую я нашел, заключалась в том, чтобы исправить, заменив xs:base64Binary на xop:Include, WSDL с помощью скрипта python (или любого другого), а затем сгенерировать код.

Это решило проблему, но создает проблемы с ремонтопригодностью.

person the wonderer    schedule 19.07.2012