You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/01/03 08:24:24 UTC

[2/2] git commit: CAMEL-7100 Fixed the Scaner close issue in JDK7

CAMEL-7100 Fixed the Scaner close issue in JDK7

Conflicts:
	camel-core/src/test/java/org/apache/camel/processor/SplitterWithScannerIoExceptionTest.java


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/12f1adf2
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/12f1adf2
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/12f1adf2

Branch: refs/heads/camel-2.11.x
Commit: 12f1adf203517505ce4cd6461615540f0c02dab5
Parents: 1c06089
Author: Willem Jiang <wi...@gmail.com>
Authored: Fri Jan 3 14:24:34 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Jan 3 15:23:55 2014 +0800

----------------------------------------------------------------------
 .../org/apache/camel/processor/Splitter.java    | 11 +++++----
 .../org/apache/camel/util/GroupIterator.java    | 26 +++++++++++++-------
 .../java/org/apache/camel/util/IOHelper.java    | 17 +++++++++++++
 .../SplitterWithScannerIoExceptionTest.java     |  4 +--
 4 files changed, 42 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/12f1adf2/camel-core/src/main/java/org/apache/camel/processor/Splitter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/Splitter.java b/camel-core/src/main/java/org/apache/camel/processor/Splitter.java
index 8c9e69f..0bef536 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/Splitter.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/Splitter.java
@@ -192,19 +192,20 @@ public class Splitter extends MulticastProcessor implements AsyncProcessor, Trac
 
         @Override
         public void close() throws IOException {
-            if (value instanceof Closeable) {
-                IOHelper.close((Closeable) value, value.getClass().getName(), LOG);
-            } else if (value instanceof Scanner) {
-                // special for Scanner as it does not implement Closeable
+            if (value instanceof Scanner) {
+                // special for Scanner which implement the Closeable since JDK7 
                 Scanner scanner = (Scanner) value;
                 scanner.close();
-
                 IOException ioException = scanner.ioException();
                 if (ioException != null) {
                     throw ioException;
                 }
+            } else if (value instanceof Closeable) {
+                // we should throw out the exception here   
+                IOHelper.closeWithException((Closeable) value);
             }
         }
+       
     }
 
     private Iterable<ProcessorExchangePair> createProcessorExchangePairsList(Exchange exchange, Object value) {

http://git-wip-us.apache.org/repos/asf/camel/blob/12f1adf2/camel-core/src/main/java/org/apache/camel/util/GroupIterator.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/GroupIterator.java b/camel-core/src/main/java/org/apache/camel/util/GroupIterator.java
index 95a5a1e..158dbed 100644
--- a/camel-core/src/main/java/org/apache/camel/util/GroupIterator.java
+++ b/camel-core/src/main/java/org/apache/camel/util/GroupIterator.java
@@ -65,16 +65,24 @@ public final class GroupIterator implements Iterator<Object>, Closeable {
 
     @Override
     public void close() throws IOException {
-        if (it instanceof Closeable) {
-            IOHelper.close((Closeable) it);
-        } else if (it instanceof Scanner) {
-            // special for Scanner as it does not implement Closeable
-            ((Scanner) it).close();
+        try {
+            if (it instanceof Scanner) {
+                // special for Scanner which implement the Closeable since JDK7 
+                Scanner scanner = (Scanner) it;
+                scanner.close();
+                IOException ioException = scanner.ioException();
+                if (ioException != null) {
+                    throw ioException;
+                }
+            } else if (it instanceof Closeable) {
+                IOHelper.closeWithException((Closeable) it);
+            }
+        } finally {
+            // close the buffer as well
+            bos.close();
+            // we are now closed
+            closed = true;
         }
-        // close the buffer as well
-        bos.close();
-        // we are now closed
-        closed = true;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/12f1adf2/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/IOHelper.java b/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
index e2fdfaf..d5fa300 100644
--- a/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/util/IOHelper.java
@@ -310,6 +310,23 @@ public final class IOHelper {
             }
         }
     }
+    
+    /**
+     * Closes the given resource if it is available and don't catch the exception
+     *
+     * @param closeable the object to close
+     * @throws IOException
+      */
+    public static void closeWithException(Closeable closeable) throws IOException {
+        if (closeable != null) {
+            try {
+                closeable.close();
+            } catch (IOException e) {
+                // don't catch the exception here
+                throw e;
+            }
+        }
+    }
 
     /**
      * Closes the given channel if it is available, logging any closing exceptions to the given log.

http://git-wip-us.apache.org/repos/asf/camel/blob/12f1adf2/camel-core/src/test/java/org/apache/camel/processor/SplitterWithScannerIoExceptionTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/SplitterWithScannerIoExceptionTest.java b/camel-core/src/test/java/org/apache/camel/processor/SplitterWithScannerIoExceptionTest.java
index a4e1d00..e158413 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/SplitterWithScannerIoExceptionTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/SplitterWithScannerIoExceptionTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.builder.RouteBuilder;
 public class SplitterWithScannerIoExceptionTest extends ContextTestSupport {
 
     public void testSplitterStreamingWithError() throws Exception {
-        if (isJavaVersion("1.7")) {
+        if (isPlatform("aix") || isJavaVendor("ibm")) {
             return;
         }
 
@@ -50,4 +50,4 @@ public class SplitterWithScannerIoExceptionTest extends ContextTestSupport {
             }
         };
     }
-}
\ No newline at end of file
+}