#java #xml #jaxb
#java #xml #jaxb
Вопрос:
У меня есть такой XML, и я хочу разобрать его в объект Java.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CreatePreOrderResponse>
<Errors>
<Error>
<Code>code 1</Code>
<Message>message 1</Message>
<ErrorElement>element 1</ErrorElement>
</Error>
<Error>
<Code>code 2</Code>
<Message>message 2</Message>
<ErrorElement>element 2</ErrorElement>
</Error>
</Errors>
</CreatePreOrderResponse>
Я работаю с JAXB
для анализа строки XML, которая не имеет «подэлементов», имеет только один элемент со значениями на уровне errors
.
Вопрос: Я хотел бы знать, как получить все Error
элементы в Errors
элементе, например, в список в CreatePreOrderResponse
объекте? Возможно ли автоматически проанализировать его с JAXB
помощью unmarshaller или мне нужно просматривать XML и анализировать его вручную?
ПРИМЕЧАНИЕ: просто для информации, это работает для меня — эти классы я использую для синтаксического анализа этого XML (без подэлементов).
<CreatePreOrderResponse>
<PreOrder>
<ID>123456789</ID>
</PreOrder>
</CreatePreOrderResponse>
BtnPreorderResponse
@XmlRootElement(name = "CreatePreOrderResponse")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso(BtnDocLine.class)
public class BtnPreorderResponse {
@XmlElement(name = "PreOrder")
private BtnPreorder btnPreorder;
@XmlElement(name = "Errors")
private BtnErrorListType btnErrorListType;
public BtnPreorder getBtnPreorder() {
return btnPreorder;
}
public void setBtnPreorder(BtnPreorder btnPreorder) {
this.btnPreorder = btnPreorder;
}
public BtnErrorListType getBtnErrorListType() {
return btnErrorListType;
}
public void setBtnErrorListType(BtnErrorListType btnErrorListType) {
this.btnErrorListType = btnErrorListType;
}
@Override
public String toString() {
return "BtnPreorderResponse{"
"btnPreorder=" btnPreorder
", btnErrorListType=" btnErrorListType
'}';
}
}
BtnPreorder
@XmlRootElement(name = "PreOrder")
@XmlAccessorType(XmlAccessType.FIELD)
public class BtnPreorder {
@XmlElement(name = "ID")
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Override
public String toString() {
return "BtnPreorder{"
"id=" id
'}';
}
}
Комментарии:
1. похоже, вы не включаете самый важный класс BtnErrorListType
Ответ №1:
Я полагаю, вы уже реализовали отдельное предложение об ошибке как класс BtnErrorType. Теперь идет их список:
@XmlType(name = "Errors")
@XmlAccessorType(XmlAccessType.FIELD)
public class BtnErrorListType {
@XmlElement(name = "Error")
private ArrayList<BtnErrorType> btnError;
...
public ArrayList<BtnErrorType> getBtnError() {
if (btnError == null)
btnError = new ArrayList<BtnErrorType>();
return btnError;
}
...
}
Обратите внимание, что существует только геттер, и вы должны вызвать его, если хотите добавить элементы в список.