You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ve...@apache.org on 2009/06/05 12:16:25 UTC

svn commit: r781972 - in /webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter: CharsetDecoderFilter.java Pipeline.java ReadOnlyStream.java Stream.java

Author: veithen
Date: Fri Jun  5 10:16:25 2009
New Revision: 781972

URL: http://svn.apache.org/viewvc?rev=781972&view=rev
Log:
CharsetDecoderFilter: Don't throw exception for malformed input.

Modified:
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/CharsetDecoderFilter.java
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Pipeline.java
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/ReadOnlyStream.java
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Stream.java

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/CharsetDecoderFilter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/CharsetDecoderFilter.java?rev=781972&r1=781971&r2=781972&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/CharsetDecoderFilter.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/CharsetDecoderFilter.java Fri Jun  5 10:16:25 2009
@@ -32,6 +32,8 @@
     private final CharsetDecoder decoder;
     private final ByteBuffer inBuffer = ByteBuffer.allocate(64);
     private final CharBuffer outBuffer = CharBuffer.allocate(64);
+    private int errorCount;
+    private boolean reportErrors = true;
 
     public CharsetDecoderFilter(Writer writer, Charset charset) {
         this.writer = writer;
@@ -49,7 +51,26 @@
             inBuffer.flip();
             coderResult = decoder.decode(inBuffer, outBuffer, stream.isEndOfStream());
             if (coderResult.isError()) {
-                throw new StreamException("Character set encoding error");
+                errorCount++;
+                if (reportErrors) {
+                    if (errorCount > 5) {
+                        stream.error("Too many input errors; stop reporting.");
+                        reportErrors = false;
+                    } else {
+                        StringBuffer buffer = new StringBuffer();
+                        buffer.append("Malformed input for charset ");
+                        buffer.append(decoder.charset().name());
+                        buffer.append(':');
+                        for (int i=0; i<coderResult.length(); i++) {
+                            buffer.append(' ');
+                            buffer.append(Integer.toHexString(inBuffer.get() & 0xFF));
+                        }
+                        stream.error(buffer.toString());
+                    }
+                }
+                if (!reportErrors) {
+                    inBuffer.position(inBuffer.position() + coderResult.length());
+                }
             }
             outBuffer.flip();
             try {

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Pipeline.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Pipeline.java?rev=781972&r1=781971&r2=781972&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Pipeline.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Pipeline.java Fri Jun  5 10:16:25 2009
@@ -315,6 +315,11 @@
             flushOutput(false);
             nested = nested.next == next ? null : nested.next;
         }
+
+        public void error(String description) {
+            // TODO: for the moment, just to a System.out.println; we should report errors in the UI
+            System.out.println("Non fatal error in filter " + filter.getClass().getName() + ": " + description);
+        }
     }
     
     private class OutputStreamImpl extends OutputStream {

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/ReadOnlyStream.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/ReadOnlyStream.java?rev=781972&r1=781971&r2=781972&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/ReadOnlyStream.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/ReadOnlyStream.java Fri Jun  5 10:16:25 2009
@@ -96,4 +96,8 @@
     public void popFilter() {
         parent.popFilter();
     }
+
+    public void error(String description) {
+        parent.error(description);
+    }
 }

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Stream.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Stream.java?rev=781972&r1=781971&r2=781972&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Stream.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/Stream.java Fri Jun  5 10:16:25 2009
@@ -178,4 +178,6 @@
     void pushFilter(StreamFilter filter);
     
     void popFilter();
+    
+    void error(String description);
 }