如何将javax.xml.transform.Source转换为InputStream?

Chr*_*wes 7 java io transform

如何将a javax.xml.transform.Source转换为InputStream?实施Sourcejavax.xml.transform.dom.DOMSource.

Source inputSource = messageContext.getRequest().getPayloadSource();
Run Code Online (Sandbox Code Playgroud)

gpe*_*che 10

首先尝试向下倾斜javax.xml.transform.stream.StreamSource.如果成功,您可以访问底层InputStreamReader通过getter.这将是最简单的方法.

如果向下转换失败,您可以尝试使用a javax.xml.transform.Transformer将其转换为javax.xml.transform.stream.StreamResult已使用a设置的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;