По сути, я хочу сделать обратный ответ на этот вопрос .
Я получаю XML от пакетного сервиса геокодирования Microsoft Bing, и некоторые элементы выглядят следующим образом здесь ):
<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>