我必须使用MTOM-Attachments实现SOAP调用。 WSDL由外部合作伙伴提供,因此我不能/不想修改它。
我曾经使用axis2和adb生成客户端,但我更倾向于使用CXF和JAXB,因为生成的代码看起来更清晰。
遗憾的是,WSDL将附件元素定义如下:
<xsd:element name="documentBinary" type="xsd:base64Binary" />
这使得CXF(Wsdl2Java)生成以下字段:
@XmlValue
protected byte[] documentBinary;
这将导致在SOAP-Message中内联附件,SOAP-Service将拒绝它。
Axis 2用于使用相同的.xsd和.wsdl文件生成DataHandler类型的字段。
我知道我可以将定义更改为
<xsd:element name="documentBinary" type="xsd:base64Binary" xmime:expectedContentTypes="*/*">
将生成正确的代码:
@XmlElement(required = true)
@XmlMimeType("*/*")
protected DataHandler documentBinary;
有没有办法强制CXF在不触及WSDL的情况下生成第二个结果(宁可不会,因为它是由第三方提供的)。也许通过使用JAXB / JAXWS-Bindings文件?