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) {