編輯:我原本遺漏了什麼可能是從我的問題,一個重要的細節 - 我的服務方法,返回的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