All pastes #136419 Raw Edit

XSLTComponent change

public text v1 · immutable
#136419 ·published 2006-08-17 17:34 UTC
rendered paste body
Index: src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java
===================================================================
--- src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java      (revision 432238)
+++ src/main/java/org/apache/servicemix/components/xslt/XsltComponent.java      (working copy)
@@ -16,13 +16,13 @@
  */
 package org.apache.servicemix.components.xslt;

-import org.apache.servicemix.MessageExchangeListener;
-import org.apache.servicemix.components.util.TransformComponentSupport;
-import org.apache.servicemix.jbi.jaxp.BytesSource;
-import org.apache.servicemix.jbi.jaxp.StringSource;
-import org.springframework.core.io.Resource;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.Iterator;

 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.MessagingException;
@@ -40,11 +40,13 @@
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;

-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.Iterator;
+import org.apache.servicemix.MessageExchangeListener;
+import org.apache.servicemix.components.util.TransformComponentSupport;
+import org.apache.servicemix.jbi.jaxp.BytesSource;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.springframework.core.io.Resource;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;

 /**
  * An <a href="http://www.w3.org/TR/xslt">XSLT</a> based JBI component using <a
@@ -55,6 +57,7 @@
  */
 public class XsltComponent extends TransformComponentSupport implements MessageExchangeListener {

+       public final static String XSLT_FILENAME_PROPERTY= "org.apache.servicemix.components.xslt.filename";
     private TransformerFactory transformerFactory;
     private Source xsltSource;
     private Resource xsltResource;
@@ -90,11 +93,11 @@
         this.transformerFactory = transformerFactory;
     }

-    public Source getXsltSource() throws IOException {
+    public Source getXsltSource(NormalizedMessage in) throws IOException {
         if (xsltSource == null) {
             // lets create a new one each time
             // as we can only read a stream once
-            return createXsltSource();
+            return createXsltSource(in);
         }
         return xsltSource;
     }
@@ -189,8 +192,20 @@
          */
     }

-    protected Source createXsltSource() throws IOException {
-        if (xsltResource != null) {
+    /**
+     * Load the XSLT from the property name called XSLT_FILENAME_PROPERTY
+     * or load it from the "resource" loaded or there is none configured
+     * which meanse that it is coming from the IoC injected SourceTransformer (hopefully)
+     *
+     * @param in NormalizedMessage may contain property XSLT_FILENAME_PROPERTY of XSLT filename
+     * @return Source transform Source
+     * @throws IOException
+     */
+    protected Source createXsltSource(NormalizedMessage in) throws IOException {
+       String xsltFileName = (String)in.getProperty(XSLT_FILENAME_PROPERTY);
+       if (xsltFileName != null && !xsltFileName.equals("")) {
+               return new StreamSource(new FileInputStream(new File(xsltFileName)));
+       } else if (xsltResource != null) {
             URL url = xsltResource.getURL();
             if (url == null) {
                 return new StreamSource(xsltResource.getInputStream());
@@ -202,9 +217,9 @@
         return null;
     }

-    public Templates getTemplates() throws IOException, TransformerConfigurationException {
+    public Templates getTemplates(NormalizedMessage in) throws IOException, TransformerConfigurationException {
         if (templates == null) {
-            templates = createTemplates();
+            templates = createTemplates(in);
         }
         return templates;
     }
@@ -212,8 +227,8 @@
     /**
      * Factory method to create a new transformer instance
      */
-    protected Templates createTemplates() throws TransformerConfigurationException, IOException {
-        Source source = getXsltSource();
+    protected Templates createTemplates(NormalizedMessage in) throws TransformerConfigurationException, IOException {
+        Source source = getXsltSource(in);
         return getTransformerFactory().newTemplates(source);
     }

@@ -222,12 +237,12 @@
      */
     protected Transformer createTransformer(MessageExchange exchange, NormalizedMessage in)
             throws TransformerConfigurationException, IOException {
-        Source source = getXsltSource();
+        Source source = getXsltSource(in);
         if (source == null) {
             return getTransformerFactory().newTransformer();
         }
         else {
-            return getTemplates().newTransformer();
+            return getTemplates(in).newTransformer();
         }
     }