【问题标题】:Unmarshal a single element list fails解组单个元素列表失败
【发布时间】:2014-09-14 14:53:12
【问题描述】:

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

@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;
    }

}

【问题讨论】:

    标签: jaxb eclipselink jax-rs glassfish-3 moxy


    【解决方案1】:

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

    更新

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

    【讨论】:

    • 谢谢。所以我可以抓住今天的夜间版本来获得固定版本?
    • @Imperative - 我将在今天进行修复,明天您将能够获取 6 月 19 日的夜间版本。它通常在东部时间早上可用。
    猜你喜欢
    • 2018-03-02
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多