【问题标题】:How to convert javax.xml.transform.Source into an InputStream?如何将 javax.xml.transform.Source 转换为 InputStream?
【发布时间】:2011-04-12 07:02:07
【问题描述】:

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

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

【问题讨论】:

    标签: java io transform


    【解决方案1】:

    这通常是不可能的,除非它可以向下转换为 StreamSource 或其他 implementations

    【讨论】:

      【解决方案2】:

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

      如果向下转换失败,您可以尝试使用javax.xml.transform.Transformer 将其转换为使用java.io.ByteArrayOutputStream 设置的javax.xml.transform.stream.StreamResult。然后你返回一个java.io.ByteArrayInputStream。比如:

      变压器 t = // getTransformer(); ByteArrayOutputStream os = new ByteArrayOutputStream(); 结果 result = new StreamResult(os); t.transform(输入源,结果); 返回新的 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 = new StreamResult(os); // 这将创建并启动一个创建转换器的线程 // 并将其应用于方法参数。 spawnTransformerThread(输入源,结果); 回报是;

      【讨论】:

        猜你喜欢
        • 2011-12-12
        • 2011-02-19
        • 2013-06-11
        • 2016-04-11
        • 2020-02-27
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多