在 CXF 上使用 @XmlMimeType() 在 WSDL 中生成的重复属性,为什么



我开发了一个启用了MTOM的CXF Web服务。我在 DTO 中添加了一个注释,以告诉 JAXB MTOM 优化的字段候选者:

@XmlType
public class FileDTO {
    private String Name;
    private String FileType;
    @XmlMimeType("application/octet-stream")
    private DataHandler Dfile;
    ...

部署 Web 服务时,WSDL 中的 DTO 定义如下所示:

<xs:complexType name="fileDTO"> 
  <xs:sequence> 
    <xs:element name="Dfile" type="xs:base64Binary" minOccurs="0" xmime:expectedContentTypes="application/octet-stream"/> 
    <xs:element name="dfile" type="xs:base64Binary" minOccurs="0"/> 
    <xs:element name="fileType" type="xs:string" minOccurs="0"/> 
    <xs:element name="name" type="xs:string" minOccurs="0"/> 
  </xs:sequence> 
</xs:complexType>

不知何故,私人成员DFile似乎是重复的!

为什么会这样?

当我尝试使用

wsdl2java -client d:service.wsdl

我收到以下错误:

WSDLToJava Error: d:service.wsdl [26,1]: Two declarations cause a collision in the ObjectFactory class.

谢谢!!

缺省情况下,JAXB 将所有公共属性视为已映射。 由于您被批注了一个字段,并且其名称与属性不匹配,因此您将获得第二个映射。

溶液

  1. 将注释从字段移动到属性 (getter)。
  2. 在类上指定@XmlAceesorType(XmlAccessType.FIELD),以便 JAXB 基于字段进行映射。

相关内容

  • 没有找到相关文章

最新更新