Primero intente bajar a javax.xml.transform.stream.StreamSource
. Si eso tiene éxito, tiene acceso a los subyacentes InputStream
o Reader
a través de getters. Esta sería la forma más fácil.
Si el downcasting falla, puede intentar usar un javax.xml.transform.Transformer
para transformarlo en un javax.xml.transform.stream.StreamResult
que se ha configurado con un java.io.ByteArrayOutputStream
. Luego devuelve un java.io.ByteArrayInputStream
. Algo así como:
Transformer t = // getTransformer();
ByteArrayOutputStream os = new ByteArrayOutputStream();
Result result = new StreamResult(os);
t.transform(inputSource, result);
return new ByteArrayInputStream(os.getByteArray());
Por supuesto, si el StreamSource
puede ser un documento de gran tamaño, esto no es recomendable. En ese caso, puede usar un archivo temporal y java.io.FileOutputStream
/java.io.FileInputStram
. Otra opción sería generar un hilo de transformador y comunicarse a través de java.io.PipedOutputStream
/java.io.PipedInputStream
, pero esto es más complejo:
PipedInputStream is = new PipedInputStream();
PipedOutputStream os = new PipedOutputStream(is);
Result result = new StreamResult(os);
// This creates and starts a thread that creates a transformer
// and applies it to the method parameters.
spawnTransformerThread(inputSource, result);
return is;