2

次の XML ドキュメントを JAXB Java オブジェクトに非整列化しようとしています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <company>
    <name>ABC Inc</name>
    <address>123 1st Street, My City, AB</address>
    <employees>
    <employee>
    <firstName>John</firstName>
    <lastName>Doe</lastName>
    </employee>
    <employee>
    <firstName>John2</firstName>
    <lastName>Doe2</lastName>
    </employee>
    </employees>
    </company>

次の Java コードを使用しましたが、XML に 2 つの要素が含まれていても、子コレクション (company.getEmployees()) には要素が含まれていませんでした。

    JAXBContext jc = JAXBContext.newInstance("com.abc");
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    JAXBElement<Company> root = unmarshaller.unmarshal(new StreamSource(new FileInputStream( "TestCompany.xml" )), Company.class);
    Company company = root.getValue();
    List<Employee> employees = company.getEmployees();

JAXB で生成されたクラスは次のとおりです。

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "company", propOrder = {
        "name",
        "address",
        "employees"
    })
    public class Company {
        @XmlElement(required = true)
        protected String name;
        @XmlElement(required = true, nillable = true)
        protected String address;
        protected List<Employee> employees;

        public String getName() {
            return name;
        }
        public void setName(String value) {
            this.name = value;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String value) {
            this.address = value;
        }
        public List<Employee> getEmployees() {
            if (employees == null) {
                employees = new ArrayList<Employee>();
            }
            return this.employees;
        }
    }

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "employee", propOrder = {
        "firstName",
        "lastName"
    })
    public class Employee {

        @XmlElement(required = true)
        protected String firstName;
        @XmlElement(required = true)
        protected String lastName;

        public String getFirstName() {
            return firstName;
        }
        public void setFirstName(String value) {
            this.firstName = value;
        }
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String value) {
            this.lastName = value;
        }
    }
4

1 に答える 1

3

デフォルトでは、JAXB 実装はコレクションのグループ化要素を追加しません。以下を実行して活用する必要があります@XmlElementWrapper

@XmlElementWrapper
@XmlElement(name="employee")
protected List<Employee> employees;

詳細については

于 2013-07-10T15:00:11.870 に答える