jaxb генерирует Java-классы из XSD, выбирая «один или оба», не создавая поля, а List <JAXBElement <String>> - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь сгенерировать класс из моего xsd с простым выбором, чтобы присутствовал один или оба элемента. Но jaxb не генерирует поля в моем классе, потому что у меня есть два элемента addressLine2.

Как я могу справиться с этим?

Вот мой xsd

  <?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.com/document/distribution/soap/model"
        xmlns:tns="http://test.com/document/distribution/soap/model"
        elementFormDefault="qualified">


    <complexType name="PostRecipient">
        <sequence>
            <element name="FirstName" type="string" minOccurs="0"/>
            <element name="LastName" type="string" minOccurs="0"/>
            <element name="CompanyName" type="string" minOccurs="0" />
            <choice>
                <sequence>
                    <element name="AddressLine1" type="string" />
                    <element name="AddressLine2" type="string" minOccurs="0" />
                </sequence>
                <element name="AddressLine2" type="string"/>
            </choice>
            <element name="City" type="string" />
            <element name="StateCode" type="string" minOccurs="0" />
            <element name="CountryCode" type="string" />
            <element name="PostalCode" type="string" />
        </sequence>
    </complexType>

</schema>

Вот сгенерированный класс:

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlElementRefs;
import javax.xml.bind.annotation.XmlType;



@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PostRecipient", propOrder = {
    "content"
})
public class PostRecipient {

    @XmlElementRefs({
        @XmlElementRef(name = "LastName", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "City", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "AddressLine1", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "CountryCode", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "PostalCode", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "FirstName", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "CompanyName", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "StateCode", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false),
        @XmlElementRef(name = "AddressLine2", namespace = "http://test.com/document/distribution/soap/model", type = JAXBElement.class, required = false)
    })
    protected List<JAXBElement<String>> content;


    public List<JAXBElement<String>> getContent() {
        if (content == null) {
            content = new ArrayList<JAXBElement<String>>();
        }
        return this.content;
    }

}
...