2

com.sun.xml.bind jaxb-impl 2.2.6 を使用します。

親と子のオブジェクトがあります。マーシャル後に取得したいのは次のとおりです。

<parent/> or <parent></parent>

しかし、私が得るのは次のようなエラーです:

com.sun.xml.internal.bind.api.AccessorException: Object must have some value in its @XmlValue field: com.test.data.Child@....

コードは次のとおりです。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"content"})
@XmlRootElement(name = "child")
public class Child {
    @XmlValue
    protected String content;
    public String getContent() {
        return content;
    }
}
...

それで

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"child"})
@XmlRootElement(name = "parent")
public class Parent {
    protected Child child;
    public Child getChild() {
        return child;
    }
}

私がしていることは次のとおりです(これは、後で子のコンテンツを「多分」埋められるようにしたいためです):

if(parent.getChild == null)
    parent.setChild(new Child());

次に、マーシャリングしようとすると、上記のエラーが発生します。

私が試してみると:

if(parent.getChild == null) {
    Child child = new Child();
    child.setContent("");
    parent.setChild(child);
}

次に、期待される結果を取得します。

<parent><child></child></parent>

そして、子オブジェクトを親に設定しないことで必要なものを取得できます (したがって、parent.setChild(...) はありません) が、上記のように、以前に設定する時間を節約できます。

基本的に、投稿のように正反対のことをしようとしています: JAXB: 空の文字列は空の要素を生成しません

私が間違っていることはありますか、それとも正しく設定していない可能性がありますか?

ありがとう、

ヨアン

編集:次のいずれか以外の方法はありますか:
-後でnullに戻す:parent.setChild(null);
- そもそもオブジェクトとして設定しないでください

4

0 に答える 0