2010-09-14 12 views

Odpowiedz

10

Najpierw spróbuj obniżyć do javax.xml.transform.stream.StreamSource. Jeśli to ci się uda, masz dostęp do podstawowej InputStream lub Reader poprzez moduły pobierające. To byłby najprostszy sposób.

Jeśli downcasting nie powiedzie się, możesz spróbować użyć javax.xml.transform.Transformer, aby przekształcić go w javax.xml.transform.stream.StreamResult, który został skonfigurowany z java.io.ByteArrayOutputStream. Następnie zwracasz java.io.ByteArrayInputStream. Coś jak:

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

Oczywiście, jeśli StreamSource może być duży dokument, nie jest to wskazane. W takim przypadku można użyć pliku tymczasowego i java.io.FileOutputStream/java.io.FileInputStram. Inną opcją byłoby odrodzenie się wątku transformatora i komunikacja poprzez java.io.PipedOutputStream/java.io.PipedInputStream, ale jest to bardziej złożone:

 
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; 
Powiązane problemy