私はこの状況を持っています
@XmlType(name ="", propOrder={"value"})
@XmlRootElement(name = "compound")
public class Compound extends Value {
@XmlElements({
@XmlElement(name="simple", type=Simple.class),
@XmlElement(name="compound", type=Compound.class)
})
protected List<Value> value;
// ...
}
したがって、複合は単純および/または複合の両方のリストです。どちらも次のように定義された値から拡張されます
public abstract class Value implements Serializable {}
Simple は、単純な文字列との間でマーシャリング/アンマーシャリングするアダプタでマークされたクラスです
@XmlJavaTypeAdapter(SimpleAdapter.class)
public class Simple extends Value {
private java.lang.String simple;
// ...
}
コンパウンドはアダプター不要。
問題は、Simple を「そのまま」使用すると、次のように正しくマーシャリング/アンマーシャリングされることです。
<simple>my.text.here</simple>
しかし、コンパウンド内で使用すると、次のような出力が得られます
<compound>
//...
<simple>
<value>my.text.here</value>
</simple>
//...
</compound>
そして、私はなぜだろうと思っています...何かが恋しいですか?その「値」を削除するにはどうすればよいですか? @XmlElements 内でマークされたタイプでアダプターを使用することは可能ですか?
編集
いくつかのテストの後、Simple インスタンスの処理方法に問題がある可能性があることがわかりました。したがって、最初の質問を次のように単純化します。
次のような単純なクラスが与えられた場合
@XmlRootElement("simple")
public class Simple {
private java.lang.String innerText;
// getters/setters
}
次のようなマーシャリングされた出力を取得するにはどうすればよいですか
<simple>
my.inner.text.here
</simple>
それ以外の
<simple>
<value>my.inner.text.here</value>
</simple>
?