【问题标题】:WS Download operation with MTOM使用 MTOM 进行 WS 下载操作
【发布时间】:2013-01-30 02:06:22
【问题描述】:

我想通过带有 MTOM 的 WS 从 Oracle 数据库 blob 文件直接流式传输到 WS 客户端。

我以为我找到了这里描述的方法:

http://www.java.net/forum/topic/glassfish/metro-and-jaxb/mtom-best-practices

但是在我查看了 InputStreamDataSource 和 javax.mail.util.ByteArrayDataSource 之后,我意识到它们实际上是内存中“文档”的一个字节 [],这意味着流媒体的想法是徒劳的,因为我试图避免是在内存中同时拥有多个文档。

那么如何通过 WS 和 MTOM 从 DB 流式传输到 WS 客户端?

有什么想法吗?

谢谢

危机

【问题讨论】:

    标签: java performance web-services weblogic mtom


    【解决方案1】:

    我尝试了实验,最后我得到了一些积极的结果。

    为了从 DB 直接流式传输到客户端浏览器,请执行上述操作 事情是有效的,但 InputStreamDataSource 应该是这样的:

    public class InputStreamDataSource implements DataSource {
        private InputStream inputStream;
    
        public InputStreamDataSource(InputStream inputStream) {
            this.inputStream = inputStream;
        }
    
        public InputStream getInputStream() throws IOException {
            return inputStream;
        }
    
        public OutputStream getOutputStream() throws IOException {
            throw new UnsupportedOperationException("Not implemented");
        }
    
        public String getContentType() {
            return "*/*";
        }
    
        public String getName() {
            return "InputStreamDataSource";
        }
    }
    

    我害怕的是,一旦我自己关闭了输入流...... ws客户端没有收到二进制内容...

    我检查了一下,实际上 DataHandler 创建了一个新线程并关闭了输入流

    我能够以低内存占用快速将 500MB 从数据库流式传输到客户端!

    【讨论】:

    • 能否请您分享客户端代码,我正在尝试编写相同的代码,但客户端正在将整个内容加载到内存中
    猜你喜欢
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2014-04-07
    • 2013-04-13
    • 2014-03-02
    • 2010-11-09
    • 2018-04-21
    相关资源
    最近更新 更多