2

RESTEasy プロジェクトの JAXB 実装として EclipseLink の MOXy を使用しています。JSON のサポートという 1 つのことを除いて、すべてが正常に機能しています。RESTEasy の JettisonMappedContext を使用していますが、残念ながら、マーシャリング後の JSON には抽象スーパークラスに属するインスタンス変数フィールドしかありません。

@XmlRootElement
@XmlDiscriminatorNode("@type")
public abstract class Entity {

    public Entity(){}

    public Entity(String id){
        this.id = id;
    }

    private String id;

    @XmlElement
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

サブクラス:

@XmlRootElement
@XmlDiscriminatorValue("photo")
public class Photo extends Entity{

    private String thumbnail;

    public Photo(){}

    public Photo(String id) {
        super(id);
    }

    public void setThumbnail(String thumbnail) {
        this.thumbnail = thumbnail;
    }

    @XmlElement(name="thumbnail")
    public String getThumbnail() {
        return thumbnail;
    }
}

マーシャリング後の XML:

<object type="photo">
   <id>photoId423423</id>
   <thumbnail>http://dsadasadas.dsadas</thumbnail>
</object>

マーシャリング後の JSON:

"object":{"id":"photoId423423"}

これを達成する他の方法はありますか?

ありがとうございました。

4

1 に答える 1

4

更新 2

EclipseLink 2.4 が MOXy の JSON バインディングと共にリリースされました。

更新 1

EclipseLink 2.4で追加されたネイティブのMOXyオブジェクトからJSONへのバインディングのスニークピークを取得します:


次のエントリを含むモデル クラスに jaxb.properties ファイルという名前のファイルが含まれていることを確認します。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

このエントリがないと、リファレンス実装が使用され、EclipseLink JAXB (MOXy)拡張機能は結果の XML/JSON に表示されません。


私のブログの@DescrimatorNode の例を使用すると、生成される XML は次のようになります。

<customer>
   <contactInfo classifier="address-classifier">
      <street>1 A Street</street>
   </contactInfo>
</customer>

Jettison を活用してマーシャリングすると、次のようになります。

StringWriter strWriter = new StringWriter();
MappedNamespaceConvention con = new MappedNamespaceConvention();
AbstractXMLStreamWriter w = new MappedXMLStreamWriter(con, strWriter);
marshaller.marshal(customer, w);
System.out.println(strWriter.toString());

次に、次の JSON を取得します。

{"customer":{"contactInfo":{"@classifier":"address-classifier","street":"1 A Street"}}}

JAXB と JSON の詳細については、次を参照してください。

于 2011-04-04T15:21:07.870 に答える