在我的网络服务(使用 RestEasy)项目中,我依赖于一个 jar。我从那个 jar 中使用了一个 java 类:Person。
我的问题是我需要将一个 Person 实例序列化为 XML,但我收到以下错误:
unable to marshal type "entities.Person" as an element because it is missing an @XmlRootElement annotation
但是,我无法更改 Person 类以添加注释 @XmlRootElement(它是第三方 jar)。
是否有任何其他方法(方法、库...)可以在不注释 Person 类的情况下将 Person 实例编码为 XML?
顺便说一句,这是我使用的代码,但由于缺少注释而失败了:
String result;
Person person = personManager.findByPersonId(personId);
StringWriter sw = new StringWriter();
JAXBContext personContext = JAXBContext.newInstance(Person.class);
Marshaller personMarshaller = personContext.createMarshaller();
personMarshaller.marshal(person, sw);
result = sw.toString();
return Response.status(200).entity(result).build();
非常感谢。
最佳答案
JAXB (JSR-222)实现不需要将任何注释添加到您的域模型中。在没有 @XmlRootElement
(或 @XmlElementDecl
)的情况下,您只需将根对象包装在 JAXBElement 的实例中。
JAXBElement<Person> jaxbElement = new JAXBElement<Person>(new QName("person"), Person.class, person);
personMarshaller.marshal(jaxbElement, sw);
了解更多信息
注意:我是 EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导和成员专家组。
如果您需要为您的模型提供元数据,但无权访问源,那么 MOXy 提供了一个外部元数据文档扩展,您可以将其用于此目的。
Thank you, the link you gave me is useful, but I wonder if this EclipseLink library is safe to integrate in a commercial product (license)...
自版本 12.1.1 以来,MOXy 一直是 WebLogic 中的默认 JAXB 实现,因此它绝对是企业级的。
EclipseLink(和 MOXy)根据 Eclipse 公共(public)许可证和 Eclipse 分发许可证 (BSD) 获得双重许可:
关于Java : unable to marshal type "entities.Person" as an element because,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384550/