2015-06-20 4 views
0

Я использую платформу MobileFirst Foundation 7.0.Ошибка JAXB «Система не может маршалировать объект JAXB в XML-содержимое. Убедитесь, что объект JAXB действителен»

Я создал «тестовый» Java-адаптер, который предоставляет API REST и возвращает аннотированный объект JAXB.

Когда я проверить ИПН с форматом JSON он работает нормально, но когда я изменить тип содержимого приложения/XML я получаю «500 Internal исключения» ошибки и в консоли я вижу следующее исключение:

Система не может маршализовать объект model.UserManager JAXB в XML . Убедитесь, что объект JAXB действителен.

Это мой Пользователь и UserManager POJOs:

@XmlRootElement(name="newuser") 
@XmlAccessorType(XmlAccessType.NONE) 
public class UserNew { 

    @XmlElement 
    String id; 

    @XmlElement 
    String name; 

    @XmlElement 
    String email; 

    @XmlElement 
    String password; 


    public UserNew(String id, String name, String email, String password) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.email = email; 
     this.password = password; 
    } 

    // getter ,setter equals and hashCode follows. 

Это UserManager:

@XmlRootElement 
public class UserManager { 

    @XmlElement 
    String managerId; 
    @XmlElementWrapper(name="users") 
    ArrayList<UserNew> users; 
    public UserManager(String managerId, ArrayList<UserNew> users) { 
     super(); 
     this.managerId = managerId; 
     this.users = users; 
    } 

    // getter ,setter equals and hashCode follows. 

Это мой REST метод API адаптера Java:

@GET 
@Path("/getUser") 
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XHTML_XML}) 
public UserManager getUser(){ 
    UserNew user1 = new UserNew("101","user1","[email protected]","password!"); 
    UserNew user2 = new UserNew("102","user2","[email protected]","password!"); 
    ArrayList<UserNew> userList = new ArrayList<>(); 
    userList.add(user2); 
    userList.add(user1); 

    return new UserManager("manager10101",userList); 
} 

ответ

1

Вам нужно будет сделать 2 вещи, сначала вам придется добавлять аргументы конструктор в обоих классах, который является обязательным для Jaxb-маршалинга и unmarshaling. Во-вторых, вам нужно добавить @XmlRootElement (name = "usermanager") в класс UserManager. После этого я попытался сделать следующее: сериализация объектов.

@XmlRootElement(name="newuser") 
@XmlAccessorType(XmlAccessType.NONE) 
public class UserNew { 

    @XmlElement 
    String id; 

    @XmlElement 
    String name; 

    @XmlElement 
    String email; 

    @XmlElement 
    String password; 
    public UserNew(){ 

    } 

    public UserNew(String id, String name, String email, String password) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.email = email; 
     this.password = password; 
    } 
// getter ,setter equals and hashCode follows. 



@XmlRootElement(name="usermanager") 
@XmlAccessorType(XmlAccessType.NONE) 
public class UserManager { 

    @XmlElement 
    String managerId; 

    @XmlElementWrapper(name="users") 
    ArrayList<UserNew> users; 

    public UserManager() { 
    } 

    public UserManager(String managerId, ArrayList<UserNew> users) { 
     super(); 
     this.managerId = managerId; 
     this.users = users; 
    } 
    // getter ,setter equals and hashCode follows. 

этого UserManager объект, который я сериализовать

UserNew user1 = new UserNew("101","user1","[email protected]","password!"); 
      UserNew user2 = new UserNew("102","user2","[email protected]","password!"); 
      ArrayList<UserNew> userList = new ArrayList<>(); 
      userList.add(user2); 
      userList.add(user1); 
      UserManager um= new UserManager("manager10101",userList); 

Получили ниже выходные данные после сериализации

<UserManager> 
<managerId>manager10101</managerId> 
<users> 
    <users> 
     <id>102</id> 
     <name>user2</name> 
     <email>[email protected]</email> 
     <password>password!</password> 
    </users> 
    <users> 
     <id>101</id> 
     <name>user1</name> 
     <email>[email protected]</email> 
     <password>password!</password> 
    </users> 
</users> 

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