首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java为SOAP定制DataHandler

使用Java为SOAP定制DataHandler
EN

Stack Overflow用户
提问于 2012-01-31 11:17:08
回答 2查看 1.2K关注 0票数 0

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

代码语言:javascript
复制
opqData.setBase64Binary(new DataHandler(new FileDataSource(file)));

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

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

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

以前有没有人尝试过这样的东西?或者,我能从Java和SOAP专家那里得到任何建议吗?

谢谢,

Dheeraj Joshi

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-31 11:34:24

这可能会对你有所帮助:

http://www.exampledepot.com/egs/java.util.zip/CompressFile.html

票数 1
EN

Stack Overflow用户

发布于 2012-01-31 21:24:06

好的。我找到了解决方案。解决方案不是更改DataHandler,而是更改FileDataSource。

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

您的getInputStream方法应该读取文件,GZIPOutputStream应该压缩它,并且它应该通过管道传递给调用者。

代码语言:javascript
复制
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){

}

上面是示例代码。

致以敬意,

Dheeraj Joshi

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9073925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档