编辑:我最初从我的问题中遗漏了一个重要的细节——返回要编组的 Java 对象的服务方法返回接口类型 ( Foo
) 而不是类实现类型 ( FooImpl
)。
我有一个简单的 Java 类,其中包含几个元素和属性的 JAX-B 注释:
@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);
}
当我有一个返回 a 的服务方法时Foo
,我得到了我所期望的:
<foo id="abc123">
<name>bar</name>
</foo>
但是我还有另一个包含 a 的类,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;
}
}
我碰巧使用 MOXy 作为我的 JAX-B 实现,但我认为这并不重要。