si potrebbe cambiare il vostro modello e procedere come segue:
Root
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="parent")
List<Parent> allParents;
}
Parent
@XmlAccessorType(XmlAccessType.FIELD)
public class Parent {
@XmlElement(name="child")
List<Child> allChildren;
}
UPDATE
E 'possibile evitare la classe padre?
Ci sono un paio di modi diversi per ottenere questo risultato:
OPZIONE # 1 - qualsiasi implementazione JAXB utilizzando XMLAdapter
È possibile usare un XMLAdapter praticamente aggiungere nella classe Parent
.
ChildAdapter
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;
}
}
Root
Il @XmlJavaTypeAdapter
annotazione viene utilizzato per fare riferimento alla 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;
}
Bambino
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
public class Child {
@XmlAttribute
int id;
@XmlAttribute
String name;
}
OPZIONE # 2 - Utilizzare EclipseLink JAXB (moxy)
Se si utilizza EclipseLink JAXB (MOXy) come JAXB (JSR-222) implementazione allora si potrebbe procedere come segue (nota : I'm the MOXy lead):
Root
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name="parent")
List<Child> allChildren;
}
Bambino
@XmlPath
annotazione di moxy funziona più o meno il modo in cui si sta tentando di utilizzare la @XmlElement
annotazioni nel tuo post.
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;
}
Per ulteriori informazioni
È possibile evitare la classe genitore? – Stephan
+1 E 'sempre rassicurante quando provo autonomamente la stessa soluzione di un esperto riconosciuto nel campo :-) –
@IanRoberts - I + 1ed anche la tua risposta :). –