JAXB 编组超类
Posted
技术标签:
【中文标题】JAXB 编组超类【英文标题】:JAXB marshalling superclass 【发布时间】:2010-03-10 18:21:30 【问题描述】:我正在编写一个 Resteasy 服务器应用程序,但无法让我的超类编组。我有这样的代码:
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "person")
class Person
protected String name;
@XmlElement(name = "name")
public String getName() return name;
public void setName(String name) this.name = name;
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "employee")
class Employee extends Person
protected Integer id;
@XmlElement(name = "id")
public Integer getId() return id;
public void setId(Integer id) this.id = id;
当我将 Employee 类编组为 XML 时,我得到如下内容:
<employee>
<id>12345</id>
</employee>
没有从 Person 类继承的名称字段的输出。
我做错了什么?
谢谢,拉尔夫
【问题讨论】:
感谢 Ralph,这足以让我深入研究 jaxb。 :) 这个问题似乎是题外话,因为它对 OP 由于自己的错误而面临的特定问题过于具体。这是他自己承认的。 (搜索“到期”) 【参考方案1】:我不确定您是如何配置 JAXB 上下文或编组器的,但如下:-
public static void main(String[] args) throws Exception
Employee employee = new Employee();
employee.setId(1);
employee.setName("Ralph");
JAXBContext context = JAXBContext.newInstance(Employee.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(employee, System.out);
给出:-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<name>Ralph</name>
<id>1</id>
</employee>
【讨论】:
其实我不是。我正在运行类似于: return Response.ok(new GenericEntity>(listOfEmployees).build(); 从我的 JAX-RS URL 处理程序的代码,因为我需要能够在 REST 中返回其他内容标头响应,这是我能找到返回员工 ArrayList 的唯一方法。我从未明确创建过 JAXBContext 或 Marshaller。有更好的方法吗?也许我会尝试将 marshaller 的输出提供给 Response.ok () 方法。 对不起,我不熟悉 JAX-RS。 男孩,这是一个 DUE(愚蠢的用户错误)。我创建了一个注释来填充数据库列中的字段(“ORM”的私有实现),但没有遍历超类字段,所以它们都是空的。现在可以使用了。 拉尔夫,你能在这里解释一下你的评论吗?我遇到了类似的问题,并非所有项目都正确地从我的域类中编组,或者我得到的 XML 标记中的一些没有值。你做了什么来解决这个问题?以上是关于JAXB 编组超类的主要内容,如果未能解决你的问题,请参考以下文章