Nada de lo que propongo aquí se prueba, pero estas son las rutas que creo que tomaría.
Si se espera que la longitud de la respuesta sea pequeña, personalmente probablemente solo opte por colocar la respuesta XML concatenada en una, String
como usted sugiere, y luego usar String
métodos estándar para extraer los documentos XML individuales o , como sugirió, eliminar el XML cadenas de declaración y envolver todo el lote con un par de elementos raíz. Dependería de si desea alimentar su analizador XML con un solo documento o múltiples. No lo he tratado BasicHttpResponse
en años, pero creo que puede obtener una InputStream
de la entidad de respuesta usando mBasicHttpResponse.getEntity().getContent()
, y luego usar una de las muchas maneras posibles para obtener una String
de eso InputStream
.
Si, por otro lado, espero tratar con datos bastante largos o si la entidad de respuesta puede contener un número indeterminado de documentos XML concatenados, entonces pensaría en envolver lo obtenido InputStream
con una costumbre InputStream
o Reader
que realice (a) despojándose de las declaraciones y (b) inserción de nuevos elementos raíz. Hay alguien más en SO que hizo una pregunta muy similar al problema que enfrenta aquí, excepto que no tenía las declaraciones para tratar. Mirando la respuesta del usuario 656449, vemos una sugerencia de cómo envolver un InputStream
elemento raíz ficticio antes de pasarlo al analizador SAX:
(Copiado descaradamente de la pregunta / respuesta SO referenciada):
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser parser = saxFactory.newSAXParser();
parser.parse(
new SequenceInputStream(
Collections.enumeration(Arrays.asList(
new InputStream[] {
new ByteArrayInputStream("<dummy>".getBytes()),
new FileInputStream(file),//bogus xml
new ByteArrayInputStream("</dummy>".getBytes()),
}))
),
new DefaultHandler()
);
Pero, adicionalmente, en esta situación, reemplazaría el FileInputStream
tipo con algún tipo de CustomFilterFileInputStream
creación propia para eliminar las líneas de declaración. Su CustomFilterFileInputStream
envolvería el InputStream
obtenido de su BasicHttpResponse
y luego el uso de SequenceInputStream
agrega las nuevas etiquetas raíz.
Ese es el tipo de dirección que creo que debería tomar si realmente tiene que aceptar los datos XML de esta manera, y si espera manejar grandes cantidades de ellos en una sola respuesta.
Estoy desarrollando una herramienta que consulta las actualizaciones del sistema externo y esta consulta se basa en el valor del tiempo de actualización que se representa como una representación de fecha interna de Excel, respectivamente, a los segundos ...
Estoy generando un archivo PDF usando com.itextpdf.text. * El siguiente es mi código que crea el archivo PDF con título y encabezado resaltados y filas, lo que quería hacer es crear un archivo PDF con imagen en ...
¿Alguien sabe la razón por la que Flux.onErrorContinue argumentos como el siguiente tipo: public final Flux <T> onErrorContinue (BiConsumer <Throwable, Object> errorConsumer) {...} en su lugar ...
¿Hay alguna forma de que pueda obtener la dirección IP original del cliente que viene al servidor desde org.springframework.web.context.request.WebRequest?