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;