Прежде всего, структура xml должна быть согласованной - поместите тип животного в тег "type":
<animals>
<animal>
<type>cat</type>
<age>5</age>
<color>red</color>
</animal>
<animal>
<type>dog</type>
<age>7</age>
<color>orange</color>
</animal>
</animals>
Тогда у вас есть два варианта.1. Исходя из вашего примера, вам нужны два класса: один для животных и один для животных, потому что по умолчанию JAXB отображает каждый тег в класс.В то время как вам нужна коллекция для «содержания» объектов в java, xml этого не делает, и в этом заключается разница.Соответствующие аннотации:
package sample;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="animals")
public class Animals
{
@XmlElement(name="animal")
public List<Animal> animals;
public static class Animal
{
public String type;
public String color;
public Integer age;
}
}
Однако это решение не самое элегантное.Если вы просто хотите пропустить класс контейнера из середины, вы можете использовать аннотацию @XmlElementWrapper:
package sample;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="MyDocument")
public class MyDocument
{
public String comment;
@XmlElementWrapper(name="animals")
@XmlElement(name="animal")
public List<Animal> animals;
public static class Animal
{
public String type;
public String color;
public Integer age;
}
}
XML будет выглядеть так:
<MyDocument>
<animals>
<animal>
<type>cat</type>
<age>5</age>
<color>red</color>
</animal>
<animal>
<type>dog</type>
<age>7</age>
<color>orange</color>
</animal>
</animals>
</MyDocument>