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