2010-09-14 86 views

回答

10

首先尝试downcast到javax.xml.transform.stream.StreamSource。如果成功,您可以通过获得者访问底层InputStreamReader。这将是最简单的方法。

如果向下转换失败,您可以尝试使用javax.xml.transform.Transformer将其转换为已使用java.io.ByteArrayOutputStream设置的javax.xml.transform.stream.StreamResult。然后你返回java.io.ByteArrayInputStream。喜欢的东西:

 
Transformer t = // getTransformer(); 
ByteArrayOutputStream os = new ByteArrayOutputStream(); 
Result result = new StreamResult(os); 
t.transform(inputSource, result); 
return new ByteArrayInputStream(os.getByteArray()); 

当然,如果StreamSource可以是一个大型文档,这是不可取的。在这种情况下,您可以使用临时文件和java.io.FileOutputStream/java.io.FileInputStram。另一种选择是产生变压器线程并通过java.io.PipedOutputStream/java.io.PipedInputStream进行通信,但是这更复杂:

 
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;