Author: davsclaus
Date: Tue Oct 25 13:06:49 2011
New Revision: 1188642

URL: http://svn.apache.org/viewvc?rev=1188642&view=rev
Log:
CAMEL-4579: Added option allowStAX to XSLT component.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
      - copied, changed from r1188579, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java?rev=1188642&r1=1188641&r2=1188642&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XsltBuilder.java
 Tue Oct 25 13:06:49 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.support.Synchron
 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/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
 (from r1188579, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java&r1=1188579&r2=1188642&rev=1188642&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/xslt/XsltRouteAllowStAXTest.java
 Tue Oct 25 13:06:49 2011
@@ -16,43 +16,12 @@
  */
 package org.apache.camel.component.xslt;
 
-import java.util.List;
-
-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.impl.JndiRegistry;
 
 /**
  *
  */
-public class XsltRouteTest extends ContextTestSupport {
-
-    public void testSendMessageAndHaveItTransformed() throws Exception {
-        MockEndpoint endpoint = getMockEndpoint("mock:result");
-        endpoint.expectedMessageCount(1);
-
-        template.sendBody("direct:start",
-                "<mail><subject>Hey</subject><body>Hello 
world!</body></mail>");
-
-        assertMockEndpointsSatisfied();
-
-        List<Exchange> list = endpoint.getReceivedExchanges();
-        Exchange exchange = list.get(0);
-        String xml = exchange.getIn().getBody(String.class);
-
-        assertNotNull("The transformed XML should not be null", xml);
-        assertTrue(xml.indexOf("transformed") > -1);
-        // the cheese tag is in the transform.xsl
-        assertTrue(xml.indexOf("cheese") > -1);
-        assertTrue(xml.indexOf("<subject>Hey</subject>") > -1);
-        assertTrue(xml.indexOf("<body>Hello world!</body>") > -1);
-
-        TestBean bean = context.getRegistry().lookup("testBean", 
TestBean.class);
-        assertNotNull(bean);
-        assertEquals("bean.subject", "Hey", bean.getSubject());
-    }
+public class XsltRouteAllowStAXTest extends XsltRouteTest {
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -60,7 +29,7 @@ public class XsltRouteTest extends Conte
             @Override
             public void configure() throws Exception {
                 from("direct:start")
-                    .to("xslt:org/apache/camel/component/xslt/transform.xsl")
+                    
.to("xslt:org/apache/camel/component/xslt/transform.xsl?allowStAX=true")
                     .multicast()
                         .beanRef("testBean")
                         .to("mock:result");
@@ -68,11 +37,4 @@ public class XsltRouteTest extends Conte
         };
     }
 
-    @Override
-    protected JndiRegistry createRegistry() throws Exception {
-        JndiRegistry jndi = super.createRegistry();
-        jndi.bind("testBean", new TestBean());
-        return jndi;
-    }
-
 }


Reply via email to