Yeah, this StaxSource.java is really helpful. My original thought is setup SAXParserFactory to create a security safe XMLReader and then create SAXSource from it. With the help of StaxSource, it saves me lots of time ;)
-- Willem Jiang Red Hat, Inc. Web: http://www.redhat.com Blog: http://willemjiang.blogspot.com(http://willemjiang.blogspot.com/) (English) http://jnn.iteye.com(http://jnn.javaeye.com/) (Chinese) Twitter: willemjiang Weibo: 姜宁willem On January 23, 2014 at 11:09:56 AM, Daniel Kulp (dk...@apache.org) wrote: > > > On Jan 22, 2014, at 9:55 PM, Willem Jiang > wrote: > > > Hi Dan, > > > > You are right, I did some test (by running the example inside > Karaf) and confirmed Xalan 2.7.1 doesn’t support StaxSource. > I will keep digging the code to find a better solution for it. > > You may want to try grabbing the StaxSource.java class from CXF > and try that. It subclasses SAXSource, but uses Stax so you get > the benefits of Stax, but uses the SAX XMLReader to allow it to > work with parsers that don’t understand Stax. > > Dan > > > > > > Regards, > > > > -- > > Willem Jiang > > > > Red Hat, Inc. > > Web: http://www.redhat.com > > Blog: http://willemjiang.blogspot.com(http://willemjiang.blogspot.com/) > (English) > > http://jnn.iteye.com(http://jnn.javaeye.com/) (Chinese) > > Twitter: willemjiang > > Weibo: 姜宁willem > > > > > > > > On January 22, 2014 at 9:21:03 PM, Daniel Kulp (dk...@apache.org) > wrote: > >> > >> > >> Willem, > >> > >> Can you try these changes with Xalan 2.7.1 on the class path? > Possibly > >> in OSGi with the Xalan 2.7.1 bundle? > >> > >> I don’t think Xalan actually supports StaxSource. I believe > >> the in-jdk transformer does, but Xalan doesn’t. It would be > good > >> to double check and then see if we can detect it and provide a > work > >> around if there is a problem. > >> > >> Dan > >> > >> > >> On Jan 22, 2014, at 2:57 AM, ningji...@apache.org wrote: > >> > >>> Updated Branches: > >>> refs/heads/master 9bedde2ca -> cc192f87b > >>> > >>> > >>> CAMEL-7130 XsltBuilder uses the StaxSource by default > >>> > >>> > >>> Project: http://git-wip-us.apache.org/repos/asf/camel/repo > >>> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cc192f87 > >>> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cc192f87 > >>> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cc192f87 > >>> > >>> Branch: refs/heads/master > >>> Commit: cc192f87b7c4a43c6cff0646486384c9946e2ac9 > >>> Parents: 9bedde2 > >>> Author: Willem Jiang > >>> Authored: Wed Jan 22 15:57:23 2014 +0800 > >>> Committer: Willem Jiang > >>> Committed: Wed Jan 22 15:57:23 2014 +0800 > >>> > >>> ---------------------------------------------------------------------- > >>> .../apache/camel/builder/xml/XsltBuilder.java | 3 --- > >>> .../camel/component/xslt/XsltDTDTest.java | 20 ++++++++++++++++-- > >>> .../camel/component/xslt/SaxonXsltDTDTest.java | 22 > ++++++++++++++++++-- > >>> 3 files changed, 38 insertions(+), 7 deletions(-) > >>> ---------------------------------------------------------------------- > >>> > >>> > >>> http://git-wip-us.apache.org/repos/asf/camel/blob/cc192f87/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java > >>> > >>> ---------------------------------------------------------------------- > >>> diff --git > >>> a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java > >> b/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java > >>> index 3a7b9a4..d4291b2 100644 > >>> --- > >>> a/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java > >>> +++ > >>> b/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java > >>> @@ -452,9 +452,6 @@ public class XsltBuilder implements > Processor > >> { > >>> return (Source) body; > >>> } > >>> Source source = null; > >>> - if (body instanceof InputStream) { > >>> - return new StreamSource((InputStream)body); > >>> - } > >>> if (body != null) { > >>> if (isAllowStAX()) { > >>> source = > >>> exchange.getContext().getTypeConverter().tryConvertTo(StAXSource.class, > >> exchange, body); > >>> > >>> http://git-wip-us.apache.org/repos/asf/camel/blob/cc192f87/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java > >>> > >>> ---------------------------------------------------------------------- > >>> diff --git > >>> a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java > >>> > >> b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java > >> > >>> index b66d62d..db5d63c 100644 > >>> --- > >>> a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java > >>> > >>> +++ > >>> b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltDTDTest.java > >>> > >>> @@ -16,6 +16,7 @@ > >>> */ > >>> package org.apache.camel.component.xslt; > >>> > >>> +import java.io.InputStream; > >>> import java.util.List; > >>> > >>> import javax.xml.transform.TransformerException; > >>> @@ -25,15 +26,28 @@ import org.apache.camel.ContextTestSupport; > >>> import org.apache.camel.Exchange; > >>> import org.apache.camel.builder.RouteBuilder; > >>> import org.apache.camel.component.mock.MockEndpoint; > >>> +import org.apache.camel.converter.IOConverter; > >>> +import org.apache.camel.impl.DefaultExchange; > >>> > >>> > >>> public class XsltDTDTest extends ContextTestSupport { > >>> + private static final String MESSAGE = > >>> + "]>&xxe;"; > >>> > >>> - public void testSendEntityMessage() throws Exception > { > >>> + public void testSendingStringMessage() throws Exception > >> { > >>> + sendEntityMessage(MESSAGE); > >>> + } > >>> + > >>> + public void testSendingInputStreamMessage() throws > Exception > >> { > >>> + InputStream is = IOConverter.toInputStream(MESSAGE, > new > >> DefaultExchange(context)); > >>> + sendEntityMessage(is); > >>> + } > >>> + > >>> + private void sendEntityMessage(Object message) throws > >> Exception { > >>> > >>> MockEndpoint endpoint = getMockEndpoint("mock:result"); > >>> + endpoint.reset(); > >>> endpoint.expectedMessageCount(1); > >>> - String message = "]>&xxe;"; > >>> > >>> template.sendBody("direct:start1", message); > >>> > >>> @@ -44,6 +58,8 @@ public class XsltDTDTest extends ContextTestSupport > >> { > >>> String xml = exchange.getIn().getBody(String.class); > >>> assertTrue("Get a wrong transformed message", xml.indexOf("> > subject=\"\">") > 0); > >>> > >>> + > >>> + > >>> try { > >>> template.sendBody("direct:start2", message); > >>> fail("Expect an exception here"); > >>> > >>> http://git-wip-us.apache.org/repos/asf/camel/blob/cc192f87/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java > >>> > >>> ---------------------------------------------------------------------- > >>> diff --git > >>> a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java > >>> > >> b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java > >> > >>> index 30802ff..b826608 100644 > >>> --- > >>> a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java > >>> > >>> +++ > >>> b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java > >>> > >>> @@ -16,6 +16,7 @@ > >>> */ > >>> package org.apache.camel.component.xslt; > >>> > >>> +import java.io.InputStream; > >>> import java.util.List; > >>> > >>> import javax.xml.transform.TransformerException; > >>> @@ -24,18 +25,33 @@ import org.apache.camel.CamelExecutionException; > >>> import org.apache.camel.Exchange; > >>> import org.apache.camel.builder.RouteBuilder; > >>> import org.apache.camel.component.mock.MockEndpoint; > >>> +import org.apache.camel.converter.IOConverter; > >>> +import org.apache.camel.impl.DefaultExchange; > >>> import org.apache.camel.test.junit4.CamelTestSupport; > >>> import org.junit.Test; > >>> > >>> > >>> public class SaxonXsltDTDTest extends CamelTestSupport > >> { > >>> > >>> + private static final String MESSAGE = > >>> + "]>&xxe;"; > >>> + > >>> + @Test > >>> + public void testSendingStringMessage() throws Exception > >> { > >>> + sendEntityMessage(MESSAGE); > >>> + } > >>> + > >>> @Test > >>> - public void testSendEntityMessage() throws Exception > { > >>> + public void testSendingInputStreamMessage() throws > Exception > >> { > >>> + InputStream is = IOConverter.toInputStream(MESSAGE, > new > >> DefaultExchange(context)); > >>> + sendEntityMessage(is); > >>> + } > >>> + > >>> + private void sendEntityMessage(Object message) throws > >> Exception { > >>> > >>> MockEndpoint endpoint = getMockEndpoint("mock:result"); > >>> + endpoint.reset(); > >>> endpoint.expectedMessageCount(1); > >>> - String message = "]>&xxe;"; > >>> > >>> template.sendBody("direct:start1", message); > >>> > >>> @@ -46,6 +62,8 @@ public class SaxonXsltDTDTest extends > CamelTestSupport > >> { > >>> String xml = exchange.getIn().getBody(String.class); > >>> assertTrue("Get a wrong transformed message", xml.indexOf("> > subject=\"\">") > 0); > >>> > >>> + > >>> + > >>> try { > >>> template.sendBody("direct:start2", message); > >>> fail("Expect an exception here"); > >>> > >> > >> -- > >> Daniel Kulp > >> dk...@apache.org - http://dankulp.com/blog > >> Talend Community Coder - http://coders.talend.com > > -- > Daniel Kulp > dk...@apache.org - http://dankulp.com/blog > Talend Community Coder - http://coders.talend.com > >