You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/01/21 17:21:08 UTC

svn commit: r613922 - in /servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src: main/java/org/apache/servicemix/saxon/ test/java/org/apache/servicemix/saxon/ test/resources/

Author: gnodet
Date: Mon Jan 21 08:21:07 2008
New Revision: 613922

URL: http://svn.apache.org/viewvc?rev=613922&view=rev
Log:
SM-1200: Problems using document('') inside xslt, depending on the source type

Added:
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/codes.xml
      - copied unchanged from r613920, servicemix/smx3/trunk/deployables/serviceengines/servicemix-saxon/src/test/resources/codes.xml
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/doc-call.xsl
      - copied unchanged from r613920, servicemix/smx3/trunk/deployables/serviceengines/servicemix-saxon/src/test/resources/doc-call.xsl
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/request.xml
      - copied unchanged from r613920, servicemix/smx3/trunk/deployables/serviceengines/servicemix-saxon/src/test/resources/request.xml
Modified:
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java
    servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/SaxonEndpoint.java Mon Jan 21 08:21:07 2008
@@ -268,7 +268,7 @@
     protected Document parse(Resource res) throws Exception {
         URL url = null;
         try {
-            res.getURL();
+            url = res.getURL();
         } catch (IOException e) {
             // Ignore
         }

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/main/java/org/apache/servicemix/saxon/XsltEndpoint.java Mon Jan 21 08:21:07 2008
@@ -18,6 +18,7 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.StringWriter;
+import java.net.URL;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -32,9 +33,9 @@
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
 
 import net.sf.saxon.TransformerFactoryImpl;
-
 import org.apache.servicemix.jbi.jaxp.BytesSource;
 import org.apache.servicemix.jbi.jaxp.StringSource;
 import org.springframework.core.io.Resource;
@@ -47,6 +48,8 @@
     private TransformerFactory transformerFactory;
     private Source xsltSource;
     private Templates templates;
+    private boolean useDomSourceForXslt = true;
+    private Boolean useDomSourceForContent;
     
     public TransformerFactory getTransformerFactory() {
         if (transformerFactory == null) {
@@ -59,6 +62,22 @@
         this.transformerFactory = transformerFactory;
     }
 
+    public boolean isUseDomSourceForXslt() {
+        return useDomSourceForXslt;
+    }
+
+    public void setUseDomSourceForXslt(boolean useDomSourceForXslt) {
+        this.useDomSourceForXslt = useDomSourceForXslt;
+    }
+
+    public Boolean getUseDomSourceForContent() {
+        return useDomSourceForContent;
+    }
+
+    public void setUseDomSourceForContent(Boolean useDomSourceForContent) {
+        this.useDomSourceForContent = useDomSourceForContent;
+    }
+
     public void validate() throws DeploymentException {
         if (xsltSource == null && getResource() == null && getExpression() == null) {
             throw new DeploymentException("xsltSource, resource or expression must be specified");
@@ -77,8 +96,14 @@
     protected void transformContent(Transformer transformer, MessageExchange exchange, 
             NormalizedMessage in, NormalizedMessage out) throws Exception {
         Source src = in.getContent();
-        if (src instanceof DOMSource) {
+        if (useDomSourceForContent != null && useDomSourceForContent.booleanValue()) {
             src = new DOMSource(getSourceTransformer().toDOMDocument(src));
+        } else if (useDomSourceForContent != null && !useDomSourceForContent.booleanValue()) {
+            src = getSourceTransformer().toStreamSource(src);
+        } else {
+            if (src instanceof DOMSource) {
+                src = new DOMSource(getSourceTransformer().toDOMDocument(src));
+            }
         }
         if (RESULT_BYTES.equalsIgnoreCase(getResult())) {
             ByteArrayOutputStream buffer = new ByteArrayOutputStream();
@@ -105,7 +130,17 @@
     }
 
     protected Source createXsltSource(Resource res) throws Exception {
-        return new DOMSource(parse(res));
+        if (useDomSourceForXslt) {
+            String url = null;
+            try {
+                url = res.getURL().toURI().toString();
+            } catch (Exception e) {
+                // Ignore
+            }
+            return new DOMSource(parse(res), url);
+        } else {
+            return new StreamSource(res.getInputStream());
+        }
     }
 
     public Templates getTemplates() throws Exception {

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/java/org/apache/servicemix/saxon/SaxonComponentTest.java Mon Jan 21 08:21:07 2008
@@ -35,6 +35,7 @@
 import org.apache.servicemix.tck.SpringTestSupport;
 import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
 import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.core.io.ClassPathResource;
 
 public class SaxonComponentTest extends SpringTestSupport {
     private static transient Log log = LogFactory.getLog(SaxonComponentTest.class);
@@ -113,6 +114,27 @@
         me.setService(new QName("urn:test", "xslt-params"));
         me.getInMessage().setContent(new StringSource("<sample id='777888' sent='"
                 + new Date() + "'>hello world!</sample>"));
+        client.sendSync(me);
+        if (me.getStatus() == ExchangeStatus.ERROR) {
+            if (me.getError() != null) {
+                throw me.getError();
+            } else {
+                fail("Received ERROR status");
+            }
+        } else if (me.getFault() != null) {
+            fail("Received fault: " + new SourceTransformer().toString(me.getFault().getContent()));
+        }
+        log.info(transformer.toString(me.getOutMessage().getContent()));
+        Element el = transformer.toDOMElement(me.getOutMessage());
+        assertEquals("cheeseyCheese", textValueOfXPath(el, "//param"));
+        assertEquals("4002", textValueOfXPath(el, "//integer"));
+    }
+
+    public void testXsltWithDocCall() throws Exception {
+        DefaultServiceMixClient client = new DefaultServiceMixClient(jbi);
+        InOut me = client.createInOutExchange();
+        me.setService(new QName("urn:test", "xslt-doccall"));
+        me.getInMessage().setContent(new StreamSource(getClass().getClassLoader().getResourceAsStream("request.xml")));
         client.sendSync(me);
         if (me.getStatus() == ExchangeStatus.ERROR) {
             if (me.getError() != null) {

Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml?rev=613922&r1=613921&r2=613922&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-saxon/src/test/resources/spring.xml Mon Jan 21 08:21:07 2008
@@ -37,8 +37,8 @@
       	      
       	      <!-- START SNIPPET: xslt-params --> 
       	      <saxon:xslt service="test:xslt-params" endpoint="endpoint"
-      	        resource="classpath:parameter-test.xsl">
-      	        <property name="parameters">
+      	        resource="classpath:parameter-test.xsl">
+      	        <property name="parameters">
       	          <map>
       	            <entry key="stringParam" value="cheeseyCheese"/>
       	            <entry key="integerParam">
@@ -47,21 +47,27 @@
       	              </bean>
       	            </entry>
       	          </map>
-      	        </property>
+      	        </property>
       	      </saxon:xslt>
       	      <!-- END SNIPPET: xslt-params --> 
       	      
       	      <!-- START SNIPPET: xslt-dynamic -->
       	      <saxon:xslt service="test:xslt-dynamic" endpoint="endpoint">
-      	        <saxon:expression>
-      	          <bean class="org.apache.servicemix.expression.PropertyExpression">
-      	            <property name="property" value="xslt.source" />
-      	          </bean>
+      	        <saxon:expression>
+      	          <bean class="org.apache.servicemix.expression.PropertyExpression">
+      	            <property name="property" value="xslt.source" />
+      	          </bean>
       	        </saxon:expression>
       	      </saxon:xslt>
       	      <!-- END SNIPPET: xslt-dynamic -->
-      	      
-      	      <!-- START SNIPPET: xquery --> 
+
+              <saxon:xslt service="test:xslt-doccall" endpoint="endpoint"
+                          resource="classpath:doc-call.xsl"
+                          useDomSourceForXslt="true"
+                          useDomSourceForContent="false"
+                          result="bytes" />
+
+              <!-- START SNIPPET: xquery -->
       	      <saxon:xquery service="test:xquery" endpoint="endpoint"
       	                    resource="classpath:query.xq" />
       	      <!-- END SNIPPET: xquery --> 
@@ -70,12 +76,12 @@
       	      <saxon:xquery service="test:xquery-inline" endpoint="endpoint">
       	        <!-- CDATA are not supported currently -->
       	        <saxon:query>
-                  for $x in /bookstore/book
-                  where $x/price > 30
+                  for $x in /bookstore/book
+                  where $x/price > 30
                   return $x/title
       	        </saxon:query>
-      	        <saxon:outputProperties>
-      	          <saxon:property key="{http://saxon.sf.net/}wrap-result-sequence">yes</saxon:property>
+      	        <saxon:outputProperties>
+      	          <saxon:property key="{http://saxon.sf.net/}wrap-result-sequence">yes</saxon:property>
       	        </saxon:outputProperties>
       	      </saxon:xquery>
       	      <!-- END SNIPPET: xquery-inline -->