You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by sa...@apache.org on 2006/01/16 06:26:15 UTC

svn commit: r369353 - in /incubator/synapse/trunk/java: ./ extensions/XSLTTransform/ src/org/apache/synapse/processors/builtin/xslt/ synapse-test-resources/tranformation/ test/org/apache/synapse/spi/processors/

Author: saminda
Date: Sun Jan 15 21:26:01 2006
New Revision: 369353

URL: http://svn.apache.org/viewcvs?rev=369353&view=rev
Log:
1. Added XSLTProcessor/Configuratior to core
2. Added XSLTProcessor test case
3. Added resources and updated maven.xml


Added:
    incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/
    incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessor.java
    incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessorConfigurator.java
    incubator/synapse/trunk/java/synapse-test-resources/tranformation/
    incubator/synapse/trunk/java/synapse-test-resources/tranformation/simple_transformation.xsl
Removed:
    incubator/synapse/trunk/java/extensions/XSLTTransform/
Modified:
    incubator/synapse/trunk/java/maven.xml
    incubator/synapse/trunk/java/test/org/apache/synapse/spi/processors/XSLTProcessorTest.java

Modified: incubator/synapse/trunk/java/maven.xml
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/maven.xml?rev=369353&r1=369352&r2=369353&view=diff
==============================================================================
--- incubator/synapse/trunk/java/maven.xml (original)
+++ incubator/synapse/trunk/java/maven.xml Sun Jan 15 21:26:01 2006
@@ -288,6 +288,29 @@
             </fileset>
         </jar>
     </goal>
+
+    <!-- ================================================================ -->
+    <!--- Create the Java Docs -->
+    <!-- ================================================================ -->
+
+    <goal name="javadocs" prereqs="init">
+        <ant:javadoc packagenames="org.apache.synapse.*"
+                     defaultexcludes="yes"
+                     destdir="target/apidocs"
+                     author="true"
+                     version="true"
+                     use="true"
+                     windowtitle="Synpase API">
+            <ant:sourcepath>
+                <ant:pathelement location="src"/>
+            </ant:sourcepath>
+            <ant:classpath>
+                <ant:fileset dir="target/lib">
+                    <ant:include name="**/*.jar"/>
+                </ant:fileset>
+            </ant:classpath>
+        </ant:javadoc>
+    </goal>
     <!-- ================================================================ -->
     <!--- Reports -->
     <!-- ================================================================ -->

Added: incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessor.java?rev=369353&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessor.java (added)
+++ incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessor.java Sun Jan 15 21:26:01 2006
@@ -0,0 +1,92 @@
+package org.apache.synapse.processors.builtin.xslt;
+
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamWriter;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.axis2.om.OMAbstractFactory;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.SynapseMessage;
+
+import org.apache.synapse.processors.AbstractProcessor;
+
+/**
+ *
+ * @see org.apache.synapse.processors.builtin.xslt.XSLTProcessorConfigurator
+ * <p> This class is the class that transforms messages using XSLT. 
+ *   
+
+ *
+ */
+public class XSLTProcessor extends AbstractProcessor {
+
+	private Transformer tran = null;
+
+	private boolean isBody = false;
+
+	public boolean process(SynapseEnvironment se, SynapseMessage smc) {
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		XMLStreamWriter xsw;
+		try {
+			xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(baos);
+
+		if (isBody) smc.getEnvelope().getBody().serialize(xsw);
+		else smc.getEnvelope().serialize(xsw);
+		
+		Source src = new StreamSource(new ByteArrayInputStream(baos.toByteArray()));
+		ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
+		StreamResult result = new StreamResult(baos2);
+		tran.transform(src, result);
+		StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(baos2.toByteArray()));
+		OMElement nw = builder.getDocumentElement();
+		if (isBody) smc.getEnvelope().setFirstChild(nw);
+		//TODO don't assume SOAP 1.1
+		else smc.setEnvelope(OMAbstractFactory.getSOAP11Factory().createSOAPEnvelope(builder));
+	
+		} catch (Exception e) {
+			throw new SynapseException(e);
+		}
+		return true;
+	}
+
+	/**
+	 * @param b
+	 * <p> If isBody is true then the XSLT is applied to the Body of the SOAP message, otherwise to the whole env
+	 */
+	public void setIsBody(boolean b) {
+		isBody  = b;
+	}
+	
+	
+	/**
+	 * @param is
+	 * <p>
+	 * This sets the correct XSL transform
+	 */
+	public void setXSLInputStream(InputStream is) {
+		try {
+			Source src = new StreamSource(is);
+			tran = TransformerFactory.newInstance().newTransformer(src);
+		} catch (Exception e) {
+			throw new SynapseException(e);
+			
+		} 
+	}
+
+}
+
+	

Added: incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessorConfigurator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessorConfigurator.java?rev=369353&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessorConfigurator.java (added)
+++ incubator/synapse/trunk/java/src/org/apache/synapse/processors/builtin/xslt/XSLTProcessorConfigurator.java Sun Jan 15 21:26:01 2006
@@ -0,0 +1,57 @@
+package org.apache.synapse.processors.builtin.xslt;
+
+import java.io.InputStream;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.om.OMAttribute;
+import org.apache.axis2.om.OMElement;
+import org.apache.synapse.xml.Constants;
+import org.apache.synapse.Processor;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseException;
+
+
+
+import org.apache.synapse.xml.AbstractProcessorConfigurator;
+
+
+
+/**
+ *
+ * @see org.apache.synapse.processors.builtin.xslt.XSLTProcessor
+ * <p> This class configures the XSLT transformer 
+ * <p> The tag looks like this
+ * <xmp><xslt name="x" xsl="file.xsl" type="body|envelope"/></xmp>
+ *  Perform the given XSLT on the SOAP-Envelope or Body 
+ *  <p>If type is not present, assumed to be body
+ */
+public class XSLTProcessorConfigurator extends AbstractProcessorConfigurator {
+	private static final QName tagName = new QName(Constants.SYNAPSE_NAMESPACE, "xslt");
+	
+	public Processor createProcessor(SynapseEnvironment se, OMElement el) {
+		XSLTProcessor xp = new XSLTProcessor();
+		super.setNameOnProcessor(se,el,xp);
+		
+		OMAttribute type = el.getAttribute(new QName("type"));
+		if (type != null && type.getAttributeValue().trim().toLowerCase().equals("envelope")) xp.setIsBody(false); 
+		else xp.setIsBody(true);
+		
+		OMAttribute xsl = el.getAttribute(new QName("xsl"));
+		if (xsl == null) throw new SynapseException("no xsl attribute on: "+el.toString());
+		
+		InputStream xslStream =  se.getClassLoader().getResourceAsStream(xsl.getAttributeValue());
+		xp.setXSLInputStream(xslStream);
+		
+		return xp;
+		
+		
+		
+	}
+
+	public QName getTagQName() {
+		
+		return tagName;
+	}
+
+}

Added: incubator/synapse/trunk/java/synapse-test-resources/tranformation/simple_transformation.xsl
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/synapse-test-resources/tranformation/simple_transformation.xsl?rev=369353&view=auto
==============================================================================
--- incubator/synapse/trunk/java/synapse-test-resources/tranformation/simple_transformation.xsl (added)
+++ incubator/synapse/trunk/java/synapse-test-resources/tranformation/simple_transformation.xsl Sun Jan 15 21:26:01 2006
@@ -0,0 +1,8 @@
+<xsl:stylesheet version='1.0'
+                xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+    <xsl:template match="/">
+        <transformedText>
+            <xsl:value-of select="//text"/>
+        </transformedText>
+    </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file

Modified: incubator/synapse/trunk/java/test/org/apache/synapse/spi/processors/XSLTProcessorTest.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/test/org/apache/synapse/spi/processors/XSLTProcessorTest.java?rev=369353&r1=369352&r2=369353&view=diff
==============================================================================
--- incubator/synapse/trunk/java/test/org/apache/synapse/spi/processors/XSLTProcessorTest.java (original)
+++ incubator/synapse/trunk/java/test/org/apache/synapse/spi/processors/XSLTProcessorTest.java Sun Jan 15 21:26:01 2006
@@ -1,6 +1,12 @@
 package org.apache.synapse.spi.processors;
 
 import junit.framework.TestCase;
+import org.apache.synapse.SynapseMessage;
+import org.apache.synapse.processors.builtin.xslt.XSLTProcessor;
+import org.apache.synapse.util.Axis2EvnSetup;
+import org.apache.synapse.axis2.Axis2SynapseMessage;
+
+import java.io.ByteArrayInputStream;
 /*
 * Copyright 2004,2005 The Apache Software Foundation.
 *
@@ -19,7 +25,23 @@
 */
 
 public class XSLTProcessorTest extends TestCase {
+    private String xsl = "<xsl:stylesheet version='1.0'\n" +
+            "                xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>\n" +
+            "    <xsl:template match=\"/\">\n" +
+            "        <transformedText>\n" +
+            "            <xsl:value-of select=\"//text\"/>\n" +
+            "            <xsl:text>Test Being Transformed</xsl:text>" +
+            "        </transformedText>\n" +
+            "    </xsl:template>\n" +
+            "</xsl:stylesheet>";
+
     public void testXSLTProcessor() throws Exception {
-        //todo;
+        SynapseMessage sm = new Axis2SynapseMessage(
+                Axis2EvnSetup.axis2Deployment("target/synapse-repository"));
+        XSLTProcessor pro = new XSLTProcessor();
+        pro.setXSLInputStream(new ByteArrayInputStream(xsl.getBytes()));
+        pro.setIsBody(true);
+        boolean result = pro.process(null, sm);
+        assertTrue(result);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org