3

次の xml を検討してください。

<Config>
    <Paths>
        <Path reference="WS_License"/>
    </Paths>

    <Steps>
        <Step id="WS_License" title="License Agreement" />
    </Steps>
</Config>

以下の JAXB クラス:

public class Path {

    private String _reference;

    public String getReference() {
        return _reference;
    }

    @XmlAttribute
    public void setReference( String reference ) {
        _reference = reference;
    }

}

public class Step {

    private String _id;
    private String _title;

    public String getId() {
        return _id;
    }

    @XmlAttribute
    public void setId( String id ) {
        _id = id;
    }

    public String getTitle() {
        return _title;
    }

    @XmlAttribute
    public void setTitle( String title ) {
        _title = title;
    }

}

参照を Path オブジェクトに String として格納する代わりに、Step オブジェクトとして保持したいと思います。これらのオブジェクト間のリンクは、参照属性と id 属性です。@XMLJavaTypeAdapter 属性を使用する方法はありますか? 正しい使い方の例を教えてくれる人はいますか?

ありがとう!

編集:

また、要素で同じ手法を実行したいと思います。

次の xml を検討してください。

<Config>
    <Step id="WS_License" title="License Agreement">
        <DetailPanelReference reference="DP_License" />
    </Step>

    <DetailPanels>
        <DetalPanel id="DP_License" title="License Agreement" />
    </DetailPanels>
</Config>

以下の JAXB クラス:

@XmlAccessorType(XmlAccessType.FIELD)
public class Step {

    @XmlID
    @XmlAttribute(name="id")
    private String _id;

    @XmlAttribute(name="title")
    private String _title;

    @XmlIDREF
    @XmlElement(name="DetailPanelReference", type=DetailPanel.class)
    private DetailPanel[] _detailPanels; //Doesn't seem to work

}

@XmlAccessorType(XmlAccessType.FIELD)
public class DetailPanel {

    @XmlID
    @XmlAttribute(name="id")
    private String _id;

    @XmlAttribute(name="title")
    private String _title;

}

Step-object のプロパティ _detailPanels が空で、リンクが機能していないようです。DetailPanel への参照のみを保持する新しい JAXB オブジェクトを作成せずにリンクを作成するオプションはありますか?

再度、感謝します : )!

4

1 に答える 1

7

を使用@XmlIDしてプロパティをキーとして@XmlIDREFマップし、このユース ケースのキーへの参照をマップできます。

ステップ

@XmlAccessorType(XmlAccessType.FIELD)
public class Step {

    @XmlID
    @XmlAttribute
    private String _id;

}

@XmlAccessorType(XmlAccessType.FIELD)
public class Path {

    @XmlIDREF
    @XmlAttribute
    private Step _reference;

}

詳細については


アップデート

ありがとう!あなたの記事を完全に見逃していました。質問を拡張しましたが、これも可能かどうか手がかりはありますか? 参照を保持するだけのクラスを作成するのではなく、ステップ クラス内に格納したいと考えています。

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

MOXy を JAXB (JSR-222) プロバイダー@XmlPathとして使用している場合は、ユース ケースにアノテーションを活用できます。

import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlAccessorType(XmlAccessType.FIELD)
public class Step {

    @XmlID
    @XmlAttribute
    private String id;

    @XmlPath("DetailPanelReference/@reference")
    @XmlIDREF
    // private List<DetailPanel> _detailPanels; // WORKS
    private DetailPanel[] _detailPanels; // See bug:  http://bugs.eclipse.org/399293

}

詳細については

于 2013-01-28T09:39:22.663 に答える