解组单个元素列表失败

时间:2013-06-18 08:53:27

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

我正在使用EclipseLink 2.5 MOXy for JAXB服务从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;
    }

}

1 个答案:

答案 0 :(得分:4)

我已确认您正在查看的问题并已打开以下错误:

<强>更新

已将此问题的修复程序检入EclipseLink 2.5.1和2.6.0流。您可以从2013年6月19日开始的以下链接获取相应夜间版本中的修复: