我必须使用 MTOM 附件来实现 SOAP 调用。WSDL 由外部合作伙伴提供,因此我不能/不想修改它。
我曾经使用axis2和adb生成客户端,但我更愿意使用CXF和JAXB,因为生成的代码看起来更干净。
遗憾的是,WSDL 将附件元素定义如下:
<xsd:element name="documentBinary" type="xsd:base64Binary" />
这使得 CXF (Wsdl2Java) 生成以下字段:
@XmlValue
protected byte[] documentBinary;
这将导致附件在 SOAP-Message 中内联,并且 SOAP-Service 将拒绝它。
轴 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 文件?