Я пытаюсь использовать данные стороннего веб-сервиса. К сожалению, веб-сервис возвращает данные в необычном формате XML. Вот пример данных, которые я получаю от сервиса:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://mynamespace">(-76.4844131, 39.1031567, 0.0000000)
(-76.4871168, 39.1031567, 0.0000000)
(-76.4875889, 39.1042890, 0.0000000)
(-76.4905500, 39.1052881, 0.0000000)
</string>
Вместо корневого узла, содержащего список элементов путевой точки (широта, долгота, высота), содержимое корневого узла представляет собой большое строковое значение. Хотя я мог просто проанализировать строку, я надеялся использовать JAXB (поскольку я использую JERSEY для вызовов службы) для преобразования этого возвращенного XML в Java POCO.
В идеале было бы неплохо преобразовать большое строковое тело корневого узла в класс POCO со списком путевых точек, но я полагаю, что для этого потребуется пользовательская десериализация XML вне JAXB.
Но я бы с удовольствием что-то вроде этого, если бы я мог использовать JAXB:
@XmlRootElement(name="string", namespace="http://mynamespace")
public class Route {
private String _wayPoints;
@ ????
public String getWayPoints() { returns _waypoints; }
public void setWayPoints(String wayPoints) { _wayPoints = wayPoints; }
}
К сожалению, я не видел в JAXB никакого способа сказать маршаллеру, что одно из моих свойств должно быть содержимым либо корневого элемента, либо какого-либо другого элемента.
В идеале было бы неплохо, если бы я мог комментировать свою собственность чем-то вроде:
@XmlElementContent(ElementName="string")
и это приведет к маршализации / демаршализации содержимого моего свойства wayPoint в содержимое (или внутренний текст) моего корневого элемента.
У кого-нибудь была похожая проблема? Есть ли способ сделать это с JAXB? Или мне следует просто проанализировать строку и / или написать собственный десериализатор XML.
Спасибо!