如何将javax.xml.transform.Source转换为InputStream? [英] How to convert javax.xml.transform.Source into an InputStream?

查看:737
本文介绍了如何将javax.xml.transform.Source转换为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 。然后返回 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆