Java:无法封装类型“entities.Person”作为元素因为

时间:2014-01-27 15:18:19

标签: java xml jaxb marshalling

在我的webservice(使用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实例编组为XML而不注释Person类?

顺便说一下,这是我使用的代码,但由于缺少注释而失败:

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();

非常感谢你。

1 个答案:

答案 0 :(得分:1)

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会提供可用于此目的的外部元数据文档扩展名。

  

谢谢你,你给我的链接很有用,但我想知道是否这样   EclipseLink库可以安全地集成到商业产品中   (许可)...

从版本12.1.1开始,MOXy一直是WebLogic中的默认JAXB实现,所以它绝对是企业就绪的。

EclipseLink(和MOXy)在Eclipse Public License和Eclipse Distribution License(BSD)下获得双重许可: