有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java为SOAP定制DataHandler

我有一个应用程序,其中两个进程使用SOAP进行通信。一个文件正在从进程A传输到进程B。进程B将在其中将其存储到数据库

opqData.setBase64Binary(new DataHandler(new FileDataSource(file)));

其中file是需要存储到数据库的数据。 但是现在我想在将数据存储到DB时压缩数据。一个选项是压缩文件并将其作为FileDataSource发送。但是我不能使用它,因为我们有1000多个这样的文件,它在文件结构中创建了很多zip条目,创建zip是额外的开销

因此,我考虑将DataHandler实现为GzipDataHandler,返回的输入流是进程B的gzipInputStream。因此,数据将被压缩并存储到数据库中

然而,我对如何为我的新GzipDataHandler编写getInputStream方法感到困惑

以前有人试过这样的吗?或者我可以从Java和SOAP专家那里得到一些建议吗

谢谢,
乔希


共 (2) 个答案

  1. # 1 楼答案

    嗯。我找到了解决办法。 解决方案不是更改DataHandler,而是更改FileDataSource

    创建一个新的FileDataSource,比如ZipFileDataSource,扩展FileDataSource并实现getInputStream方法

    您的getInputStream方法应该读取该文件,gziOutputStream应该对其进行压缩,并且应该通过管道将其传递给调用者

    final PipedOutputStream pos = new PipedOutputStream();
    final PipedInputStream pis = new PipedInputStream(pos);
    FileInputStream fis = null;
    GZIPOutputStream gos = null;
    byte[] buffer = new byte[1024];
    try {
        fis = new FileInputStream(MyFile);
        gos = new GZIPOutputStream(pos);
            int length;
            while ((length = fis.read(buffer, 0, 1024)) != -1)
        gos.write(buffer, 0, length);
            fis.close();
    } catch(Exception e){
    
    }
    

    上面是示例代码

    问候,
    乔希