JaxB разоблачает странную XML с дублирующимися тегами - PullRequest
2 голосов
/ 08 января 2020

У меня действительно странный XML из службы REST, который я не могу изменить.

<Response>
<ip-addresses>
   <ip-addresses>ip1</ip-addresses>
   <ip-addresses>ip2</ip-addresses>
</ip-addresses>
</Response>

Очевидно, что это ошибка, которой должен быть внутренний тег, а не -. Но я ничего не могу с этим поделать, мне просто нужно взять и разобрать. Есть ли в любом случае Jaxb может помочь в этой странной ситуации?

Я кодировал класс модели: IpAddress. java только с 1 строкой внутри:

public class IPAddress {

    public IPAddress() {
    }

    public IPAddress(String ipAddress) {
        super();
        this.ipAddress = ipAddress;
    }

    private String ipAddress = null;

    @XmlElement(name = "ip-address")
    public String getIpAddress() {
        return ipAddress;
    }

    public void setIpAddress(String ipAddress) {
        this.ipAddress = ipAddress;
    }
}

Также есть класс ответа, подобный этому:

public class Response {
    public Response() {
    }

    public Response(List<IPAddress> ipAddress){
        this.ipAddress = ipAddress; 
    }
    private List<IPAddress> ipAddress = null;

    @XmlElement(name = "ip-address")
    public List<IPAddress> getIpAddress() {
        return ipAddress;
    }

    public void setIpAddress(List<IPAddress> ipAddress) {
        this.ipAddress = ipAddress;
    }
}

Когда Я запускаю его, как ни странно, код останавливается (в отладке) внутри метода setter класса IpAddress и считывает значения (ip1, ip2). И затем вызывается установщик класса Response, но значение, которое нужно установить (List ipAddress), равно нулю.

Любые идеи о том, как закодировать это, чтобы список IP-адресов с учетом XML не могли быть изменены? Спасибо,

1 Ответ

0 голосов
/ 21 января 2020

Вы можете изменить имя на @XmlElement (name = "ip-address")

Вы также можете сделать pojo из ip-адресов и получить к нему доступ через тег

@XmlRootElement("ip-addresses")
class Ip_Addresses{
String ip_address

@XmlElement("ip-addresses")
public String getIp_Address(){
return ip_addresses
}
}

Надеюсь, это поможет

...