Сначала попытайтесь опуститься до javax.xml.transform.stream.StreamSource
.Если это удастся, у вас есть доступ к базовым InputStream
или Reader
через геттеры.Это был бы самый простой способ.
В случае сбоя при даункастинге вы можете попробовать использовать javax.xml.transform.Transformer
, чтобы преобразовать его в javax.xml.transform.stream.StreamResult
, настроенный с помощью java.io.ByteArrayOutputStream
.Затем вы возвращаете 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;