Я довольно новичок в JAXB, и у меня возникли проблемы с попыткой развязать общий объект. Дело в том, что мне нужно уметь маршалировать и раскручивать любой объект (java.lang.Object). Я сделал маршал успешно, но когда я запускаю unmarshal, я получаю объект «ElementNSImpl» в ответе вместо своего собственного объекта.
Это являются привлеченными бобы:
Message.javaJAXB Unmarshal generic object
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
@XmlAnyElement(lax=true)
private Object obj;
//getter and setter
}
SomeBean.java
@XmlRootElement(name="somebean")
public class SomeBean {
private String variable;
//getter and setter
}
И это/код маршалу распаковать
Message m = new Message();
SomeBean sb = new SomeBean();
sb.setVariable("lalallalala");
m.setObj(sb);
JAXBContext jaxbContext = JAXBContext.newInstance("jaxb.entities");
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(m, sw);
System.out.println(sw.toString()); //this shows me the xml correctly
//unmarshal code
JAXBContext jc = JAXBContext.newInstance(Message.class);
StringReader reader = new StringReader(sw.toString());
Unmarshaller unmarshaller = jc.createUnmarshaller();
Object result = unmarshaller.unmarshal(reader);
Message msg = (Message)result;
Содержание jaxb.index:
Message
SomeBean
Сгенерированный XML прекрасно (<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message><somebean><variable>lalallalala</variable></somebean></message>
), но когда я оцениваю "msg.getObj()" после того, как я распаковать не получить SomeBean экземпляр, но ElementNSImpl.
Итак, мой вопрос: как я могу вернуть объект SomeBean, который я маршалировал?
Заранее спасибо.