Невозможно распаковать XML-ответ, используя классы JAXB - PullRequest
0 голосов
/ 12 декабря 2018

Исключение:

javax.xml.bind.UnmarshalException: непредвиденный элемент (uri: "http://www.cleartrip.com/hotel/hotel-search-response", local:" hotel-search-response "). Ожидаемые элементы (нет)


MyTestFile.txt (XML):

<hotel-search-response xmlns="http://www.cleartrip.com/hotel/hotel-search-response" xmlns:hotel-info="http://www.cleartrip.com/places/hotel-info" xmlns:common="http://www.cleartrip.com/hotel/common">
<search-criteria>
    <booking-date>2018-12-12+05:30</booking-date>
    <check-in-date>2018-12-14+05:30</check-in-date>
    <check-out-date>2018-12-16+05:30</check-out-date>
    <number-of-rooms>1</number-of-rooms>
    <number-of-nights>2</number-of-nights>
    <number-of-room-nights>2</number-of-room-nights>
    <city>Bangalore</city>
    <country>IN</country>
</search-criteria>
<currency>INR</currency>

JAXB Класс:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "hotel-search-response", propOrder = {
"searchCriteria",
"additionalCurrency",
"currency",
"baseUrl",
"hotels",
"pgfeeJson",
"pgchargeJson"
})
public class HotelSearchResponse {

@XmlElement(name = "search-criteria", required = false)
protected SearchCriteria searchCriteria;
@XmlElement(name = "additional-currency",required= false)
protected AdditionalCurrency additionalCurrency;
@XmlElement(required = false)
protected String currency;
@XmlElement(name = "base-url", required = false)
protected String baseUrl;
@XmlElement(required = false)
protected Hotels hotels;
@XmlElement(name = "pgfee-json", required = false)
protected String pgfeeJson;
@XmlElement(name = "pgcharge-json", required = false)
protected String pgchargeJson;
}

Основной класс Java:

JAXBContext jc= JAXBContext.newInstance(HotelSearchResponse.class);
        javax.xml.bind.Unmarshaller ums = jc.createUnmarshaller();
        HotelSearchResponse emp=(HotelSearchResponse) ums.unmarshal(new    File("E:/MyTestFile.txt"));

1 Ответ

0 голосов
/ 12 декабря 2018

Во-первых, вам нужно иметь @XmlRootElement.Во-вторых, вам нужно указать пространство имен (поскольку вы используете пространства имен).

@XmlRootElement(name = "hotel-search-response", namespace = "http://www.cleartrip.com/hotel/hotel-search-response")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "hotel-search-response", propOrder = { "currency", "baseUrl",
"pgfeeJson", "pgchargeJson" }, namespace = "http://www.cleartrip.com/hotel/hotel-search-response")
public class HotelSearchResponse

Выше propOrder упрощено.

...