KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > demo > streams > common > CompressionStreamHandler


1 package demo.streams.common;
2
3
4
5
6 import java.io.IOException JavaDoc;
7 import java.util.Map JavaDoc;
8 import java.util.logging.Logger JavaDoc;
9 import java.util.zip.GZIPInputStream JavaDoc;
10 import java.util.zip.GZIPOutputStream JavaDoc;
11 import javax.xml.ws.ProtocolException;
12 import javax.xml.ws.handler.MessageContext;
13 import org.objectweb.celtix.context.StreamMessageContext;
14 import org.objectweb.celtix.handlers.StreamHandler;
15
16 public class CompressionStreamHandler implements StreamHandler {
17
18     private static final Logger JavaDoc LOG = Logger.getLogger(CompressionStreamHandler.class.getName());
19     
20     public final boolean handleMessage(StreamMessageContext ctx) {
21         setUpStream(ctx);
22         return true;
23     }
24
25     public final boolean handleFault(StreamMessageContext ctx) {
26         setUpStream(ctx);
27         return true;
28     }
29
30     public final void init(final Map JavaDoc map) {
31         System.out.println("CompressionStreamHandler initialised");
32     }
33
34     public final void destroy() {
35     }
36
37     public final void close(MessageContext messageContext) {
38         System.out.println("CompressionStreamHandler closed");
39     }
40
41
42     private void setUpStream(StreamMessageContext ctx) {
43         if (isOutbound(ctx)) {
44             LOG.info("encrypting message stream");
45             // compress outbound messages
46
setupCompressionOutputStream(ctx);
47         } else {
48             LOG.info("decrypting message stream");
49             // decompress inbound messages
50
setupDecompressionInputStream(ctx);
51         }
52     }
53
54     private void setupDecompressionInputStream(StreamMessageContext ctx) {
55         try {
56             ctx.setInputStream(new GZIPInputStream JavaDoc(ctx.getInputStream()));
57         } catch (IOException JavaDoc ex) {
58             throw new ProtocolException(ex);
59         }
60     }
61
62     private void setupCompressionOutputStream(StreamMessageContext ctx) {
63         
64         try {
65             ctx.setOutputStream(new GZIPOutputStream JavaDoc(ctx.getOutputStream()));
66         } catch (IOException JavaDoc ex) {
67             throw new ProtocolException(ex);
68         }
69     }
70
71
72     private boolean isOutbound(MessageContext ctx) {
73         return (Boolean JavaDoc)ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
74     }
75
76 }
77
Popular Tags