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

9
我该如何将 javax.xml.transform.Source 转换为 InputStream?实现 Source 的是 javax.xml.transform.dom.DOMSource
Source inputSource = messageContext.getRequest().getPayloadSource();
2个回答

10

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

如果向下转型失败,您可以尝试使用javax.xml.transform.Transformer将其转换为已设置了java.io.ByteArrayOutputStreamjavax.xml.transform.stream.StreamResult。然后返回一个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);
// 这将创建并启动一个线程,该线程将创建转换器并将其应用于方法参数。
spawnTransformerThread(inputSource, result);
return is;

0

通常情况下是不可能的,除非它可以向下转换为StreamSource或其他实现


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接