1

MTOM を有効にした CXF Web サービスを開発しました。MTOM 最適化のフィールド候補を JAXB に伝えるために、DTO に注釈を追加しました。

@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 はすべてのパブリック プロパティをマップされているものとして扱います。フィールドに注釈が付けられ、その名前がプロパティと一致しないため、2 番目のマッピングが取得されます。

解決

  1. 注釈をフィールドからプロパティ (getter) に移動します。
  2. クラスで指定@XmlAceesorType(XmlAccessType.FIELD)して、JAXB がフィールドに基づいてマッピングを行うようにします。
于 2012-09-21T23:31:42.787 に答える