This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 2893d2bc96a7bdb0fb388607d05edb0081900154
Author: SIRBU Alexandru <alexandru-externe.si...@enedis.fr>
AuthorDate: Wed Mar 27 18:26:22 2019 +0100

    [fix] Close the FileInputStream on StaxProcessor
---
 components/camel-stax/pom.xml                      |  6 ++-
 .../apache/camel/component/stax/StAXProcessor.java | 47 +++++++++++++---------
 2 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/components/camel-stax/pom.xml b/components/camel-stax/pom.xml
index 4c8f199..6fd1b60 100644
--- a/components/camel-stax/pom.xml
+++ b/components/camel-stax/pom.xml
@@ -40,8 +40,12 @@
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
+        </dependency>          
+        <dependency>
+            <groupId>com.fasterxml.woodstox</groupId>
+            <artifactId>woodstox-core</artifactId>
+            <version>5.1.0</version>
         </dependency>
-
         <!-- test dependencies -->
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git 
a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
 
b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
index 641a873..f401bd6 100644
--- 
a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
+++ 
b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
@@ -26,6 +26,8 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.ExchangeHelper;
 
+import com.ctc.wstx.sr.ValidatingStreamReader;
+
 /**
  * It uses SAX content handler to handle events.
  * <p/>
@@ -49,25 +51,34 @@ public class StAXProcessor implements Processor {
 
     @Override
     public void process(Exchange exchange) throws Exception {
-        InputSource is = exchange.getIn().getMandatoryBody(InputSource.class);
-        XMLStreamReader stream = 
exchange.getIn().getMandatoryBody(XMLStreamReader.class);
-        XMLReader reader = new StaxStreamXMLReader(stream);
-
-        ContentHandler handler;
-        if (contentHandlerClass != null) {
-            handler = contentHandlerClass.newInstance();
-        } else {
-            handler = contentHandler;
-        }
-        reader.setContentHandler(handler);
-        reader.parse(is);
+        XMLStreamReader stream = null;
+        try {
+            stream = exchange.getIn().getMandatoryBody(XMLStreamReader.class);
+            StaxStreamXMLReader reader = new StaxStreamXMLReader(stream);
+            ContentHandler handler;
+            if (this.contentHandlerClass != null) {
+                handler = (ContentHandler) 
this.contentHandlerClass.newInstance();
+            } else {
+                handler = this.contentHandler;
+            }
 
-        if (ExchangeHelper.isOutCapable(exchange)) {
-            // preserve headers
-            exchange.getOut().setHeaders(exchange.getIn().getHeaders());
-            exchange.getOut().setBody(handler);
-        } else {
-            exchange.getIn().setBody(handler);
+            reader.setContentHandler(handler);
+            // InputSource is ignored anyway
+            reader.parse((InputSource) null);
+            if (ExchangeHelper.isOutCapable(exchange)) {
+                exchange.getOut().setHeaders(exchange.getIn().getHeaders());
+                exchange.getOut().setBody(handler);
+            } else {
+                exchange.getIn().setBody(handler);
+            }
+        } finally {
+            if (stream != null) {
+                stream.close();
+                if (stream instanceof ValidatingStreamReader) {
+                    // didn't find any method without using the woodstox 
package
+                    ((ValidatingStreamReader) stream).closeCompletely();
+                }
+            }
         }
     }
 

Reply via email to