Java:无法封送类型";实体.个人“;作为一个元素,因为

Java:无法封送类型";实体.个人“;作为一个元素,因为,java,xml,jaxb,marshalling,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(它是第三方

在我的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类的情况下将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();
非常感谢。

实现不需要向域模型添加任何注释。在缺少
@XmlRootElement
(或
@XmlElementDecl
)的情况下,只需将根对象包装到JAXBElement实例中即可

JAXBElement<Person> jaxbElement = new JAXBElement<Person>(new QName("person"), Person.class, person);
personMarshaller.marshal(jaxbElement, sw);
JAXBElement-JAXBElement=newjaxbelement(newqname(“person”)、person.class、person);
Marshaller.Marshaller(jaxbElement,西南部);
了解更多信息


注意:我是专家组的负责人和成员

如果您需要为模型提供元数据,但无法访问源,那么MOXy提供了一个外部元数据文档扩展,您可以用于此目的


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

MOXy自版本12.1.1以来一直是WebLogic中的默认JAXB实现,因此它绝对是企业级的

EclipseLink(和MOXy)根据Eclipse公共许可证和Eclipse发行许可证(BSD)获得双重许可:


请参阅:谢谢,您给我的链接很有用,但我想知道EclipseLink库是否可以安全地集成到商业产品(许可证)中……作者之一Blaise应该很快就会来回答这一问题。