編集:私はもともと私の質問から重要な詳細を省略しました-マーシャリングされるJavaオブジェクトを返す私のサービスメソッドFoo
は、クラス実装タイプ()ではなくインターフェイスタイプ()を返しますFooImpl
。
いくつかの要素と属性にJAX-Bアノテーションを付けた単純なJavaクラスがあります。
@XmlRootElement(name = "foo")
public class FooImpl {
private String id;
private String name;
@XmlElement
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
@XmlAttribute
public String getId() {
return Id;
}
public void setId(final String id) {
this.id = id;
}
}
編集:FooImplクラスには次の名前のインターフェイスがありますFoo
:
public interface Foo {
public String getName();
public void setName(final String name);
public String getId();
public void setId(final String id);
}
を返すサービスメソッドがある場合Foo
、期待どおりの結果が得られます。
<foo id="abc123">
<name>bar</name>
</foo>
しかし、を含む別のクラスもList<Foo>
あり、それがマーシャリングされると、のXML要素には属性foo
が含まれませんid
!!
<foos>
<foo>
<name>bar1</name>
</foo>
<foo>
<name>bar2</name>
</foo>
</foos>
リストを保持するクラスは次のようになります。
@XmlRootElement(name = "foos")
public class Foos {
private List<Foo> foos;
@XmlElement(name = "foo")
public List<Foo> getFoos() {
return foos;
}
public void setFoos(List<Foo> foos) {
this.foos = foos;
}
}
私はたまたまJAX-B実装としてMOXyを使用していますが、それは重要ではないと思います。