6

JAXB (JSR-222)プロバイダーとして Eclipselink 2.3.2 を使用しています。アイテムのリストとページネーション リンクのセットで構成される一般的なリストを作成しました。

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "listdata")
public class ListEntity<T> {

    @XmlElementRef
    public List<T> data;

    @XmlElementRef
    public PaginationLinks links;

    public ListEntity(List<T> data) {
        this.data = data;
    }

    public ListEntity() {
    }

}

私の実際のエンティティ

@XmlRootElement(name="authorization")
public class AuthorizationDTO {

    @XmlElement 
    public String referenceNumber;

} 

そのため、リストの作成後にマーシャリングしようとすると、次のエラーが発生します。リストデータの @XmlElement で問題なく動作しますが、オブジェクト表現を作成するため、明らかに使用できません

Caused by: Exception [EclipseLink-50006] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JAXBException

Exception Description: Invalid XmlElementRef on property data on class com.ofss.fc.botg.infra.model.ListEntity. Referenced Element not declared.
4

1 に答える 1

4

@XmlElementRef注釈には次の要件があります( http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementRef.html参照):

  • コレクション項目タイプ (コレクション プロパティの場合) またはプロパティ タイプ (単一値プロパティの場合) がJAXBElementである場合、@XmlElementRef.name()およびは、 で注釈が付けられたクラス(通常はスキーマ コンパイラによって生成されたクラス) 内の注釈を@XmlElementRef.namespace()持つ要素ファクトリ メソッドを指す必要があります。@XmlElementDecl@XmlRegistryObjectFactory

    • @XmlElementDecl.name()等しい必要があります@XmlElementRef.name()
    • @XmlElementDecl.namespace()等しい必要があり@XmlElementRef.namespace()ます。
  • コレクション項目タイプ (コレクション プロパティの場合) またはプロパティ タイプ (単一値プロパティの場合) が でないJAXBElement場合、プロパティまたはフィールドによって参照されるタイプに の注釈を付ける必要があります@XmlRootElement


ListEntityタイプではなくクラスとして処理されるため、フィールドdataはタイプを持つものとして扱われるObjectため、要件が満たされ@XmlElementRefず、表示されている例外が発生します。

于 2013-06-18T20:18:56.197 に答える