jaxb - 解码单个元素列表失败

标签 jaxb eclipselink jax-rs glassfish-3 moxy

我正在运行来自 Blaise Doughans blog 的示例(我再也找不到了)在 Glassfish 3 上使用 EclipseLink 2.5 MOXy 实现 JAXB 服务。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {

    @XmlElementWrapper(name="employees")
    @XmlElement(name = "employee", type=Employee.class)
    private List<Employee> employees;
}

@XmlAccessorType(XmlAccessType.FIELD)
public class Employee {
    private String id;
    private String name;
}

我在类中添加了一些注释,以生成所需的 json 结构:

{
  "employees": [
    {
      "id": "1",
      "name": "Jane Doe",
      "report": []
    }
  ]
}

当我尝试解码此 JSON 时,遗憾的是它失败了,返回了一个包含空员工列表的对象。
将另一个元素添加到 JSON 列表或删除 @XmlElementWrapper 有效。
但是我希望关键元素被命名为 employees,所以我必须使用包装器注释,或者不使用?

编辑:

public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> set = new HashSet<Class<?>>(2);
        set.add(MOXyJsonProvider.class);
        set.add(Index.class);
        return set;
    }

    @Override
    public Set<Object> getSingletons() {
        MOXyJsonProvider moxyJsonProvider = new MOXyJsonProvider();

        moxyJsonProvider.setAttributePrefix("@");
        moxyJsonProvider.setFormattedOutput(true);
        moxyJsonProvider.setIncludeRoot(false);
        moxyJsonProvider.setMarshalEmptyCollections(true);
        moxyJsonProvider.setValueWrapper("$");
        moxyJsonProvider.setWrapperAsArrayName(true);

        HashSet<Object> set = new HashSet<Object>(1);
        set.add(moxyJsonProvider);
        return set;
    }

}

最佳答案

我已确认您遇到的问题并已打开以下错误:

更新

此问题的修复已 checkin EclipseLink 2.5.1 和 2.6.0 流。从 2013 年 6 月 19 日开始,您可以通过以下链接在相应的每晚构建中获得修复:

关于jaxb - 解码单个元素列表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910193/

相关文章:

jboss - 无法找到 : javax. ws.rs.core.UriInfo 类型的上下文数据

java - 使用 Jaxb unmarshal/marshal 时线程 "main"java.lang.NullPointerException 中出现异常

java - "com.sun.xml.bind.xmlDeclaration=false"和 "jaxb.fragment=true"之间有什么区别?

java - 将 JAXB 编码为 XML 文件时

java - JPA 对于原始属性也是懒惰的吗?

java - eclipselink 中的 UPDATE CASCADE 外键

java - 将多个 xml 对象传递给 jax-rs 服务

hibernate - 如何动态设置 JPA 标准查询的位置/命名参数?

java - 用 JAX-RS 覆盖 HTTP 方法

java - JAX-RS + JAXB (XML) -- 如何将单个字节作为十六进制传递?