【问题标题】:Java : unable to marshal type "entities.Person" as an element becauseJava:无法将类型“entities.Person”编组为元素,因为
【发布时间】:2014-01-27 15:18:19
【问题描述】:

在我的 web 服务(使用 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();

非常感谢。

【问题讨论】:

  • 谢谢,你给我的链接很有用,但我想知道这个 EclipseLink 库是否可以安全地集成到商业产品(许可证)中......
  • 作者之一,Blaise,应该很快就会回答这个和那个。

标签: java xml jaxb marshalling


【解决方案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 库可以安全地集成到商业产品中 (许可证)...

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

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

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 2018-05-27
    • 2017-12-05
    • 2015-09-22
    • 1970-01-01
    • 2014-08-22
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多