Редактировать: Первоначально я пропустил, что может быть важной деталью из моего вопроса - мои сервисные методы, которые возвращают объекты 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>
, и когда он маршалируется,элементы 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, но я не думаю, что это имеет значение.