代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

如何将javax.xml.transform.source转换为输入流?

  •  7
  • Christopher Klewes  · 技术社区  · 15 年前

    如何转换 javax.xml.transform.Source 输入流?实施 Source javax.xml.transform.dom.DOMSource

    Source inputSource = messageContext.getRequest().getPayloadSource();
    
    2 回复  |  直到 15 年前
        1
  •  10
  •   gpeche    15 年前

    javax.xml.transform.stream.StreamSource InputStream Reader

    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 . 另一种选择是生成一个Transformer线程并通过 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;
    
        2
  •  0
  •   Mohsen    15 年前

    通常是不可能的,除非它能被铸造成 StreamSource 或其他 implementations .

    推荐文章