私はクラスの次の構造を持っています:
@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>