Author: mriou
Date: Thu Nov  6 15:09:59 2008
New Revision: 712005

URL: http://svn.apache.org/viewvc?rev=712005&view=rev
Log:
ODE-408 BPEL process operating large data runs very slowly

Modified:
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
    
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java?rev=712005&r1=712004&r2=712005&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
 Thu Nov  6 15:09:59 2008
@@ -48,9 +48,7 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
 import java.io.IOException;
-import java.io.StringWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -359,35 +357,17 @@
             varDoc.appendChild(varDoc.importNode(varElmt, true));
 
             DOMSource source = new DOMSource(varDoc);
-            // Using a StreamResult as a DOMResult doesn't behaves properly 
when the result
-            // of the transformation is just a string.
-            StringWriter writerResult = new StringWriter();
-            StreamResult result = new StreamResult(writerResult);
+            Object result;
             XslRuntimeUriResolver resolver = new 
XslRuntimeUriResolver(_oxpath, _xpathEvalCtx.getBaseResourceURI());
             XslTransformHandler.getInstance().cacheXSLSheet(xslUri, 
xslSheet.sheetBody, resolver);
             try {
-                XslTransformHandler.getInstance().transform(xslUri, source, 
result, parametersMap, resolver);
+               result = XslTransformHandler.getInstance().transform(xslUri, 
source, parametersMap, resolver);
             } catch (Exception e) {
                 throw new WrappedFaultException.JaxenFunctionException(
                         new 
FaultException(_oxpath.getOwner().constants.qnSubLanguageExecutionFault,
                                 e.toString()));
             }
-            writerResult.flush();
-
-            String output = writerResult.toString();
-            // I'm not really proud of that but hey, it does the job and I 
don't think there's
-            // any other easy way.
-            if (output.startsWith("<?xml")) {
-                try {
-                    return DOMUtils.stringToDOM(writerResult.toString());
-                } catch (SAXException e) {
-                    throw new FunctionCallException(e);
-                } catch (IOException e) {
-                    throw new FunctionCallException(e);
-                }
-            } else {
-                return output;
-            }
+            return result;
         }
     }
 

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java?rev=712005&r1=712004&r2=712005&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
 Thu Nov  6 15:09:59 2008
@@ -20,7 +20,6 @@
 package org.apache.ode.bpel.elang.xpath20.runtime;
 
 import java.io.IOException;
-import java.io.StringWriter;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -33,7 +32,6 @@
 import javax.xml.namespace.QName;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
 import javax.xml.xpath.XPathFunction;
 import javax.xml.xpath.XPathFunctionException;
 import javax.xml.xpath.XPathFunctionResolver;
@@ -287,42 +285,20 @@
             varDoc.appendChild(varDoc.importNode(varElmt, true));
 
             DOMSource source = new DOMSource(varDoc);
-            // Using a StreamResult as a DOMResult doesn't behaves properly 
when the result
-            // of the transformation is just a string.
-            StringWriter writerResult = new StringWriter();
-            StreamResult result = new StreamResult(writerResult);
+            Object result;
             XslRuntimeUriResolver resolver = new 
XslRuntimeUriResolver(_oxpath, _ectx.getBaseResourceURI());
             XslTransformHandler.getInstance().cacheXSLSheet(xslUri, 
xslSheet.sheetBody, resolver);
             try {
-                XslTransformHandler.getInstance().transform(xslUri, source, 
result, parametersMap, resolver);
+                result = XslTransformHandler.getInstance().transform(xslUri, 
source, parametersMap, resolver);
             } catch (Exception e) {
                 e.printStackTrace();
                 throw new XPathFunctionException(
                         new 
FaultException(_oxpath.getOwner().constants.qnSubLanguageExecutionFault,
                                 e.toString()));
             }
-            writerResult.flush();
-
-            String output = writerResult.toString();
-            if (__log.isDebugEnabled())
-                __log.debug("Returned by XSL Sheet: " + output);
-            // I'm not really proud of that but hey, it does the job and I 
don't think there's
-            // any other easy way.
-            if (output.startsWith("<?xml")) {
-                try {
-                    return DOMUtils.stringToDOM(output).getChildNodes();
-                } catch (SAXException e) {
-                    throw new XPathFunctionException("Parsing the result of 
the XSL sheet " + args.get(0) +
-                            " didn't produce a parsable XML result: " + 
output);
-                } catch (IOException e) {
-                    throw new XPathFunctionException(e);
-                } catch (Exception e) {
-                    throw new XPathFunctionException("Parsing the result of 
the XSL sheet " + args.get(0) +
-                            " didn't produce a parsable XML result: " + 
output);
-                }
-            } else {
-                return output;
-            }
+            if(result instanceof Node)
+               return ((Node)result).getChildNodes();
+            return result;
         }
     }
     

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java?rev=712005&r1=712004&r2=712005&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ScopeFrame.java
 Thu Nov  6 15:09:59 2008
@@ -246,7 +246,8 @@
 
     Node writeVariable(BpelRuntimeContext context, VariableInstance var, Node 
value) throws ExternalVariableModuleException {
         if (var.declaration.extVar != null) /* external variable */ {
-            __log.debug("Write external variable: name="+var.declaration + " 
value="+DOMUtils.domToString(value));
+               if(__log.isDebugEnabled())
+                       __log.debug("Write external variable: 
name="+var.declaration + " value="+DOMUtils.domToString(value));
             VariableInstance related = resolve(var.declaration.extVar.related);
             Node reference = null;
             try {
@@ -259,7 +260,8 @@
             writeVariable(context, related, vrp.reference);
             return vrp.value;
         } else /* normal variable */ {
-            __log.debug("Write variable: name="+var.declaration + " 
value="+DOMUtils.domToString(value));
+               if(__log.isDebugEnabled())
+                       __log.debug("Write variable: name="+var.declaration + " 
value="+DOMUtils.domToString(value));
             return context.writeVariable(var, value);
         }
     }

Modified: 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java?rev=712005&r1=712004&r2=712005&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/xsl/XslTransformHandler.java
 Thu Nov  6 15:09:59 2008
@@ -29,12 +29,18 @@
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.URIResolver;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.w3c.dom.Node;
+import org.w3c.dom.Document;
+
 /**
  * Singleton wrapping the basic <code>javax.xml.transform</code> operations. 
The
  * transformation is then delegated to a Transformer. Supports both XSL 1.0 
and XSL 2.0
@@ -111,11 +117,11 @@
    * by the provided URI. The stylesheet MUST have been parsed previously.
    * @param uri referencing the stylesheet
    * @param source XML document
-   * @param result of the transformation (XSL, HTML or text depending of the 
output method specified in stylesheet
    * @param parameters passed to the stylesheet
    * @param resolver used to resolve includes and imports
+   * @return result of the transformation (XSL, HTML or text depending of the 
output method specified in stylesheet.
    */
-  public void transform(URI uri, Source source, Result result,
+  public Object transform(URI uri, Source source,
                         Map<QName, Object> parameters, URIResolver resolver) {
     Templates tm;
     synchronized (_templateCache) {
@@ -131,7 +137,21 @@
           tf.setParameter(param.getKey().getLocalPart(), param.getValue());
         }
       }
-      tf.transform(source, result);
+      String method = tf.getOutputProperties().getProperty("method");
+      if(method.equals("xml") || method.equals("html")) {
+         DOMResult result = new DOMResult();
+         tf.transform(source, result);
+         Node node = result.getNode();
+         if(node.getNodeType() == Node.DOCUMENT_NODE)
+                 node = ((Document)node).getDocumentElement();
+         return node;
+      } else {
+          StringWriter writerResult = new StringWriter();
+          StreamResult result = new StreamResult(writerResult);
+         tf.transform(source, result);
+          writerResult.flush();
+          return writerResult.toString();
+      }
     } catch (TransformerConfigurationException e) {
       throw new XslTransformException(e);
     } catch (TransformerException e) {


Reply via email to