2

我必须使用 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 文件?

4

0 回答 0