В настоящее время у меня есть несколько различных оберток элементов xml в классе.JAXB: Сделать имя элемента xml прозрачным
Я хочу добавить один атрибут в теги xml для элементов xml. Это будет работать как флаг для моего приложения.
Каждый элемент xml будет иметь другое значение атрибута, поэтому я решил собрать их вместе.
По этой причине я написал новый объект с двумя полями. Общее поле значения и поле строки, чтобы использовать его как атрибут.
К сожалению, я не могу найти способ извлечь значение из поля значений без присутствия тэга «мусор».
Есть ли способ сделать это. Чтобы быть более ясным, я представляю конкретные части кода.
@XmlRootElement(name = "client")
class Client {
private List<String> names;
private List<Integer> salaries;
private List<Long> socialSecurityNos;
@XmlElementWrapper(name = "names")
@XmlElement(name = "name")
public List<String> getNames() {
return this.names;
}
@XmlElementWrapper(name = "salaries")
@XmlElement(name = "salary")
public List<String> getSalaries() {
return this.salaries;
}
@XmlElementWrapper(name = "socialsecuritynos")
@XmlElement(name = "socialsecurityno")
public List<String> getSocialSecurityNo() {
return this.socialSecurityNos;
}
...
...
}
Это производит следующие XML
<foo>
<names>
<name>
George
</name>
<name>
John
</name>
</names>
<salaries>
<salaries>
...
...
</salaries>
</salaries>
<socialSecurityNo>
<socialSecurityNo>
...
...
</socialSecurityNo>
</socialSecurityNo>
</foo>
новое значение атрибута пары класс, который я написал.
@XmlRootElement(name = "client")
class GenericElement <T> {
private String attribute;
private T value;
public T getValue() {
return this.value;
}
@XmlAttribute(name = "flag")
public String getAttribute() {
return this.attribute;
}
}
И, конечно, я изменил типы Lists
@XmlRootElement(name = "client")
class Client {
private List<GenericElement<String>> names;
private List<GenericElement<Integer>> salaries;
private List<GenericElement<Long>> socialSecurityNos;
...
...
Я хочу, чтобы получить этот результат.
<foo>
<names>
<name flag="on">
George
</name>
...
<name flag="off">
John
</name>
</names>
....
.....
</socialSecurityNo>
</socialSecurityNo>
</foo>
Вместо этого я получаю это с тегом значения «мусор».
<foo>
<names>
<name flag="on">
<value>George</value>
</name>
...
<name flag="off">
<value>Value</value>
</name>
</names>
....
....
....................</value>
</socialSecurityNo>
</socialSecurityNo>
</foo>
Видимо XmlValue работает только с с «известным» типа иначе NullPointerException выбрасывается во время сортировочных. – Chrys
А я вижу, он не работает с универсальными типами. В этом случае [this] (http://stackoverflow.com/questions/8807296/jaxb-generic-xmlvalue/8901997#8901997) другой ответ должен сделать трюк. –