2010-09-14 30 views

Respuesta

10

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; 
Cuestiones relacionadas