I am using MobileFirst platform Foundation 7.0.
I created a "Test" Java adapter that provides a REST API and returns a JAXB annotated Object.
When I test the api with JSON format it is working fine, but when I change the content type to application/xml I get "500 internal exception" error and in the console i see the following exception:
The system cannot marshal the model.UserManager JAXB object into XML content. Verify that the JAXB object is valid.
This is my User and 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.
This is 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.
This is my REST API method in the Java adapter:
@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);
}
You'll have to do 2 things, first you'll have to add no argument constructor in both the classes that is mandatory for Jaxb marshaling and unmarshaling. Second thing is you need to add @XmlRootElement(name="usermanager") in UserManager class. I've tried the following after that its serializing the objects.
This the UserManager object that I serialized
Got the below output after serialization