使用Java的SOAP自定义DataHandler

时间:2012-01-31 03:17:08

标签: java soap datahandler

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

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

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

所以我想将DataHandler实现为GzipDataHandler,返回的输入流是gzipInputStream来处理B.因此数据将被压缩并存储到数据库中。

但是我很困惑如何为我的新GzipDataHandler编写getInputStream方法。

有没有人尝试过这样的事情?或者我可以从Java和SOAP专家那里得到任何指示吗?

谢谢,
Dheeraj Joshi

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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

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

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

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