Заставить 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?