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 2021/03/23 07:59:56 UTC
[camel] 05/05: CAMEL-13374: XMLTokenizer should detect and use
encoding/charset from input xml instead of exchange charset.
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 e7926586383412d1049bb559d10947f58f73dedb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Mar 23 08:58:48 2021 +0100
CAMEL-13374: XMLTokenizer should detect and use encoding/charset from input xml instead of exchange charset.
---
core/camel-xml-jaxp/pom.xml | 4 ++++
.../language/xtokenizer/XMLTokenExpressionIterator.java | 15 ++++++++++-----
.../xtokenizer/XMLTokenExpressionIteratorTest.java | 2 +-
3 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/core/camel-xml-jaxp/pom.xml b/core/camel-xml-jaxp/pom.xml
index f077163..0b1ef1d 100644
--- a/core/camel-xml-jaxp/pom.xml
+++ b/core/camel-xml-jaxp/pom.xml
@@ -43,6 +43,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-support</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-xml-io-util</artifactId>
+ </dependency>
<!-- testing -->
<dependency>
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
index 335d731..bc98e27 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
@@ -40,14 +40,13 @@ import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import org.apache.camel.Exchange;
-import org.apache.camel.InvalidPayloadException;
import org.apache.camel.converter.jaxp.StaxConverter;
import org.apache.camel.spi.NamespaceAware;
-import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.ExpressionAdapter;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
+import org.apache.camel.xml.io.util.XmlStreamReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -112,6 +111,11 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
return createIterator(new InputStreamReader(in, charset));
}
+ protected Iterator<?> createIterator(InputStream in)
+ throws XMLStreamException, IOException {
+ return createIterator(new XmlStreamReader(in));
+ }
+
protected Iterator<?> createIterator(Reader in) throws XMLStreamException {
return new XMLTokenIterator(path, nsmap, mode, group, in);
}
@@ -145,11 +149,12 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
reader = new StringReader(val);
} else {
InputStream in = exchange.getIn().getMandatoryBody(InputStream.class);
- String charset = ExchangeHelper.getCharsetName(exchange);
- reader = new InputStreamReader(in, charset);
+ // use xml stream reader which is capable of handling reading the xml stream
+ // according to <xml encoding> charset
+ reader = new XmlStreamReader(in);
}
return createIterator(reader);
- } catch (InvalidPayloadException | XMLStreamException | UnsupportedEncodingException e) {
+ } catch (Exception e) {
exchange.setException(e);
// must close input stream
IOHelper.close(reader);
diff --git a/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java b/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
index 3b3236f..d1ae99d 100644
--- a/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
+++ b/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
@@ -436,7 +436,7 @@ public class XMLTokenExpressionIteratorTest {
XMLTokenExpressionIterator xtei = new XMLTokenExpressionIterator(path, mode);
xtei.setNamespaces(nsmap);
- Iterator<?> it = xtei.createIterator(in, "utf-8");
+ Iterator<?> it = xtei.createIterator(in);
List<String> results = new ArrayList<>();
while (it.hasNext()) {
results.add((String) it.next());