我开发了一个启用了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 将所有公共属性视为已映射。 由于您被批注了一个字段,并且其名称与属性不匹配,因此您将获得第二个映射。
溶液
- 将注释从字段移动到属性 (getter)。
- 在类上指定
@XmlAceesorType(XmlAccessType.FIELD)
,以便 JAXB 基于字段进行映射。