Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

JaxB takes into account maxOccurs="unbounded" and it it is set, creates the inner element as list for sequence, otherwise just single field

I have such types in WSDL, the only difference is maxOccurs="unbounded", however, the Java classes generated are different:

        <xs:complexType name="TypeGetPaymentDetailsAdditionRequest">
            <xs:sequence>
                <xs:element name="PaymentDetails"
                            type="tns:TypeGetPaymentDetailAdditionRequest"/>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="TypeGetPaymentDetailsRequest">
            <xs:sequence>
                <xs:element name="PaymentDetails"
                            type="tns:TypeGetPaymentDetailRequest"
                            maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>

The Java classes, the first one have the List<> inside, while another doesn’t.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
    name = "TypeGetPaymentDetailsRequest",
    propOrder = {"paymentDetails"}
)
public class TypeGetPaymentDetailsRequest {
    @XmlElement(
        name = "PaymentDetails",
        required = true
    )
    protected List<TypeGetPaymentDetailRequest> paymentDetails;

    public TypeGetPaymentDetailsRequest() {
    }

    public List<TypeGetPaymentDetailRequest> getPaymentDetails() {
        if (this.paymentDetails == null) {
            this.paymentDetails = new ArrayList();
        }

        return this.paymentDetails;
    }
}

and

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
    name = "TypeGetPaymentDetailsAdditionRequest",
    propOrder = {"paymentDetails"}
)
public class TypeGetPaymentDetailsAdditionRequest {
    @XmlElement(
        name = "PaymentDetails",
        required = true
    )
    protected TypeGetPaymentDetailAdditionRequest paymentDetails;

    public TypeGetPaymentDetailsAdditionRequest() {
    }

    public TypeGetPaymentDetailAdditionRequest getPaymentDetails() {
        return this.paymentDetails;
    }

    public void setPaymentDetails(TypeGetPaymentDetailAdditionRequest value) {
        this.paymentDetails = value;
    }

}

How one can force to make paymentDetails field to be a List<> in the second case too?

JAXB version:

jaxb "com.sun.xml.bind:jaxb-xjc:2.1.7"

>Solution :

Add maxOccurs="unbounded" to the other attribute too:

  <xs:complexType name="TypeGetPaymentDetailsAdditionRequest">
            <xs:sequence>
                <xs:element name="PaymentDetails"
                      type="tns:TypeGetPaymentDetailAdditionRequest" 
                      maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="TypeGetPaymentDetailsRequest">
            <xs:sequence>
                <xs:element name="PaymentDetails"
                            type="tns:TypeGetPaymentDetailRequest"
                            maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading