1

ルートオブジェクトをスーパーフィールドにバインドすることさえ可能ですか?

バインドする非常に複雑なエンティティ (エンティティ) があります。私はすでにそれで迷っています:)

これは私のコードの状況です:

public class CoreRestWrapper {
    private Integer page;
    private Integer perPage;
}

public class UserWrapper extends CoreRestWrapper {
    private Collection<UserCVO> users;
}

public class UserCVO  {
    private UserVO userVO;
    private Map<String, UserMeta> meta;
}

public class UserVO extends BaseVO {
    //nothing here
}

public class BaseVO {
    private Integer id;
    private String mainName;
}

public class UserMeta extends Meta {
    //nothing here
}

public class Meta {
    private String key;
    private Object value;
    private String type; //String, Integer, Boolean, Date
}

UserWrapper は私のルート オブジェクトです。応答 xml を次のようにしたいと思います。

<users>
    <page>1</page>
    <perPage>2</perPage>
    <user>
        <id>1</id>
        <main>test</main>
        <meta type="String" key="wtf">just for fun</meta>
        <meta type="Integer" key="age">99</meta>
    </user>
    <user>
        <id>2</id>
        <main>test</main>
        <meta type="String" key="wtf">fooooo</meta>
        <meta type="Integer" key="age">101</meta>
    </user>
</users>

または<users page="1" perPage="2">、ユーザータグだけでも...

これは可能ですか (JiBX の初心者が処理できますか)?

4

1 に答える 1

1

可能ですが、階層内のすべてのマッピングを定義する必要があります。私は同じことに遭遇しました。マップする JIBX ラッパー オブジェクト (UserJibxWrapper など) を作成し、それを内部オブジェクトにマップするための小さなコードを記述する方が簡単だとわかったほど複雑になりました。

ただし、あなたの場合、オブジェクト自体はかなり単純なので、必要なすべてのマッピングを生成できる可能性があります。私はトップダウンで働きます。基本クラスを取得してマップし、そのマッピング作業を取得してから、サブクラスを追加して、必要に応じてマッピングを変更し、その方法で作業を続けます。JIBX はマップする階層内のすべてを認識する必要があるため、ボトムアップよりもトップダウンでマップする方が簡単です。

于 2009-10-19T16:57:58.990 に答える