Я работаю с API коллеги.API возвращает Response
со списком объектов или только одним единственным объектом.Объекты могут быть нескольких типов.Тип возвращаемого значения в XML.Я заинтересован в синтаксическом анализе этого XML через JAXB для получения моих классов, в идеале гибким и универсальным способом.
Следующие два XML-ответа являются примером того, о чем я говорю.
Пример1: Ответ со списком Jobs
, содержащий Job
объект.
<Response>
<Status>OK</Status>
<Jobs>
<Job>
<ID>J1</ID>
<Name>job name</Name>
</Job>
<Job>
<ID>J2</ID>
<Name>job name</Name>
</Job>
</Jobs>
</Response>
Пример 2: Ответ с одним Job
.
<Response>
<Status>OK</Status>
<Job>
<ID>J123</ID>
<Name>job name</Name>
</Job>
</Response>
В данный момент яЯ создаю что-то следующим образом:
@XmlRootElement(name="Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class Response {
@XmlElement(name = "Status")
protected Status status;
@XmlAnyElement(lax=true)
protected Object items;
}
Unmarshalling через
Response = (Response) unmarshaller.unmarshal(myXmlResponse);
Но я получаю null
в своих предметах при немаршаллинге Sample 1
.Кроме того, такой подход вызывает у меня плохое предчувствие, поскольку я использую Object
в качестве универсального решения, то есть ожидаю оба типа List<Job>
и Job
.Что я делаю неправильно?Есть ли лучшее решение?Может быть, мой класс ответа может иметь два обобщенных типа: один для списка item
с и другой для одного item
?
Подход, при котором единственное число <Job>
преобразуется в список job
s с одним элементом также было бы интересно, но я не уверен, что это может быть универсальным без изменения ответа XML.