1

私は次のクラスを持っています

@XmlRootElement
public class Test {

    @XmlTransient
    private String abc;

    @XmlElement
    private String def;

}

私の質問は、このクラスを使用して 2 種類の XML を生成したいということです

1. With <abc>
2. without <abc>

トランジェントとしてマークしたので、2番目のものを達成できます。「abc」をマーク@XMLElementして、マーシャリング中に無視できるようにする方法はありますか?

前もって感謝します

4

1 に答える 1

2

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

@XmlNamedObjectGraphEclipseLink2.5.0で追加した拡張機能に興味があるかもしれません。ドメインモデルに複数のビューを定義できます。ナイトリービルドを使用して、今日これを試すことができます。

以下に例を示します。

テスト

注釈は、@XmlNamedObjectGraphマーシャリングおよびアンマーシャリング時に使用できるオブジェクトグラフのサブセットを定義するために使用されます。

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

@XmlNamedObjectGraph(
    name="only def",
    attributeNodes = {
        @XmlNamedAttributeNode("def")
    }
)
@XmlRootElement
public class Test {

    private String abc;
    private String def;

    public String getAbc() {
        return abc;
    }

    public void setAbc(String abc) {
        this.abc = abc;
    }

    public String getDef() {
        return def;
    }

    public void setDef(String def) {
        this.def = def;
    }

}

デモ

を使用して、MarshallerProperties.OBJECT_GRAPHマーシャリングするオブジェクトグラフを指定できます。

import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Test.class);

        Test test = new Test();
        test.setAbc("FOO");
        test.setDef("BAR");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        // Marshal the Entire Object
        marshaller.marshal(test, System.out);

        // Marshal Only What is Specified in the Object Graph
        marshaller.setProperty(MarshallerProperties.OBJECT_GRAPH, "only def");
        marshaller.marshal(test, System.out);
    }

}

出力

以下は、デモコードの実行からの出力です。のインスタンスが最初にTestマーシャリングされるときはすべてのプロパティが含まれ、2回目はdefプロパティのみが含まれます。

<?xml version="1.0" encoding="UTF-8"?>
<test>
   <abc>FOO</abc>
   <def>BAR</def>
</test>
<?xml version="1.0" encoding="UTF-8"?>
<test>
   <def>BAR</def>
</test>

詳細については

于 2013-03-01T02:20:06.630 に答える