You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ve...@apache.org on 2008/06/17 22:19:47 UTC

svn commit: r668815 - in /synapse/trunk/java/modules/core/src: main/java/org/apache/synapse/mediators/transform/ test/java/org/apache/synapse/ test/java/org/apache/synapse/mediators/transform/ test/resources/org/ test/resources/org/apache/ test/resourc...

Author: veithen
Date: Tue Jun 17 13:19:46 2008
New Revision: 668815

URL: http://svn.apache.org/viewvc?rev=668815&view=rev
Log:
SYNAPSE-307:
* Resolved the issue by setting an appropriate ErrorListener on the TransformerFactory.
* Added a unit test.

Added:
    synapse/trunk/java/modules/core/src/test/resources/org/
    synapse/trunk/java/modules/core/src/test/resources/org/apache/
    synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/
    synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/
    synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/transform/
    synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/transform/invalid.xslt
Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContextBuilder.java
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java?rev=668815&r1=668814&r2=668815&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java Tue Jun 17 13:19:46 2008
@@ -207,6 +207,27 @@
         boolean isSoapEnvelope = (sourceNode == synCtx.getEnvelope());
         boolean isSoapBody = (sourceNode == synCtx.getEnvelope().getBody());
 
+        ErrorListener errorListener = new ErrorListener() {
+
+            public void warning(TransformerException e) throws TransformerException {
+
+                if (traceOrDebugOn) {
+                    traceOrDebugWarn(
+                            traceOn, "Warning encountered during transformation : " + e);
+                }
+            }
+            
+            public void error(TransformerException e) throws TransformerException {
+                log.error("Error occured in XSLT transformation : " + e);
+                throw e;
+            }
+            
+            public void fatalError(TransformerException e) throws TransformerException {
+                log.error("Fatal error occured in the XSLT transformation : " + e);
+                throw e;
+            }
+        };
+
         if (traceOrDebugOn) {
             trace.trace("Transformation source : " + sourceNode.toString());
         }
@@ -265,6 +286,8 @@
 
         synchronized (transformerLock) {
             if (reCreate || cachedTemplates == null) {
+                // Set an error listener (SYNAPSE-307).
+                transFact.setErrorListener(errorListener);
                 try {
                     cachedTemplates = transFact.newTemplates(
                         SynapseConfigUtils.getStreamSource(synCtx.getEntry(xsltKey)));
@@ -295,26 +318,7 @@
                 }
             }
 
-            transformer.setErrorListener(new ErrorListener() {
-
-                public void warning(TransformerException e) throws TransformerException {
-
-                    if (traceOrDebugOn) {
-                        traceOrDebugWarn(
-                                traceOn, "Warning encountered during transformation : " + e);
-                    }
-                }
-                
-                public void error(TransformerException e) throws TransformerException {
-                    log.error("Error occured in XSLT transformation : " + e);
-                    throw e;
-                }
-                
-                public void fatalError(TransformerException e) throws TransformerException {
-                    log.error("Fatal error occured in the XSLT transformation : " + e);
-                    throw e;
-                }
-            });
+            transformer.setErrorListener(errorListener);
             
             transformer.transform(transformSrc, transformTgt);
 

Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContextBuilder.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContextBuilder.java?rev=668815&r1=668814&r2=668815&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContextBuilder.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/TestMessageContextBuilder.java Tue Jun 17 13:19:46 2008
@@ -23,6 +23,7 @@
 import java.io.FileInputStream;
 import java.io.StringReader;
 import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -82,14 +83,18 @@
         return this;
     }
     
-    public TestMessageContextBuilder addFileEntry(String key, String path) throws MalformedURLException {
+    public TestMessageContextBuilder addEntry(String key, URL url) {
         Entry entry = new Entry();
         entry.setType(Entry.URL_SRC);
-        entry.setSrc(new File(path).toURL());
+        entry.setSrc(url);
         entries.put(key, entry);
         return this;
     }
     
+    public TestMessageContextBuilder addFileEntry(String key, String path) throws MalformedURLException {
+        return addEntry(key, new File(path).toURL());
+    }
+    
     /**
      * Build the test message context.
      * This method returns a new (and independent) instance on every invocation.

Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java?rev=668815&r1=668814&r2=668815&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/mediators/transform/XSLTMediatorTest.java Tue Jun 17 13:19:46 2008
@@ -25,6 +25,7 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNode;
 import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseException;
 import org.apache.synapse.TestMessageContextBuilder;
 import org.apache.synapse.transport.base.BaseConstants;
 import org.apache.synapse.util.xpath.SynapseXPath;
@@ -237,4 +238,22 @@
         assertEquals(BaseConstants.DEFAULT_TEXT_WRAPPER, resultElement.getQName());
         assertEquals("\u00e0 peine arriv\u00e9s nous entr\u00e2mes dans sa chambre", resultElement.getText());
     }
+    
+    // Test for SYNAPSE-307
+    public void testInvalidStylesheet() throws Exception {
+        transformMediator = new XSLTMediator();
+        transformMediator.setXsltKey("xslt-key");
+        
+        MessageContext mc = new TestMessageContextBuilder()
+            .addEntry("xslt-key", getClass().getResource("invalid.xslt"))
+            .setBodyFromString("<root/>")
+            .build();
+        
+        try {
+            transformMediator.mediate(mc);
+            fail("Expected a SynapseException to be thrown");
+        } catch (SynapseException ex) {
+            // this is what is expected
+        }
+    }
 }

Added: synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/transform/invalid.xslt
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/transform/invalid.xslt?rev=668815&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/transform/invalid.xslt (added)
+++ synapse/trunk/java/modules/core/src/test/resources/org/apache/synapse/mediators/transform/invalid.xslt Tue Jun 17 13:19:46 2008
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~  Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing,
+  ~  software distributed under the License is distributed on an
+  ~   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~  KIND, either express or implied.  See the License for the
+  ~  specific language governing permissions and limitations
+  ~  under the License.
+  -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+    <xsl:template match="root">
+        <root>
+            <xsl:non-existing-tag/>
+        </root>
+    </xsl:template>
+</xsl:stylesheet>