在我的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();
非常感谢你。
答案 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)下获得双重许可: