简体   繁体   中英

Use two classes have the same XML type name

I have this XML:

<account-holder>
        <first-name>John</first-name>
        <last-name>Doe</last-name>
        <address>
            <street1>123 anystreet</street1>
        </address>
    </account-holder>
    <shipping>
        <first-name>Manon</first-name>
        <last-name>Mertens</last-name>
        <address>
            <street1>Rue de la Loi 1</street1>
        </address>
        <shipping-method>home_delivery</shipping-method>
    </shipping>

As you can see I have in 2 places tag address . This is the JAXB which I use:

Main Class:

@XmlRootElement(name = "payment")
@XmlAccessorType(XmlAccessType.FIELD)
public class AuthorizeRequest { 

    @XmlElement(name = "account-holder")
    public AccountHolder accountHolder;

    @XmlElement(name = "shipping")
    public Shipping shipping;
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class AccountHolder {
    ....
    @XmlElement(name = "address")
    private Address address;
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Shipping { 
    ....        
    @XmlElement(name = "address")
    private Address address;
}

Address:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Address {

    @XmlElement(name = "street1")
    private String street1;

    @XmlElement(name = "street2")
    private String street2;
}

But I get exception:

Two classes have the same XML type name "{http://www.elastic-payments.com/schema/payment}address". Use @XmlType.name and @XmlType.namespace to assign different names to them.

Do you know how I can fix this issue?

As the more detailed error message describes, you have (at least) two Address classes

org.datalis.gateway.wirecard.models.authorize.request.Address org.datalis.gateway.wirecard.models.authorize.response.Address

There are several options

  • add @XmlType annotations to them, maybe you can have a namespace for request and one for response
  • Rename the classes to make them unique
  • Separate the request/response context to make the class unique in that context

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM