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

时间:2010-09-14 17:12:10

标签: java io transform

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

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

2 个答案:

答案 0 :(得分:10)

首先尝试向下转换为javax.xml.transform.stream.StreamSource。如果成功,您可以通过getter访问基础InputStreamReader。这将是最简单的方法。

如果向下转发失败,您可以尝试使用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;

答案 1 :(得分:0)

通常不可能,除非它可以下载到StreamSource或其他implementations