Pregunta

Básicamente, quiero hacer lo contrario de esta pregunta .

Me estoy XML del servicio por lotes Geocode Bing de Microsoft, y algunos de los elementos de aspecto (escalfados de aquí ):

<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>

Tenga en cuenta que los elementos <Link> tienen atributos, así como el contenido del texto. Aquí están las clases POJO pertinentes que estoy tratando de deserializar a:

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

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

Con mi configuración actual (clases son alias, atributos detectada automáticamente, y todo eso), xstream deserializa adecuadamente los atributos Name y Role sobre los elementos <Link>, pero no el propio enlace de texto real.

¿Cómo llego xstream deserializar ese texto en un campo String en un objeto Link?

Yo no quiero tener que insertar manualmente nuevos elementos de todo el texto del enlace * sólo para esto.


* por ejemplo., Reemplace

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

con

<Link role="self">
    <url>https://long/url/here</url>
</Link>
¿Fue útil?

Solución

xstream no es una herramienta adecuada para ello. El énfasis de xstream está en serializar / deserializar objetos Java arbitraria gráficos a XML, en lugar de serializar / deserializar XML arbitrario.

Va a ser una pelea cuesta arriba flexión xstream a su voluntad. Recomiendo el uso de algo mejor diseñado para esta tarea, como JAXB (integrado en JavaSE6) o JiBX.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top