【发布时间】:2012-02-04 00:10:24
【问题描述】:
编辑:我最初从我的问题中遗漏了一个重要的细节——返回要编组的 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);
}
当我有一个返回 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;
}
}
我碰巧使用 MOXy 作为我的 JAX-B 实现,但我认为这并不重要。
【问题讨论】:
-
您确定内存中的对象(在编组之前)包含
id属性的非空值吗? -
是的。我可以自己返回任何一个
Foo对象并查看属性值。但是当同一个对象是Foos集合的一部分时,我不能。我正在通过 HTTP4E 直接从 Eclipse 测试 Web 服务,因此我可以准确地看到有效负载。
标签: java xml web-services jaxb moxy