You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2010/12/06 17:01:36 UTC

svn commit: r1042692 - in /ode/trunk/bpel-runtime/src: main/java/org/apache/ode/bpel/elang/xpath20/runtime/ main/java/org/apache/ode/bpel/elang/xquery10/runtime/ test/java/org/apache/ode/bpel/elang/xpath20/runtime/

Author: vanto
Date: Mon Dec  6 16:01:36 2010
New Revision: 1042692

URL: http://svn.apache.org/viewvc?rev=1042692&view=rev
Log:
ODE-876: performance improvements, thanks to Mateusz Nowakowski!

Modified:
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java
    ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java?rev=1042692&r1=1042691&r2=1042692&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpFunctionResolver.java Mon Dec  6 16:01:36 2010
@@ -82,7 +82,9 @@ public class JaxpFunctionResolver implem
     }
 
     public XPathFunction resolveFunction(QName functionName, int arity) {
-        __log.debug("Resolving function " + functionName);
+        if (__log.isDebugEnabled()) {
+            __log.debug("Resolving function " + functionName);
+        }
         if (functionName.getNamespaceURI() == null) {
             throw new NullPointerException("Undeclared namespace for " + functionName);
         } else if (functionName.getNamespaceURI().equals(Namespaces.WS_BPEL_20_NS) ||

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java?rev=1042692&r1=1042691&r2=1042692&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/JaxpVariableResolver.java Mon Dec  6 16:01:36 2010
@@ -19,13 +19,10 @@
 
 package org.apache.ode.bpel.elang.xpath20.runtime;
 
-import java.util.Calendar;
-
 import javax.xml.namespace.QName;
 import javax.xml.xpath.XPathVariableResolver;
 
 import net.sf.saxon.Configuration;
-import net.sf.saxon.om.Item;
 import net.sf.saxon.type.AtomicType;
 import net.sf.saxon.type.SchemaType;
 import net.sf.saxon.type.ValidationException;
@@ -46,8 +43,6 @@ import org.apache.ode.bpel.o.OScope;
 import org.apache.ode.bpel.o.OXsdTypeVarType;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.Namespaces;
-import org.apache.ode.utils.xsd.XSTypes;
-import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
 /**
@@ -68,7 +63,9 @@ public class JaxpVariableResolver implem
     }
 
     public Object resolveVariable(QName variableName) {
-        __log.debug("Resolving variable " + variableName);
+        if (__log.isDebugEnabled()) {
+            __log.debug("Resolving variable " + variableName);
+        }
 
         if (!(_oxpath instanceof OXPath10ExpressionBPEL20)) {
             throw new IllegalStateException("XPath variables not supported for bpel 1.1");
@@ -128,7 +125,7 @@ public class JaxpVariableResolver implem
         }
     }
 
-    public static Value convertSimpleTypeToSaxon(QName type, String value, Configuration _config) {
+    public Value convertSimpleTypeToSaxon(QName type, String value) {
         int fp = _config.getNamePool().allocate("", type.getNamespaceURI(), type.getLocalPart());
         SchemaType type2 = _config.getSchemaType(fp);
         if (type2 == null || !type2.isAtomicType()) {
@@ -148,11 +145,12 @@ public class JaxpVariableResolver implem
         }
     }
 
-    public static Object getSimpleContent(Node simpleNode, QName type) {
-        Document doc = (simpleNode instanceof Document) ? ((Document) simpleNode) : simpleNode.getOwnerDocument();
+    public Object getSimpleContent(Node simpleNode, QName type) {
         String text = simpleNode.getTextContent();
-        Object o = convertSimpleTypeToSaxon(type, text, Configuration.makeConfiguration(null, null));
-        __log.debug("getSimpleContent for " + DOMUtils.domToString(simpleNode) + " " + type + " returned " + o);
+        Object o = convertSimpleTypeToSaxon(type, text);
+        if (__log.isDebugEnabled()) {
+            __log.debug("getSimpleContent for " + DOMUtils.domToString(simpleNode) + " " + type + " returned " + o);
+        }
         return o;
     }
 }

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java?rev=1042692&r1=1042691&r2=1042692&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath20/runtime/XPath20ExpressionRuntime.java Mon Dec  6 16:01:36 2010
@@ -33,8 +33,8 @@ import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
-import net.sf.saxon.om.NamespaceConstant;
-import net.sf.saxon.trans.DynamicError;
+import net.sf.saxon.Configuration;
+import net.sf.saxon.trans.XPathException;
 import net.sf.saxon.value.DurationValue;
 import net.sf.saxon.xpath.XPathFactoryImpl;
 
@@ -73,6 +73,8 @@ public class XPath20ExpressionRuntime im
 
     /** Class-level logger. */
     private static final Log __log = LogFactory.getLog(XPath20ExpressionRuntime.class);
+    
+    private final XPathFactory _xpf = new XPathFactoryImpl();
 
     public XPath20ExpressionRuntime(){
     }
@@ -114,7 +116,9 @@ public class XPath20ExpressionRuntime im
         }
         if (someRes instanceof List) {
             result = (List) someRes;
-            __log.debug("Returned list of size " + result.size());
+            if (__log.isDebugEnabled()) {
+                __log.debug("Returned list of size " + result.size());
+            }
             if ((result.size() == 1) && !(result.get(0) instanceof Node)) {
                 // Dealing with a Java class
                 Object simpleType = result.get(0);
@@ -139,7 +143,9 @@ public class XPath20ExpressionRuntime im
             }
         } else if (someRes instanceof NodeList) {
             NodeList retVal = (NodeList) someRes;
-            __log.debug("Returned node list of size " + retVal.getLength());
+            if (__log.isDebugEnabled()) {
+                __log.debug("Returned node list of size " + retVal.getLength());
+            }
             result = new ArrayList(retVal.getLength());
             for(int m = 0; m < retVal.getLength(); ++m) {
                 Node val = retVal.item(m);
@@ -172,11 +178,11 @@ public class XPath20ExpressionRuntime im
             } else {
                 msg.append(cexp.toString());                
             }
-            msg.append("'");
+            msg.append('\'');
             if (ctx.getRootNode() != null) {
                 msg.append(" against '");
                 msg.append(DOMUtils.domToString(ctx.getRootNode()));
-                msg.append("'");
+                msg.append('\'');
             }
 
             if (retVal.size() == 0)
@@ -228,21 +234,22 @@ public class XPath20ExpressionRuntime im
     private Object evaluate(OExpression cexp, EvaluationContext ctx, QName type) throws FaultException, EvaluationException {
         try {
             OXPath20ExpressionBPEL20 oxpath20 = ((OXPath20ExpressionBPEL20) cexp);
-            XPathFactory xpf = new XPathFactoryImpl();
 
-            JaxpFunctionResolver funcResolver = new JaxpFunctionResolver(
-                    ctx, oxpath20);
-            JaxpVariableResolver varResolver = new JaxpVariableResolver(ctx, oxpath20, ((XPathFactoryImpl) xpf).getConfiguration());
-            xpf.setXPathFunctionResolver(funcResolver);
-            xpf.setXPathVariableResolver(varResolver);
-            XPath xpe = xpf.newXPath();
+            JaxpFunctionResolver funcResolver = new JaxpFunctionResolver(ctx, oxpath20);
+            JaxpVariableResolver varResolver = new JaxpVariableResolver(ctx, oxpath20, ((XPathFactoryImpl) _xpf).getConfiguration());
+            XPath xpe = _xpf.newXPath();
+            xpe.setXPathFunctionResolver(funcResolver);
+            xpe.setXPathVariableResolver(varResolver);
             xpe.setNamespaceContext(oxpath20.namespaceCtx);
             String xpath = ((OXPath10Expression)cexp).xpath;
             XPathExpression expr = xpe.compile(xpath);
-            Node contextNode = ctx.getRootNode() == null ? DOMUtils.newDocument() : ctx.getRootNode();
+            Node contextNode = ctx.getRootNode();
+            if (contextNode == null) {
+                contextNode = DOMUtils.newDocument();
+            }
             // Create step nodes in XPath in case it is incompletely instantiated
             if (oxpath20.insertMissingData) {
-                XPath20ExpressionModifier modifier = new XPath20ExpressionModifier(oxpath20.namespaceCtx, ((XPathFactoryImpl) xpf).getConfiguration().getNamePool());
+                XPath20ExpressionModifier modifier = new XPath20ExpressionModifier(oxpath20.namespaceCtx, ((XPathFactoryImpl) _xpf).getConfiguration().getNamePool());
                 modifier.insertMissingData(expr, ctx.getRootNode());
             }
             Object evalResult = expr.evaluate(contextNode, type);
@@ -256,8 +263,8 @@ public class XPath20ExpressionRuntime im
         } catch (XPathExpressionException e) {
             // Extracting the real cause from all this wrapping isn't a simple task
             Throwable cause = e.getCause() != null ? e.getCause() : e;
-            if (cause instanceof DynamicError) {
-                Throwable th = ((DynamicError)cause).getException();
+            if (cause instanceof XPathException) {
+                Throwable th = ((XPathException)cause).getException();
                 if (th != null) {
                     cause = th;
                     if (cause.getCause() != null) cause = cause.getCause();

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java?rev=1042692&r1=1042691&r2=1042692&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xquery10/runtime/XQuery10ExpressionRuntime.java Mon Dec  6 16:01:36 2010
@@ -162,7 +162,9 @@ public class XQuery10ExpressionRuntime i
 
         if (someRes instanceof List) {
             result = (List) someRes;
-            __log.debug("Returned list of size " + result.size());
+            if (__log.isDebugEnabled()) {
+                __log.debug("Returned list of size " + result.size());
+            }
 
             if ((result.size() == 1) && !(result.get(0) instanceof Node)) {
                 // Dealing with a Java class
@@ -191,7 +193,9 @@ public class XQuery10ExpressionRuntime i
             }
         } else if (someRes instanceof NodeList) {
             NodeList retVal = (NodeList) someRes;
-            __log.debug("Returned node list of size " + retVal.getLength());
+            if (__log.isDebugEnabled()) {
+                __log.debug("Returned node list of size " + retVal.getLength());
+            }
             result = new ArrayList(retVal.getLength());
 
             for (int m = 0; m < retVal.getLength(); ++m) {

Modified: ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java?rev=1042692&r1=1042691&r2=1042692&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java (original)
+++ ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/XsdTypesTest.java Mon Dec  6 16:01:36 2010
@@ -20,6 +20,10 @@
 package org.apache.ode.bpel.elang.xpath20.runtime;
 
 import javax.xml.namespace.QName;
+import javax.xml.xpath.XPathFactory;
+
+import net.sf.saxon.Configuration;
+import net.sf.saxon.xpath.XPathFactoryImpl;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -31,15 +35,18 @@ public class XsdTypesTest extends TestCa
     private static Log __log = LogFactory.getLog(XsdTypesTest.class);
 
     public void testDateTime() throws Exception {
-        Object o = JaxpVariableResolver.getSimpleContent(DOMUtils.stringToDOM("<temporary-simple-type-wrapper>2010-01-25T15:38:54.82Z</temporary-simple-type-wrapper>"), QName.valueOf("{http://www.w3.org/2001/XMLSchema}dateTime"));
+        XPathFactoryImpl xpf = new XPathFactoryImpl();
+        JaxpVariableResolver jvr = new JaxpVariableResolver(null, null, xpf.getConfiguration());
+        Object o = jvr.getSimpleContent(DOMUtils.stringToDOM("<temporary-simple-type-wrapper>2010-01-25T15:38:54.82Z</temporary-simple-type-wrapper>"), QName.valueOf("{http://www.w3.org/2001/XMLSchema}dateTime"));
         __log.debug(o);
         assertTrue(o.toString().contains("2010-01-25T15:38:54.82Z"));
     }
 
     public void testEmptyDateTime() throws Exception {
-        Object o = JaxpVariableResolver.getSimpleContent(DOMUtils.stringToDOM("<temporary-simple-type-wrapper></temporary-simple-type-wrapper>"), QName.valueOf("{http://www.w3.org/2001/XMLSchema}dateTime"));
+        XPathFactoryImpl xpf = new XPathFactoryImpl();
+        JaxpVariableResolver jvr = new JaxpVariableResolver(null, null, xpf.getConfiguration());
+        Object o = jvr.getSimpleContent(DOMUtils.stringToDOM("<temporary-simple-type-wrapper></temporary-simple-type-wrapper>"), QName.valueOf("{http://www.w3.org/2001/XMLSchema}dateTime"));
         __log.debug(o);
         assertTrue(o.toString().equals(""));
     }
-
 }