Как преобразовать javax.xml.transform.Source в InputStream? - PullRequest
7 голосов
/ 14 сентября 2010

Как я могу преобразовать javax.xml.transform.Source в InputStream?Реализация Source - это javax.xml.transform.dom.DOMSource.

Source inputSource = messageContext.getRequest().getPayloadSource();

Ответы [ 2 ]

10 голосов
/ 14 сентября 2010

Сначала попытайтесь опуститься до 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;
0 голосов
/ 14 сентября 2010

Обычно это невозможно, если только оно не преуменьшено до StreamSource или других реализаций .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...