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);
}