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 2015/02/02 19:54:55 UTC
[3/3] ode git commit: ODE-1027: Properly cast numbers in XPath 1.0
expressions.
ODE-1027: Properly cast numbers in XPath 1.0 expressions.
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/28dcae93
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/28dcae93
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/28dcae93
Branch: refs/heads/master
Commit: 28dcae93d007ede3b93b7e9df53584d021452e45
Parents: f17a322
Author: Tammo van Lessen <tv...@gmail.com>
Authored: Mon Feb 2 19:54:36 2015 +0100
Committer: Tammo van Lessen <tv...@gmail.com>
Committed: Mon Feb 2 19:54:36 2015 +0100
----------------------------------------------------------------------
.../elang/xpath10/runtime/JaxenContexts.java | 35 +++++++++++++++++---
1 file changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/28dcae93/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
index 90643e4..7cc32c8 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/elang/xpath10/runtime/JaxenContexts.java
@@ -69,6 +69,18 @@ class JaxenContexts implements FunctionContext, VariableContext {
private static final FunctionContext __defaultXPathFunctions = XPathFunctionContext.getInstance();
private static final QName BOOLEAN = new QName("http://www.w3.org/2001/XMLSchema", "boolean");
+ private static final QName BYTE = new QName("http://www.w3.org/2001/XMLSchema", "byte");
+ private static final QName INT = new QName("http://www.w3.org/2001/XMLSchema", "int");
+ private static final QName INTEGER = new QName("http://www.w3.org/2001/XMLSchema", "integer");
+ private static final QName LONG = new QName("http://www.w3.org/2001/XMLSchema", "long");
+ private static final QName SHORT = new QName("http://www.w3.org/2001/XMLSchema", "short");
+ private static final QName UNSIGNED_INT = new QName("http://www.w3.org/2001/XMLSchema", "unsignedInt");
+ private static final QName UNSIGNED_SHORT = new QName("http://www.w3.org/2001/XMLSchema", "unsignedShort");
+ private static final QName UNSIGNED_BYTE = new QName("http://www.w3.org/2001/XMLSchema", "unsignedByte");
+ private static final QName DECIMAL = new QName("http://www.w3.org/2001/XMLSchema", "decimal");
+ private static final QName FLOAT = new QName("http://www.w3.org/2001/XMLSchema", "float");
+ private static final QName DOUBLE = new QName("http://www.w3.org/2001/XMLSchema", "double");
+
private OXPath10Expression _oxpath;
private EvaluationContext _xpathEvalCtx;
@@ -189,10 +201,25 @@ class JaxenContexts implements FunctionContext, VariableContext {
if (_xpathEvalCtx.narrowTypes() && type instanceof OXsdTypeVarType && ((OXsdTypeVarType)type).simple) {
String value = variableNode.getTextContent();
OXsdTypeVarType theType = (OXsdTypeVarType)type;
-
- if (BOOLEAN.equals(theType.xsdType)) {
- return new Boolean(value) ;
- }
+
+ // cast booleans to boolean
+ if (BOOLEAN.equals(theType.xsdType)) {
+ return new Boolean(value) ;
+ }
+
+ // and numbers to numbers (XPath only understands Double, so Double it shall be.
+ if (INT.equals(theType.xsdType) || UNSIGNED_SHORT.equals(theType.xsdType) ||
+ INTEGER.equals(theType.xsdType) ||
+ LONG.equals(theType.xsdType) || UNSIGNED_INT.equals(theType.xsdType) ||
+ SHORT.equals(theType.xsdType) || UNSIGNED_BYTE.equals(theType.xsdType) ||
+ BYTE.equals(theType.xsdType) ||
+ DECIMAL.equals(theType.xsdType) ||
+ FLOAT.equals(theType.xsdType) ||
+ DOUBLE.equals(theType.xsdType)
+ ) {
+ return new Double(value);
+ }
+
return value;
} else {
return variableNode;