cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ningji...@apache.org
Subject svn commit: r981508 - in /cxf/trunk: api/src/main/java/org/apache/cxf/io/ common/common/src/main/java/org/apache/cxf/helpers/ rt/core/src/main/java/org/apache/cxf/interceptor/
Date Mon, 02 Aug 2010 13:51:38 GMT
Author: ningjiang
Date: Mon Aug  2 13:51:38 2010
New Revision: 981508

URL: http://svn.apache.org/viewvc?rev=981508&view=rev
Log:
CXF-2923 Logging{In|Out}Intererceptor should check the encoding before writing the log

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java
    cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java?rev=981508&r1=981507&r2=981508&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/io/CachedOutputStream.java Mon Aug  2 13:51:38
2010
@@ -279,7 +279,12 @@ public class CachedOutputStream extends 
             IOUtils.copyAndCloseInput(fin, out);
         }
     }
+    
     public void writeCacheTo(StringBuilder out, int limit) throws IOException {
+        writeCacheTo(out, "UTF-8", limit);
+    }
+    
+    public void writeCacheTo(StringBuilder out, String charsetName, int limit) throws IOException
{
         flush();
         if (totalLength < limit
             || limit == -1) {
@@ -291,7 +296,7 @@ public class CachedOutputStream extends 
         if (inmem) {
             if (currentStream instanceof ByteArrayOutputStream) {
                 byte bytes[] = ((ByteArrayOutputStream)currentStream).toByteArray();
-                out.append(IOUtils.newStringFromBytes(bytes, 0, limit));
+                out.append(IOUtils.newStringFromBytes(bytes, charsetName, 0, limit));
             } else {
                 throw new IOException("Unknown format of currentStream");
             }
@@ -304,7 +309,7 @@ public class CachedOutputStream extends 
                 if ((count + x) > limit) {
                     x = limit - count;
                 }
-                out.append(IOUtils.newStringFromBytes(bytes, 0, x));
+                out.append(IOUtils.newStringFromBytes(bytes, charsetName, 0, x));
                 count += x;
 
                 if (count >= limit) {
@@ -316,12 +321,17 @@ public class CachedOutputStream extends 
             fin.close();
         }
     }
+    
     public void writeCacheTo(StringBuilder out) throws IOException {
+        writeCacheTo(out, "UTF-8");
+    }
+    
+    public void writeCacheTo(StringBuilder out, String charsetName) throws IOException {
         flush();
         if (inmem) {
             if (currentStream instanceof ByteArrayOutputStream) {
                 byte[] bytes = ((ByteArrayOutputStream)currentStream).toByteArray();
-                out.append(IOUtils.newStringFromBytes(bytes));
+                out.append(IOUtils.newStringFromBytes(bytes, charsetName));
             } else {
                 throw new IOException("Unknown format of currentStream");
             }
@@ -331,7 +341,7 @@ public class CachedOutputStream extends 
             byte bytes[] = new byte[1024];
             int x = fin.read(bytes);
             while (x != -1) {
-                out.append(IOUtils.newStringFromBytes(bytes, 0, x));
+                out.append(IOUtils.newStringFromBytes(bytes, charsetName, 0, x));
                 x = fin.read(bytes);
             }
             fin.close();

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java?rev=981508&r1=981507&r2=981508&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/helpers/IOUtils.java Mon Aug  2 13:51:38
2010
@@ -38,38 +38,65 @@ public final class IOUtils {
     }
     
     /**
-     * Use this function instead of new String(byte[]) to avoid surprises from non-standard
default encodings.
+     * Use this function instead of new String(byte[], String) to avoid surprises from 
+     * non-standard default encodings.
      * @param bytes
+     * @param charsetName
      * @return
      */
-    public static String newStringFromBytes(byte[] bytes) {
+    public static String newStringFromBytes(byte[] bytes, String charsetName) {
         try {
-            return new String(bytes, UTF8_CHARSET.name());
+            return new String(bytes, charsetName);
         } catch (UnsupportedEncodingException e) {
             throw 
-                new RuntimeException("Impossible failure: Charset.forName(\"utf-8\") returns
invalid name.");
+                new RuntimeException("Impossible failure: Charset.forName(\""
+                                     + charsetName + "\") returns invalid name.");
 
         }
     }
-
+    
+    
     /**
-     * Use this function instead of new String(byte[], int, int) 
+     * Use this function instead of new String(byte[]) to avoid surprises from non-standard
default encodings.
+     * @param bytes
+     * @return
+     */
+    public static String newStringFromBytes(byte[] bytes) {
+        return newStringFromBytes(bytes, UTF8_CHARSET.name());        
+    }
+    
+    /**
+     * Use this function instead of new String(byte[], int, int, String) 
      * to avoid surprises from non-standard default encodings.
      * @param bytes
+     * @param charsetName
      * @param start
      * @param length
      * @return
      */
-    public static String newStringFromBytes(byte[] bytes, int start, int length) {
+    public static String newStringFromBytes(byte[] bytes, String charsetName, int start,
int length) {
         try {
-            return new String(bytes, start, length, UTF8_CHARSET.name());
+            return new String(bytes, start, length, charsetName);
         } catch (UnsupportedEncodingException e) {
             throw 
-                new RuntimeException("Impossible failure: Charset.forName(\"utf-8\") returns
invalid name.");
+                new RuntimeException("Impossible failure: Charset.forName(\""
+                                     + charsetName + "\") returns invalid name.");
 
         }
     }
 
+    /**
+     * Use this function instead of new String(byte[], int, int) 
+     * to avoid surprises from non-standard default encodings.
+     * @param bytes
+     * @param start
+     * @param length
+     * @return
+     */
+    public static String newStringFromBytes(byte[] bytes, int start, int length) {
+        return newStringFromBytes(bytes, UTF8_CHARSET.name(), start, length);
+    }
+
     public static int copy(final InputStream input, final OutputStream output)
         throws IOException {
         return copy(input, output, DEFAULT_BUFFER_SIZE);

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java?rev=981508&r1=981507&r2=981508&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java Mon
Aug  2 13:51:38 2010
@@ -24,6 +24,7 @@ import java.io.PrintWriter;
 import java.util.logging.Level;
 
 import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.message.Message;
@@ -116,7 +117,11 @@ public class LoggingInInterceptor extend
                 if (bos.size() > limit) {
                     buffer.getMessage().append("(message truncated to " + limit + " bytes)\n");
                 }
-                bos.writeCacheTo(buffer.getPayload(), limit);
+                if (StringUtils.isEmpty(encoding)) {
+                    bos.writeCacheTo(buffer.getPayload(), limit);
+                } else {
+                    bos.writeCacheTo(buffer.getPayload(), encoding, limit);
+                }
                     
                 bos.close();
             } catch (IOException e) {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java?rev=981508&r1=981507&r2=981508&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
(original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java
Mon Aug  2 13:51:38 2010
@@ -24,6 +24,7 @@ import java.io.PrintWriter;
 import java.util.logging.Level;
 
 import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.io.CacheAndWriteOutputStream;
 import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.io.CachedOutputStreamCallback;
@@ -133,7 +134,11 @@ public class LoggingOutInterceptor exten
                 }
             }
             try {
-                cos.writeCacheTo(buffer.getPayload(), limit);
+                if (StringUtils.isEmpty(encoding)) {
+                    cos.writeCacheTo(buffer.getPayload(), limit);
+                } else {                    
+                    cos.writeCacheTo(buffer.getPayload(), encoding, limit);
+                }
             } catch (Exception ex) {
                 //ignore
             }



Mime
View raw message