2016-10-13 1 views
1

Я пытаюсь использовать 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 
+0

может быть getArrivalCountry() равно нулю, пожалуйста, проверьте все данные –

+0

Я проверил все поля все приходят нуль, это как пример, так как вы можете видеть, что весь объект приходит в нуль на выходе – naresh

+0

См. ответ @naresh –

ответ

0

Полный рабочий пример, Пожалуйста, ознакомьтесь: User.java

package com.tutorialspoint; 

import java.io.Serializable; 

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name = "user") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private int id; 
    private String name; 
    private String profession; 

    public User() { 
    } 

    public User(int id, String name, String profession) { 
     this.id = id; 
     this.name = name; 
     this.profession = profession; 
    } 

    public int getId() { 
     return id; 
    } 

    @XmlElement 
    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    @XmlElement 
    public void setName(String name) { 
     this.name = name; 
    } 

    public String getProfession() { 
     return profession; 
    } 

    @XmlElement 
    public void setProfession(String profession) { 
     this.profession = profession; 
    } 
} 

UserDao.java

package com.tutorialspoint; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.util.ArrayList; 
import java.util.List; 
public class UserDao { 

    public List<User> getAllUsers() { 
     List<User> userList = null; 
     try { 
      File file = new File("Users.dat"); 
      if (!file.exists()) { 
       User user = new User(1, "Mahesh", "Teacher"); 
       userList = new ArrayList<User>(); 
       userList.add(user); 
       saveUserList(userList); 
      } else { 
       FileInputStream fis = new FileInputStream(file); 
       ObjectInputStream ois = new ObjectInputStream(fis); 
       userList = (List<User>) ois.readObject(); 
       ois.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     return userList; 
    } 

    private void saveUserList(List<User> userList) { 
     try { 
      File file = new File("Users.dat"); 
      FileOutputStream fos; 

      fos = new FileOutputStream(file); 

      ObjectOutputStream oos = new ObjectOutputStream(fos); 
      oos.writeObject(userList); 
      oos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

UserList.java

package com.tutorialspoint; 

import java.util.ArrayList; 
import java.util.List; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

/** 
* 
* @author CE 
*/ 
@XmlRootElement(name="users") 
public class UserList { 
    @XmlElement(name="user") 
    List<User> users = new ArrayList<User>(); 
} 

UserService.java

package com.tutorialspoint; 

import java.util.List; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/UserService") 
public class UserService { 

    UserDao userDao = new UserDao(); 

    @GET 
    @Path("/users") 
    @Produces(MediaType.APPLICATION_XML) 
    public List<User> getUsers() { 
     return userDao.getAllUsers(); 
    } 
} 

WSCLiente .Java

package com.tutorialspoint; 
import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.StringReader; 
import java.net.URL; 
import java.nio.charset.Charset; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Unmarshaller; 
public class WSCLiente { 

    public static void main(String[] args) throws Exception { 
     StringBuilder sURL = new StringBuilder(100); 
     StringBuilder sb1 = new StringBuilder(); 
     try { 
      sURL.append("http://localhost:2016/Simpleweb/rest/UserService/users"); 
      InputStream is = new URL(sURL.toString()).openStream(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); 
      int cp; 
      while ((cp = rd.read()) != -1) { 
       sb1.append((char) cp); 
      } 
     } catch (Exception me) { 
      System.out.println("## Exception :" + me.getMessage()); 
     } 
     String apiOutput = sb1.toString(); 
     System.out.println("xml file content : " + apiOutput); 
     JAXBContext jaxbContext = JAXBContext.newInstance(UserList.class); 
     Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
     StringReader reader = new StringReader(apiOutput); 
     UserList uu= (UserList) unmarshaller.unmarshal(reader); 
     for (int i=0; i<uu.users.size();i++) { 
      User u = uu.users.get(i); 
      System.out.println("Yes:"+u.getProfession()); 
     } 
    } 

} 
Смежные вопросы