如何将javax.xml.transform.Source转换为InputStream? [英] How to convert javax.xml.transform.Source into an InputStream?
问题描述
如何将 javax.xml.transform.Source
转换为InputStream? Source
的实现是 javax.xml.transform.dom.DOMSource
。
How can I convert a javax.xml.transform.Source
into a InputStream? The Implementation of Source
is javax.xml.transform.dom.DOMSource
.
Source inputSource = messageContext.getRequest().getPayloadSource();
推荐答案
首先尝试向下转换为 javax.xml.transform.stream.StreamSource中
。如果成功,您可以通过getter访问基础 InputStream
或 Reader
。这将是最简单的方法。
First try to downcast to javax.xml.transform.stream.StreamSource
. If that succeeds you have access to the underlying InputStream
or Reader
through getters. This would be the easiest way.
如果向下转换失败,您可以尝试使用 javax.xml.transform.Transformer
将其转换为 javax.xml.transform.stream.StreamResult
已使用 java.io.ByteArrayOutputStream $ c $进行设置C>。然后返回
java.io.ByteArrayInputStream
。类似于:
If downcasting fails, you can try using a javax.xml.transform.Transformer
to transform it into a javax.xml.transform.stream.StreamResult
that has been setup with a java.io.ByteArrayOutputStream
. Then you return a java.io.ByteArrayInputStream
. Something like:
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
进行通信,但这更复杂:
Of course, if the StreamSource
can be a large document, this is not advisable. In that case, you could use a temporary file and java.io.FileOutputStream
/java.io.FileInputStram
. Another option would be to spawn a transformer thread and communicate through java.io.PipedOutputStream
/java.io.PipedInputStream
, but this is more complex:
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;
这篇关于如何将javax.xml.transform.Source转换为InputStream?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!