1 package demo.streams.common; 2 3 4 5 6 import java.io.IOException ; 7 import java.util.Map ; 8 import java.util.logging.Logger ; 9 import java.util.zip.GZIPInputStream ; 10 import java.util.zip.GZIPOutputStream ; 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 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 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 setupCompressionOutputStream(ctx); 47 } else { 48 LOG.info("decrypting message stream"); 49 setupDecompressionInputStream(ctx); 51 } 52 } 53 54 private void setupDecompressionInputStream(StreamMessageContext ctx) { 55 try { 56 ctx.setInputStream(new GZIPInputStream (ctx.getInputStream())); 57 } catch (IOException ex) { 58 throw new ProtocolException(ex); 59 } 60 } 61 62 private void setupCompressionOutputStream(StreamMessageContext ctx) { 63 64 try { 65 ctx.setOutputStream(new GZIPOutputStream (ctx.getOutputStream())); 66 } catch (IOException ex) { 67 throw new ProtocolException(ex); 68 } 69 } 70 71 72 private boolean isOutbound(MessageContext ctx) { 73 return (Boolean )ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 74 } 75 76 } 77 | Popular Tags |