Десериализация текстовых элементов XML с атрибутами в XStream

По сути, я хочу выполнить обратный этот вопрос.

Я получаю XML из службы пакетного геокодирования Bing от Microsoft, и некоторые элементы выглядят так (взято из здесь):

<DataflowJob>
    <Id>5bf10c37df944083b1879fbb0556e67e</Id>
    <Link role="self">https://spatial.virtualearth.net /REST/v1/dataflows/Geocode/5bf10c37df944083b1879fbb0556e67e</Link>
    <Link role="output" name="succeeded">https://spatial.virtualearth.net/REST/v1/dataflows/Geocode/5bf10c37df944083b1879fbb0556e67e/output/succeeded</Link>
    <Link role="output" name="failed">https://spatial.virtualearth.net/REST/v1/dataflows/Geocode/5bf10c37df944083b1879fbb0556e67e/output/failed</Link>
    <Description>Xml</Description>
    <Status>Completed</Status>
    ...
</DataflowJob>

Обратите внимание, что элементы <Link> имеют атрибуты, а также текстовое содержимое. Вот соответствующие классы POJO, которые я пытаюсь десериализовать:

class DataflowJob
{
    String Id;
    @XStreamImplicit
    List<Link> Links;
    String Description;
    Status Status;
    ...
}

class Link
{
    @XStreamAsAttribute
    Role role;
    @XStreamAsAttribute
    Name name;
    String url;
}

С моей текущей конфигурацией (классы имеют псевдонимы, атрибуты определяются автоматически и все такое прочее) XStream правильно десериализует атрибуты Name и Role в элементах <Link>, но не сам фактический текст ссылки.

Как заставить XStream десериализовать этот текст в поле String в объекте Link?

Я не хочу вручную вставлять новые элементы вокруг текста ссылки* только для этого.


* например, заменить

<Link role="self">
    https://long/url/here
</Link>

с участием

<Link role="self">
    <url>https://long/url/here</url>
</Link>

person Matt Ball    schedule 15.06.2010    source источник
comment
У меня также есть такой же тип xml.. спасибо за размещение этого вопроса   -  person Shekhar    schedule 19.05.2011


Ответы (1)


XStream не подходит для этого. XStream делает упор на сериализацию/десериализацию произвольных графиков объектов Java в XML, а не на сериализацию/десериализацию произвольного XML.

Это будет тяжелая битва, чтобы заставить XStream подчиняться вашей воле. Я рекомендую использовать что-то более подходящее для этой задачи, например JAXB (встроенный в JavaSE6) или JiBX.

person skaffman    schedule 15.06.2010
comment
Данг. Если это действительно так, думаю, я пойду с неприятным взломом, который я отметил в сноске. - person Matt Ball; 15.06.2010