モデルを変更して、次のことを行うことができます。
根
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="parent")
List<Parent> allParents;
}
親
@XmlAccessorType(XmlAccessType.FIELD)
public class Parent {
@XmlElement(name="child")
List<Child> allChildren;
}
アップデート
親クラスを避けることは可能ですか?
これを実現するには、いくつかの方法があります。
オプション #1 - XmlAdapter を使用した任意の JAXB 実装
XmlAdapter を使用して、Parent
クラスに仮想的に追加できます。
子アダプタ
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class ChildAdapter extends XmlAdapter<ChildAdapter.Parent, Child> {
public static class Parent {
public Child child;
}
@Override
public Parent marshal(Child v) throws Exception {
Parent parent = new Parent();
parent.child = v;
return parent;
}
@Override
public Child unmarshal(Parent v) throws Exception {
return v.child;
}
}
根
@XmlJavaTypeAdapter
注釈は、 を参照するために使用されますXmlAdapter
。
import java.util.List;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="parent")
@XmlJavaTypeAdapter(ChildAdapter.class)
List<Child> allChildren;
}
子
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Child {
@XmlAttribute
int id;
@XmlAttribute
String name;
}
オプション #2 - EclipseLink JAXB (MOXy) の使用
EclipseLink JAXB (MOXy)をJAXB (JSR-222)実装として使用している場合は、次のことができます (注: 私は MOXy リーダーです)。
根
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="parent")
List<Child> allChildren;
}
子
MOXy の注釈は、投稿で注釈@XmlPath
を使用しようとしている方法とほとんど同じように機能します。@XmlElement
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlAccessorType(XmlAccessType.FIELD)
public class Child {
@XmlPath("child/@id")
int id;
@XmlPath("child/@name")
String name;
}
詳細については