0

私はクラスの次の構造を持っています:

@XmlRootElement(name = "storage")
@XmlType(propOrder = {
        "entries"
})
@XmlAccessorType(XmlAccessType.FIELD)
public class A {
    @XmlElement(name = "configuration")
    private Set<ClassB> entries;
    ...
}

@XmlRootElement(name = "configuration")
@XmlType(propOrder = {
        "name",
        "entries"
})
@XmlAccessorType(XmlAccessType.FIELD)
public class B {
    private String name;
    @XmlElement(name = "configurationEntry")
    private Set<ClassC> entries;
    ...
}

@XmlRootElement(name = "configurationEntry")
@XmlType(propOrder = {
        "property1",
        "property2",
        "property3"
})
@XmlAccessorType(XmlAccessType.FIELD)
public class C {
    private String property1;
    private String property2;
    private String property3;
    ...
}

Jersey を使用して XML を作成すると、ルート コンテナー (クラス A) にアクセスしようとすると、次の出力が得られます。タグの代わりにタグがある理由がわかりません。

<Bes>
    <configuration>
        <name>Name1</name>
        <configurationEntry>
            <property1>...</property1>
            <property2>...</property2>
            <property3>...</property2>
        </configurationEntry>
        <configurationEntry>
            <property1>...</property1>
            <property2>...</property2>
            <property3>...</property2>
        </configurationEntry>
    </configuration>
    <configuration>
        <name>Name2</name>
        <configurationEntry>
            <property1>...</property1>
            <property2>...</property2>
            <property3>...</property2>
        </configurationEntry>
        <configurationEntry>
            <property1>...</property1>
            <property2>..</property2>
            <property3>...</property2>
        </configurationEntry>
    </configuration>
</Bes>

ClassB コンテナーの 1 つにアクセスしようとすると、次のようになります。(前回と同様の問題)、代わりに、タグが含まれていないことがわかります。

<Aes>
    <configurationEntry>
        <property1>...</property1>
        <property2>...</property2>
        <property3>...</property2>
    </configurationEntry>
    <configurationEntry>
        <property1>...</property1>
        <property2>...</property2>
        <property3>...</property2>
    </configurationEntry>
<Aes>

期待どおりに動作するのは、最低レベルのクラス C だけです。

<configurationEntry>
    <property1>...</property1>
    <property2>...</property2>
    <property3>...</property2>
</configurationEntry>

明確にするために、私の望ましい出力は次のとおりです。

ストレージ (クラス A) コンテナーにアクセスする場合:

<storage>
    <configuration>
        <name>Name1</name>
        <entries>
            <configurationEntry>
                <property1>...</property1>
                <property2>...</property2>
                <property3>...</property2>
            </configurationEntry>
            <configurationEntry>
                <property1>...</property1>
                <property2>...</property2>
                <property3>...</property2>
            </configurationEntry>
        </entries>
    </configuration>
    <configuration>
        <name>Name2</name>
        <entries>
            <configurationEntry>
                <property1>...</property1>
                <property2>...</property2>
                <property3>...</property2>
            </configurationEntry>
            <configurationEntry>
                <property1>...</property1>
                <property2>..</property2>
                <property3>...</property2>
            </configurationEntry>
        </entries>
    </configuration>
</storage>

第 2 レベルのコンテナーであるクラス B にアクセスする場合、次のようにします。

<configuration>
    <name>Name1</name>
    <entries>
        <configurationEntry>
            <property1>...</property1>
            <property2>...</property2>
            <property3>...</property2>
        </configurationEntry>
        <configurationEntry>
            <property1>...</property1>
            <property2>...</property2>
            <property3>...</property2>
        </configurationEntry>
    </entries>
</configuration>

クラス C は次の場合に問題ありません。

<configurationEntry>
    <property1>...</property1>
    <property2>...</property2>
    <property3>...</property2>
</configurationEntry>
4

2 に答える 2

1

<Bes>クラスAとクラスBにタグが表示<Aes>されているので..すでにルート要素を定義していると思います..つまり、クラスAとクラスBは別のクラスのサブセットです.xmlにはルート要素が1つしかないため、これを確認してください. そうである場合、クラス A および B のルート要素は無効です。クラスで定義されたxmlに問題はありません。詳細については、 http://java.dzone.com/articles/jaxb-and-root-elementsをご覧ください。

于 2013-09-02T11:36:26.550 に答える
0

気にしないでください、私はばかです。-.-'

私のクライアント コードでは、何らかの理由で と の代わりに と をそれぞれ取得Set<B>してSet<C>AましBた。

于 2013-09-02T11:47:12.307 に答える