1

我开发了一个启用了 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 似乎是重复的!

为什么会这样?

当我尝试生成一个java客户端时

wsdl2java -client d:\service.wsdl

我收到以下错误:

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

谢谢 !!

4

1 回答 1

1

默认情况下,JAXB 将所有公共属性视为已映射。由于您被注释了一个字段并且它的名称与您获得第二个映射的属性不匹配。

解决方案

  1. 将注释从字段移动到属性(getter)。
  2. 在类上指定@XmlAceesorType(XmlAccessType.FIELD),以便 JAXB 将映射基于字段。
于 2012-09-21T23:31:42.787 回答