Я пытаюсь использовать REST API, который дает мне XML-ответ. Я сопоставляю XML-ответ с POJO-файлом. В то время как внешний внешний элемент XML отображается правильно, внутренний элемент вложенного массива возвращает нулевые значения. Ниже приведены ответ запроса и другие файлы кода:Потребление Rest api с массивом списка xml-ответа с использованием Spring java
XML Ответ:
<ArrayOfRouteListItem
xmlns="http://some url..."
xmlns:i="http://url...">
<RouteListItem>
<ArrivalCountry>(Saronic Islands, Greece)</ArrivalCountry>
<ArrivalPort>Agistri</ArrivalPort>
<DepartCountry>(Saronic Islands, Greece)</DepartCountry>
<DepartPort>Aegina</DepartPort>
<HeaderKey>HA</HeaderKey>
<ReturnFlag>R</ReturnFlag>
</RouteListItem>
<RouteListItem>
<ArrivalCountry>(Saronic Islands, Greece)</ArrivalCountry>
<ArrivalPort>Aegina</ArrivalPort>
<DepartCountry>(Greece)</DepartCountry>
<DepartPort>Piraeus</DepartPort>
<HeaderKey/>
<ReturnFlag>R</ReturnFlag>
</RouteListItem>
</ArrayOfRouteListItem>
POJO класс ArrayofRouteListItem.java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="ArrayOfRouteListItem" , namespace="http://some url ...")
public class ArrayOfRouteListItem {
@XmlElement(name = "RouteListItem")
public List<RouteListItem> routeItem = new ArrayList<RouteListItem>();
}
POJO класса RouteListItem.java
@XmlRootElement(name="RouteListItem")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace="http://some url ..")
public class RouteListItem implements Serializable {
public static final long serialVersionUID = 1L;
@XmlElement(name="ArrivalCountry")
public String arrivalCountry;
@XmlElement(name="ArrivalPort")
public String arrivalPort;
@XmlElement(name="DepartCountry")
public String departCountry;
@XmlElement(name="DepartPort")
public String departPort;
@XmlElement(name="HeaderKey")
public String headerKey;
@XmlElement(name="ReturnFlag")
public String returnFlag;
......
}
М.Ю. Основное применение (Controller.java):
public class Controller {
private static DefaultHttpClient httpClient = new DefaultHttpClient();
public static void main(String[] args) throws Exception
{
demoGetRESTAPI();
}
public static void demoGetRESTAPI() throws Exception
{
try
{
HttpGet getRequest = new HttpGet("https://www.url...");
getRequest.addHeader("accept", "application/xml");
HttpResponse response = httpClient.execute(getRequest);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200)
{
throw new RuntimeException("Failed with HTTP error code : " + statusCode);
}
HttpEntity httpEntity = response.getEntity();
String apiOutput = EntityUtils.toString(httpEntity);
System.out.println("xml file content : " + apiOutput);
JAXBContext jaxbContext = JAXBContext.newInstance(ArrayOfRouteListItem.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(apiOutput);
System.out.println("reader object : " + reader.toString());
ArrayOfRouteListItem routeList = (ArrayOfRouteListItem) unmarshaller.unmarshal(reader);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(routeList, System.out);
System.out.println("size: " + routeList.getRouteItem().size() + " .get(0) : " + routeList.getRouteItem().get(0).getArrivalCountry());
}
finally
{
//Important: Close the connect
httpClient.getConnectionManager().shutdown();
}
}
Выход, который я получаю являются:
reader object : [email protected]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:ArrayOfRouteListItem xmlns:ns2="http://some url...">
<RouteListItem/>
<RouteListItem/>
<RouteListItem/>
<RouteListItem/>
<RouteListItem/>
<RouteListItem/>
</ns2:ArrayOfRouteListItem>
routeList.size: 6 routeList.getRouteItem().get(0).getArrivalCountry() : null
может быть getArrivalCountry() равно нулю, пожалуйста, проверьте все данные –
Я проверил все поля все приходят нуль, это как пример, так как вы можете видеть, что весь объект приходит в нуль на выходе – naresh
См. ответ @naresh –