【发布时间】:2011-04-12 07:02:07
【问题描述】:
如何将javax.xml.transform.Source 转换为 InputStream? Source的实现是javax.xml.transform.dom.DOMSource。
Source inputSource = messageContext.getRequest().getPayloadSource();
【问题讨论】:
如何将javax.xml.transform.Source 转换为 InputStream? Source的实现是javax.xml.transform.dom.DOMSource。
Source inputSource = messageContext.getRequest().getPayloadSource();
【问题讨论】:
这通常是不可能的,除非它可以向下转换为 StreamSource 或其他 implementations。
【讨论】:
首先尝试向下转换为javax.xml.transform.stream.StreamSource。如果成功,您可以通过 getter 访问底层的 InputStream 或 Reader。这将是最简单的方法。
如果向下转换失败,您可以尝试使用javax.xml.transform.Transformer 将其转换为使用java.io.ByteArrayOutputStream 设置的javax.xml.transform.stream.StreamResult。然后你返回一个java.io.ByteArrayInputStream。比如:
当然,如果StreamSource 可以是一个很大的文档,这是不可取的。在这种情况下,您可以使用临时文件和java.io.FileOutputStream/java.io.FileInputStram。另一种选择是生成一个转换器线程并通过java.io.PipedOutputStream/java.io.PipedInputStream 进行通信,但这更复杂:
【讨论】: