注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB(JSR-222)エキスパートグループのメンバーです。
@XmlNamedObjectGraph
EclipseLink2.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>
詳細については