2012-09-21 37 views
1

我開發了啓用MTOM的CXF Web服務。我添加的註釋向我DTO告訴JAXB爲MTOM優化領域的候選人:在CXF上使用@XmlMimeType()在WSDL中生成的重複屬性,爲什麼?

@XmlType 
public class FileDTO { 

    private String Name; 
    private String FileType; 

    @XmlMimeType("application/octet-stream") 
    private DataHandler Dfile; 
    ... 
部署webservice時

,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似乎是重複的!

爲什麼會發生?

當我嘗試生成Java客戶端

wsdl2java -client d:\service.wsdl 

我得到以下錯誤:

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

謝謝!!

回答

1

默認情況下,JAXB將所有公共屬性視爲映射。由於您註釋了一個字段,並且其名稱與該屬性不匹配,您將獲得第二個映射。

  1. 移動從字段註釋到屬性(吸氣)。
  2. 在類上指定@XmlAceesorType(XmlAccessType.FIELD),以便JAXB將映射基於字段。
+1

太棒了!它正在工作。非常感謝你。 – jmhostalet

相關問題