You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/11/13 05:04:48 UTC
[camel] 02/02: CAMEL-14126: camel-stax - Make sure to close input
stream which can help on windows etc.
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 40e7ee28f2be6407c180ba354d5f2266d6d37347
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Nov 13 06:04:25 2019 +0100
CAMEL-14126: camel-stax - Make sure to close input stream which can help on windows etc.
---
.../component/stax/StAXJAXBIteratorExpression.java | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java
index 62f1fb4..11af16a 100644
--- a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java
+++ b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java
@@ -35,6 +35,7 @@ import org.apache.camel.InvalidPayloadException;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.support.ExpressionAdapter;
import org.apache.camel.support.LRUCacheFactory;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import static org.apache.camel.component.stax.StAXUtil.getTagName;
@@ -115,9 +116,10 @@ public class StAXJAXBIteratorExpression<T> extends ExpressionAdapter {
@SuppressWarnings("unchecked")
public Object evaluate(Exchange exchange) {
try {
+ InputStream inputStream = null;
XMLEventReader reader = exchange.getContext().getTypeConverter().tryConvertTo(XMLEventReader.class, exchange, exchange.getIn().getBody());
if (reader == null) {
- InputStream inputStream = exchange.getIn().getMandatoryBody(InputStream.class);
+ inputStream = exchange.getIn().getMandatoryBody(InputStream.class);
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, isNamespaceAware);
reader = xmlInputFactory.createXMLEventReader(inputStream);
@@ -127,7 +129,7 @@ public class StAXJAXBIteratorExpression<T> extends ExpressionAdapter {
if (clazz == null && handledName != null) {
clazz = (Class<T>) exchange.getContext().getClassResolver().resolveMandatoryClass(handledName);
}
- return createIterator(reader, clazz);
+ return createIterator(reader, clazz, inputStream);
} catch (InvalidPayloadException e) {
exchange.setException(e);
return null;
@@ -143,8 +145,8 @@ public class StAXJAXBIteratorExpression<T> extends ExpressionAdapter {
}
}
- private Iterator<T> createIterator(XMLEventReader reader, Class<T> clazz) throws JAXBException {
- return new StAXJAXBIterator<>(clazz, reader);
+ private Iterator<T> createIterator(XMLEventReader reader, Class<T> clazz, InputStream inputStream) throws JAXBException {
+ return new StAXJAXBIterator<>(clazz, reader, inputStream);
}
/**
@@ -153,14 +155,16 @@ public class StAXJAXBIteratorExpression<T> extends ExpressionAdapter {
static class StAXJAXBIterator<T> implements Iterator<T>, Closeable {
private final XMLEventReader reader;
+ private final InputStream inputStream;
private final Class<T> clazz;
private final String name;
private final Unmarshaller unmarshaller;
private T element;
- StAXJAXBIterator(Class<T> clazz, XMLEventReader reader) throws JAXBException {
+ StAXJAXBIterator(Class<T> clazz, XMLEventReader reader, InputStream inputStream) throws JAXBException {
this.clazz = clazz;
this.reader = reader;
+ this.inputStream = inputStream;
name = getTagName(clazz);
JAXBContext jaxb = jaxbContext(clazz);
@@ -221,6 +225,9 @@ public class StAXJAXBIteratorExpression<T> extends ExpressionAdapter {
@Override
public void close() throws IOException {
+ if (inputStream != null) {
+ IOHelper.close(inputStream);
+ }
try {
reader.close();
} catch (XMLStreamException e) {