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