Я использую библиотеку XStream для анализа XML в объекты. Моя проблема заключается в том, что XML-схема (правда, это не очень хорошо, но это также вне моего контроля) указывает, что определенный элемент имеет все данные по атрибутам, как так:Как разобрать пустой XML-элемент, если он имеет атрибуты?
<Player machineIdentifier="41412kj423nkj234" platform="Chrome" product="Plex Web" state="playing" title="Plex Web (Chrome)" />
Мой класс для Player
элемент:
@XStreamAlias("Player")
public class Player {
@XStreamAlias("platform")
@XStreamAsAttribute
private String platform;
@XStreamAlias("product")
@XStreamAsAttribute
private String product;
@XStreamAlias("title")
@XStreamAsAttribute
private String name;
// Getters-setters ommited for brevity
}
Поскольку элемент является технически пустым, XStream.fromXML()
производит объект, где Player
поле равно нулю.
Как я могу заставить XStream все еще разобрать и создать экземпляр объекта Player
, чтобы я мог использовать атрибуты?
Edit для ответа Аникет в
Я использую метод processAnnotations()
. Поскольку фактическая схема больше, чем просто элемент Player
, она даже не будет работать без обработки аннотаций.
Мой класс «objectifier» (я сделал более общий характер, так как существует множество схем, я работаю с):
public class XMLObjectifier {
// Other models omitted for brevity
private Class[] sessionModel = new Class[]{
PlexSessionResponse.class,
Player.class,
User.class,
Video.class
};
public Object toObject(String xml, ModelType type) {
XStream xStream = new XStream();
xStream.ignoreUnknownElements();
switch (type) {
case STATUS:
xStream.processAnnotations(statusModel);
break;
case SESSION:
xStream.processAnnotations(sessionModel);
break;
}
return xStream.fromXML(xml);
}
}
Я использую метод processAnnotations() '. См. Обновленный вопрос. – j0ntech