4

、、、、およびProductのプロパティをname持つクラスがありdateCreated、JAXB マーシャリングを使用しています。次のような出力が欲しいです:createdByUserdateModifiedmodifiedByUser

<product>
    <name>...</name>
    <auditInfo>
        <dateCreated>...</dateCreated>
        <createdByUser>...</createdByUser>
        <dateModified>...</dateModified>
        <modifiedByUser>...</modifiedByUser>
    </auditInfo>
</product>

AuditInfoしかし、理想的には、これらのプロパティの周りに別のラッパー クラスを作成する必要はありません。

JAXB アノテーションでこれを行う方法はありますか? 見まし@XmlElementWrapperたが、それはコレクション専用です。

4

2 に答える 2

3

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB 2.X ( JSR-222 ) エキスパート グループのメンバーです。

このユースケースでは、 MOXy の@XmlPath拡張機能を使用できます。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Product {

    private String name;

    @XmlPath("auditInfo/dateCreated/text()")
    private Date dateCreated;

    @XmlPath("auditInfo/createdByUser/text()")
    private String createdByUser;
}

詳細については:

于 2011-07-05T18:21:21.307 に答える
2

いいえ、そうは思いません。中間クラスが必要です。

内にAuditInfoネストされた内部クラスを持ち、. 必要なクライアントは決して知りません。ProductProductAuditInfoProduct

public class Product {
   private @XmlElement AuditInfo auditInfo = new AuditInfo();

   public void setDateCreated(...) {
      auditInfo.dateCreated = ...
   }

   public static class AuditInfo {
      private @XmlElement String dateCreated;
   }
}
于 2011-07-05T18:15:22.957 に答える