Skip to content

Commit

Permalink
[fix] Close the FileInputStream on StaxProcessor
Browse files Browse the repository at this point in the history
  • Loading branch information
SIRBU Alexandru authored and davsclaus committed Jun 18, 2019
1 parent 9ab7795 commit 2893d2b
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 19 deletions.
6 changes: 5 additions & 1 deletion components/camel-stax/pom.xml
Expand Up @@ -40,8 +40,12 @@
<dependency> <dependency>
<groupId>org.apache.camel</groupId> <groupId>org.apache.camel</groupId>
<artifactId>camel-support</artifactId> <artifactId>camel-support</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>5.1.0</version>
</dependency> </dependency>

<!-- test dependencies --> <!-- test dependencies -->
<dependency> <dependency>
<groupId>org.apache.camel</groupId> <groupId>org.apache.camel</groupId>
Expand Down
Expand Up @@ -26,6 +26,8 @@
import org.apache.camel.Processor; import org.apache.camel.Processor;
import org.apache.camel.support.ExchangeHelper; import org.apache.camel.support.ExchangeHelper;


import com.ctc.wstx.sr.ValidatingStreamReader;

/** /**
* It uses SAX content handler to handle events. * It uses SAX content handler to handle events.
* <p/> * <p/>
Expand All @@ -49,25 +51,34 @@ public StAXProcessor(ContentHandler contentHandler) {


@Override @Override
public void process(Exchange exchange) throws Exception { public void process(Exchange exchange) throws Exception {
InputSource is = exchange.getIn().getMandatoryBody(InputSource.class); XMLStreamReader stream = null;
XMLStreamReader stream = exchange.getIn().getMandatoryBody(XMLStreamReader.class); try {
XMLReader reader = new StaxStreamXMLReader(stream); stream = exchange.getIn().getMandatoryBody(XMLStreamReader.class);

StaxStreamXMLReader reader = new StaxStreamXMLReader(stream);
ContentHandler handler; ContentHandler handler;
if (contentHandlerClass != null) { if (this.contentHandlerClass != null) {
handler = contentHandlerClass.newInstance(); handler = (ContentHandler) this.contentHandlerClass.newInstance();
} else { } else {
handler = contentHandler; handler = this.contentHandler;
} }
reader.setContentHandler(handler);
reader.parse(is);


if (ExchangeHelper.isOutCapable(exchange)) { reader.setContentHandler(handler);
// preserve headers // InputSource is ignored anyway
exchange.getOut().setHeaders(exchange.getIn().getHeaders()); reader.parse((InputSource) null);
exchange.getOut().setBody(handler); if (ExchangeHelper.isOutCapable(exchange)) {
} else { exchange.getOut().setHeaders(exchange.getIn().getHeaders());
exchange.getIn().setBody(handler); 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();
}
}
} }
} }


Expand Down

0 comments on commit 2893d2b

Please sign in to comment.