Заставить cxf сгенерировать DataHandler вместо байта [] для вложения MTOM

Я должен реализовать SOAP-вызовы с использованием MTOM-вложений. WSDL предоставляется внешним партнером, поэтому я не могу / не хочу его изменять.

Я использовал для генерации клиента, используя axis2 и adb, но я бы предпочел использовать CXF и JAXB, потому что сгенерированный код выглядит намного чище.

К сожалению, WSDL определяет элемент вложения следующим образом:

<xsd:element name="documentBinary" type="xsd:base64Binary" />

Что заставляет CXF (Wsdl2Java) генерировать следующее поле:

@XmlValue
protected byte[] documentBinary;

Это приведет к тому, что вложение будет встроено в SOAP-сообщение, а SOAP-сервис отклонит его.

Ось 2 использовалась для генерации поля типа DataHandler с использованием тех же файлов.xsd и.wsdl.

Я знаю, что могу изменить определение на

<xsd:element name="documentBinary" type="xsd:base64Binary" xmime:expectedContentTypes="*/*">

который сгенерирует правильный код:

@XmlElement(required = true)
@XmlMimeType("*/*")
protected DataHandler documentBinary;

Есть ли способ заставить CXF сгенерировать второй результат, не касаясь WSDL (скорее нет, так как он предоставлен третьей стороной). Может быть, с помощью файла JAXB/JAXWS-Bindings?

0 ответов

Другие вопросы по тегам