1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.support;
14
15 import java.io.ByteArrayInputStream;
16 import java.io.ByteArrayOutputStream;
17 import java.io.IOException;
18 import java.util.zip.GZIPInputStream;
19 import java.util.zip.GZIPOutputStream;
20
21 import sun.misc.BASE64Decoder;
22 import sun.misc.BASE64Encoder;
23
24 import com.eviware.soapui.SoapUI;
25 import com.eviware.soapui.config.CompressedStringConfig;
26 import com.eviware.soapui.settings.WsdlSettings;
27 import com.eviware.soapui.support.Tools;
28
29 /***
30 * Utility class for compressing/decompressing strings stored with CompressedString
31 *
32 * @author ole.matzura
33 */
34
35 public class CompressedStringSupport
36 {
37 public static String getString( CompressedStringConfig compressedStringConfig )
38 {
39 String compression = compressedStringConfig.getCompression();
40 if( "gzip".equals( compression ))
41 {
42 try
43 {
44 BASE64Decoder decoder = new BASE64Decoder();
45 byte[] bytes = decoder.decodeBuffer( compressedStringConfig.getStringValue() );
46 GZIPInputStream in = new GZIPInputStream( new ByteArrayInputStream( bytes ));
47 return Tools.readAll( in, -1 ).toString();
48 }
49 catch( IOException e )
50 {
51 SoapUI.logError( e );
52 }
53 }
54
55 return compressedStringConfig.getStringValue();
56 }
57
58 public static void setString( CompressedStringConfig compressedStringConfig, String value )
59 {
60 long limit = SoapUI.getSettings().getLong( WsdlSettings.COMPRESSION_LIMIT, 0 );
61 if( limit > 0 && value.length() >= limit )
62 {
63 try
64 {
65 ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
66 GZIPOutputStream out = new GZIPOutputStream( byteOut );
67 out.write( value.getBytes() );
68 out.finish();
69 BASE64Encoder encoder = new BASE64Encoder();
70 value = encoder.encode( byteOut.toByteArray() );
71 compressedStringConfig.setCompression( "gzip" );
72 }
73 catch( IOException e )
74 {
75 SoapUI.logError( e );
76 compressedStringConfig.unsetCompression();
77 }
78 }
79 else if( compressedStringConfig.isSetCompression() )
80 {
81 compressedStringConfig.unsetCompression();
82 }
83
84 compressedStringConfig.setStringValue( value );
85 }
86 }