编辑:我原本遗漏了什么可能是从我的问题,一个重要的细节 - 我的服务方法,返回的Java对象进行编组返回的接口类型(Foo
),而比类实现类型(FooImpl
)。JAX-B:缺少XML的子元素属性
我有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>
,并且当它被编组时,foo
的XML元素不包含它们的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实现,但我不认为事情。
确定在内存中(前编组)对象包含了'id'属性非空值? – 2012-02-04 00:34:00
是的。我可以自己返回任何一个'Foo'对象并查看属性值。但是当同一个物体是'Foos'集合的一部分时,我不能。我正在通过HTTP4E直接从Eclipse测试Web服务,所以我可以精确地看到有效负载。 – HDave 2012-02-04 03:56:59