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 2011/10/25 15:23:23 UTC
svn commit: r1188647 - in /camel/branches/camel-2.8.x: ./
camel-core/src/main/java/org/apache/camel/builder/xml/
components/camel-spring/src/test/java/org/apache/camel/component/xslt/
components/camel-spring/src/test/resources/org/apache/camel/componen...
Author: davsclaus
Date: Tue Oct 25 13:23:22 2011
New Revision: 1188647
URL: http://svn.apache.org/viewvc?rev=1188647&view=rev
Log:
CAMEL-4579: Added option allowStAX to XSLT component.
Added:
camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
- copied, changed from r1188642, camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java
camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.xml
- copied, changed from r1188642, camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml
Modified:
camel/branches/camel-2.8.x/ (props changed)
camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Oct 25 13:23:22 2011
@@ -1 +1 @@
-/camel/trunk:1186106,1186625,1186772,1187221,1187485,1187882,1187893,1188070-1188085
+/camel/trunk:1186106,1186625,1186772,1187221,1187485,1187882,1187893,1188070-1188085,1188642
Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=1188647&r1=1188646&r2=1188647&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java (original)
+++ camel/branches/camel-2.8.x/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java Tue Oct 25 13:23:22 2011
@@ -32,6 +32,8 @@ import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
@@ -46,6 +48,8 @@ import org.apache.camel.impl.Synchroniza
import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.IOHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static org.apache.camel.util.ObjectHelper.notNull;
@@ -59,6 +63,7 @@ import static org.apache.camel.util.Obje
* @version
*/
public class XsltBuilder implements Processor {
+ private final static Logger LOG = LoggerFactory.getLogger(XsltBuilder.class);
private Map<String, Object> parameters = new HashMap<String, Object>();
private XmlConverter converter = new XmlConverter();
private Templates template;
@@ -67,6 +72,7 @@ public class XsltBuilder implements Proc
private URIResolver uriResolver;
private boolean deleteOutputFile;
private ErrorListener errorListener = new XsltErrorListener();
+ private boolean allowStAX;
public XsltBuilder() {
}
@@ -104,7 +110,9 @@ public class XsltBuilder implements Proc
try {
is = exchange.getIn().getBody(InputStream.class);
Source source = getSource(exchange, is);
+ LOG.trace("Using {} as source", source);
transformer.transform(source, result);
+ LOG.trace("Transform complete with result {}", result);
resultHandler.setBody(out);
} finally {
IOHelper.close(is);
@@ -211,6 +219,16 @@ public class XsltBuilder implements Proc
return this;
}
+ /**
+ * Enables to allow using StAX.
+ * <p/>
+ * When enabled StAX is preferred as the first choice as {@link Source}.
+ */
+ public XsltBuilder allowStAX() {
+ setAllowStAX(true);
+ return this;
+ }
+
// Properties
// -------------------------------------------------------------------------
@@ -246,6 +264,14 @@ public class XsltBuilder implements Proc
this.resultHandlerFactory = resultHandlerFactory;
}
+ public boolean isAllowStAX() {
+ return allowStAX;
+ }
+
+ public void setAllowStAX(boolean allowStAX) {
+ this.allowStAX = allowStAX;
+ }
+
/**
* Sets the XSLT transformer from a Source
*
@@ -333,16 +359,32 @@ public class XsltBuilder implements Proc
/**
* Converts the inbound stream to a {@link Source}.
* <p/>
- * This implementation will prefer StAX first, and fallback to other kinds of Source types.
+ * This implementation will prefer to source in the following order:
+ * <ul>
+ * <li>StAX - Is StAX is allowed</li>
+ * <li>SAX - SAX as 2nd choice</li>
+ * <li>Stream - Stream as 3rd choice</li>
+ * <li>DOM - DOM as 4th choice</li>
+ * </ul>
*/
protected Source getSource(Exchange exchange, InputStream is) {
- // try StAX first
- Source source = exchange.getContext().getTypeConverter().convertTo(StAXSource.class, exchange, is);
- if (source == null) {
- // fallback and try other kind of source
+ Source source = null;
+ if (isAllowStAX()) {
source = exchange.getContext().getTypeConverter().convertTo(StAXSource.class, exchange, is);
}
if (source == null) {
+ // then try SAX
+ source = exchange.getContext().getTypeConverter().convertTo(SAXSource.class, exchange, is);
+ }
+ if (source == null) {
+ // then try stream
+ source = exchange.getContext().getTypeConverter().convertTo(StreamSource.class, exchange, is);
+ }
+ if (source == null) {
+ // and fallback to DOM
+ source = exchange.getContext().getTypeConverter().convertTo(DOMSource.class, exchange, is);
+ }
+ if (source == null) {
if (isFailOnNullBody()) {
throw new ExpectedBodyTypeException(exchange, Source.class);
} else {
@@ -383,6 +425,7 @@ public class XsltBuilder implements Proc
String key = entry.getKey();
Object value = entry.getValue();
if (value != null) {
+ LOG.trace("Transformer set parameter {} -> {}", key, value);
transformer.setParameter(key, value);
}
}
Copied: camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java (from r1188642, camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java?p2=camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java&p1=camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java&r1=1188642&r2=1188647&rev=1188647&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java (original)
+++ camel/branches/camel-2.8.x/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java Tue Oct 25 13:23:22 2011
@@ -27,7 +27,7 @@ import org.springframework.context.suppo
/**
* @version
*/
-public class XsltRouteTest extends SpringTestSupport {
+public class XsltRouteAllowStAXTest extends SpringTestSupport {
public void testSendMessageAndHaveItTransformed() throws Exception {
MockEndpoint endpoint = getMockEndpoint("mock:result");
@@ -58,6 +58,6 @@ public class XsltRouteTest extends Sprin
}
protected AbstractXmlApplicationContext createApplicationContext() {
- return new ClassPathXmlApplicationContext("org/apache/camel/component/xslt/camelContext.xml");
+ return new ClassPathXmlApplicationContext("org/apache/camel/component/xslt/XsltRouteAllowStAXTest.xml");
}
}
Copied: camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.xml (from r1188642, camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml)
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.xml?p2=camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.xml&p1=camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml&r1=1188642&r2=1188647&rev=1188647&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/camelContext.xml (original)
+++ camel/branches/camel-2.8.x/components/camel-spring/src/test/resources/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.xml Tue Oct 25 13:23:22 2011
@@ -26,7 +26,7 @@
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
- <to uri="xslt:org/apache/camel/component/xslt/transform.xsl"/>
+ <to uri="xslt:org/apache/camel/component/xslt/transform.xsl?allowStAX=true"/>
<multicast>
<bean ref="testBean"/>
<to uri="mock:result"/>