2

给定以下课程:

@XmlSeeAlso({A.class, B.class})
@XmlDiscriminatorNode("@type")
public abstract class Base implements Serializable {
}

A(和类似的B)是:

@XmlDiscriminatorValue("A")
public class A extends Base {
    private String foo;
    // constructor, getter, setter
}

包装List<Base>这两种类型的包含对象将导致此示例 JSON:

{
  "list": [
    {
      "@type": "A",
      "bar": 123
    },
    {
      "@type": "A",
      "bar": 789
    },
    {
      "@type": "B",
      "foo": "sddadad"
    },
    {
      "@type": "B",
      "foo": "ttf4eg4gf sd"
    },
    {
      "@type": "A",
      "bar": 465
    }
  ]
}

现在到我的问题开始的部分:当@type属性从“第一”位置移开时,解组失败:

{
    "bar" : 123,
    "@type" : "A"
}

Exception Description: Missing class indicator field from database row [UnmarshalRecordImpl()].

这是预期的行为吗?我必须确保@type声明始终是“第一”吗?

我正在使用 EclipseLink 2.5.1.v20130619-ffd088c 每晚构建。

4

1 回答 1

2

当在UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX解组器上指定时,当前EclipseLink JAXB (MOXy)要求具有属性前缀的键出现在没有的键之前。我已经打开了以下增强请求(请参阅下面的链接),您可以使用它来跟踪我们在此问题上的进展。

解决方法

此问题仅在UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX设置属性时发生。如果未设置,MOXy 可以毫无问题地解组以下内容:

{
    "bar" : 123,
    "type" : "A"
}
于 2013-06-24T15:00:36.550 回答