使用SpringJava使用RESTAPI和xml响应的数组列表

使用SpringJava使用RESTAPI和xml响应的数组列表,java,spring,mongodb,rest,Java,Spring,Mongodb,Rest,我正在尝试使用REST API,它为我提供XML响应。我正在将XML响应映射到POJO文件。虽然最外层的XML元素映射正确,但内部嵌套的数组元素返回空值。以下是请求-响应和其他代码文件: XML响应: <ArrayOfRouteListItem xmlns="http://some url..." xmlns:i="http://url..."> <RouteListItem> <ArrivalCountry>(Saro

我正在尝试使用REST API,它为我提供XML响应。我正在将XML响应映射到POJO文件。虽然最外层的XML元素映射正确,但内部嵌套的数组元素返回空值。以下是请求-响应和其他代码文件:

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>
我的主要应用程序(Controller.java):

我得到的输出是:

reader object :  java.io.StringReader@38c5cc4c
<?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
reader对象:java.io。StringReader@38c5cc4c
routeList.size:6 routeList.getRouteItem().get(0.getArrivalCountry():null

完整的工作示例,请参见以下内容: 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();
        }
    }
}
package com.tutorialspoint;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.util.ArrayList;
导入java.util.List;
公共类UserDao{
公共列表getAllUsers(){
List userList=null;
试一试{
File File=新文件(“Users.dat”);
如果(!file.exists()){
用户=新用户(1,“Mahesh”,“Teacher”);
userList=newarraylist();
添加(用户);
保存用户列表(userList);
}否则{
FileInputStream fis=新的FileInputStream(文件);
ObjectInputStream ois=新ObjectInputStream(fis);
userList=(List)ois.readObject();
ois.close();
}
}捕获(IOE异常){
e、 printStackTrace();
}catch(classnotfounde异常){
e、 printStackTrace();
}
返回用户列表;
}
私有void saveUserList(List userList){
试一试{
File File=新文件(“Users.dat”);
文件输出流;
fos=新文件输出流(文件);
ObjectOutputStream oos=新的ObjectOutputStream(fos);
oos.writeObject(用户列表);
oos.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
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>();
}
package com.tutorialspoint;
导入java.util.ArrayList;
导入java.util.List;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
/**
*
*@author-CE
*/
@XmlRootElement(name=“users”)
公共类用户列表{
@xmlement(name=“user”)
列表用户=新建ArrayList();
}
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();
    }
}
package com.tutorialspoint;
导入java.util.List;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.products;
导入javax.ws.rs.core.MediaType;
@路径(“/UserService”)
公共类用户服务{
UserDao UserDao=newuserdao();
@得到
@路径(“/users”)
@生成(MediaType.APPLICATION\u XML)
公共列表getUsers(){
返回userDao.getAllUsers();
}
}
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());
        }
    }

}
package com.tutorialspoint;
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.StringReader;
导入java.net.URL;
导入java.nio.charset.charset;
导入javax.xml.bind.JAXBContext;
导入javax.xml.bind.Unmarshaller;
公共类WSCLIENT{
公共静态void main(字符串[]args)引发异常{
StringBuilder sURL=新的StringBuilder(100);
StringBuilder sb1=新的StringBuilder();
试一试{
附加http://localhost:2016/Simpleweb/rest/UserService/users");
InputStream is=新URL(sURL.toString()).openStream();
BufferedReader rd=新的BufferedReader(新的InputStreamReader(is,Charset.forName(“UTF-8”));
int-cp;
而((cp=rd.read())!=-1){
sb1.追加((char)cp);
}
}抓住(我例外){
System.out.println(“##异常:+me.getMessage());
}
字符串apiOutput=sb1.toString();
System.out.println(“xml文件内容:+apiOutput”);
JAXBContext JAXBContext=JAXBContext.newInstance(UserList.class);
Unmarshaller Unmarshaller=jaxbContext.createUnmarshaller();
StringReader=新StringReader(apiOutput);
UserList uu=(UserList)解组器。解组器(reader);

对于(int i=0;i完整的工作示例,请参见以下内容: 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();
        }
    }
}
package com.tutorialspoint;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.util.ArrayList;
导入java.util.List;
公共类UserDao{
公共列表getAllUsers(){
List userList=null;
试一试{
File File=新文件(“Users.dat”);
如果(!file.exists()){
用户=新用户(1,“Mahesh”,“Teacher”);
userList=newarraylist();
添加(用户);
保存用户列表(userList);
}否则{
FileInputStream fis=新的FileInputStream(文件);
ObjectInputStream ois=新ObjectInputStream(fis);
userList=(List)ois.readObject();
ois.close();
}
}捕获(IOE异常){
e、 printStackTrace();
}catch(classnotfounde异常){
e、 printStackTrace();
}
返回用户列表;
}
私有void saveUserList(List userList){
试一试{
File File=新文件(“Users.dat”);
文件输出流;
fos=新文件输出流(文件);
ObjectOutputStream oos=新的ObjectOutputStream(fos);
oos.writeObject(用户列表);
oos.close();
}catch(filenotfounde异常){
e、 印刷品
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());
        }
    }

}