Cuando se define Bares como un tipo complejo, Bares se generará como clase separada. De esta manera, encuentro que el esquema también es más fácil de leer. Las barras no serán List en Foo a menos que cambie maxOccurs a un valor superior a 1; no puede hacer esto en xs: all, pero puede usar xs: sequence.
...
<xs:complexType name="Foo">
<xs:all>
<xs:element name="Bars" type="Bars" />
</xs:all>
</xs:complexType>
<xs:complexType name="Bars">
<xs:sequence>
<xs:element name="Bar" type="barType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
...
Después xjc ejecutando: Foo.java:
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Foo", propOrder = {
})
public class Foo {
@XmlElement(name = "Bars", required = true)
protected Bars bars;
public Bars getBars() {
return bars;
}
public void setBars(Bars value) {
this.bars = value;
}
}
Bars.java:
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Bars", propOrder = {
"bar"
})
public class Bars {
@XmlElement(name = "Bar", required = true)
protected List<String> bar;
...
}
Con xs: seqence para obtener la lista de Barras (maxOcurrencias = "sin límites"): XSD:
...
<xs:complexType name="Foo">
<xs:sequence>
<xs:element name="Bars" type="Bars" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Bars">
<xs:sequence>
<xs:element name="Bar" type="barType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
...
Foo.java: Plugin de
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Foo", propOrder = {
"bars"
})
public class Foo {
@XmlElement(name = "Bars", required = true)
protected List<Bars> bars;
public List<Bars> getBars() {
if (bars == null) {
bars = new ArrayList<Bars>();
}
return this.bars;
}
}
Desafortunadamente, estoy tratando de pasar de xsd a los archivos java. – Jim
Estaba buscando algo como esto en [mi pregunta aquí] (http://stackoverflow.com/questions/9240837/how-to-write-my-xsd-in-order-to-match-the-desired-xml -y-java-format-using-jaxb). ¿Se puede generar la anotación '@ XmlElementWrapper' utilizando XJC? Preferiría no modificar manualmente el código generado ... –
Blaise: antes que nada, muchas gracias por todas sus publicaciones y por su blog (por ejemplo [esta publicación] (http://blog.bdoughan.com/2010) /09/jaxb-collection-properties.html) que también se refiere a esto). Siempre súper claro y al grano. Yo también estoy buscando una solución simple (es decir, que no implique un complemento xjc) que nos permita generar '@ XmlElementWrapper' con xjc. Sería muy bueno poder declarar un elemento como "nulo" o "pass-through" en .xsd, es decir, que todos sus subelementos serían automáticamente contenidos por el padre (o más alto si el padre también tiene esa bandera). –