You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2008/04/13 15:19:31 UTC

svn commit: r647568 - in /ode/trunk: bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/ bpel-test/src/test/java/org/apache/ode/test/ bpel-test/src/test/resources/ bpel-test/src/test/resources/bpel/2.0/ExtVar3/

Author: boisvert
Date: Sun Apr 13 06:19:29 2008
New Revision: 647568

URL: http://svn.apache.org/viewvc?rev=647568&view=rev
Log:
Test-case and fix for ODE-266: Database external variables: Empty values not handled correctly

Added:
    ode/trunk/bpel-test/src/test/resources/bpel/2.0/ExtVar3/
      - copied from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/bpel/2.0/ExtVar3/
    ode/trunk/bpel-test/src/test/resources/bpel/2.0/ExtVar3/ExtVar3-EmptyValues.bpel
      - copied unchanged from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/bpel/2.0/ExtVar3/ExtVar3-EmptyValues.bpel
    ode/trunk/bpel-test/src/test/resources/bpel/2.0/ExtVar3/ExtVar3-EmptyValues.wsdl
      - copied unchanged from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/bpel/2.0/ExtVar3/ExtVar3-EmptyValues.wsdl
    ode/trunk/bpel-test/src/test/resources/bpel/2.0/ExtVar3/ExtVar3.wsdl
      - copied unchanged from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/bpel/2.0/ExtVar3/ExtVar3.wsdl
    ode/trunk/bpel-test/src/test/resources/bpel/2.0/ExtVar3/deploy.xml
      - copied unchanged from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/bpel/2.0/ExtVar3/deploy.xml
    ode/trunk/bpel-test/src/test/resources/bpel/2.0/ExtVar3/test.properties
      - copied unchanged from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/bpel/2.0/ExtVar3/test.properties
    ode/trunk/bpel-test/src/test/resources/log4j.properties
      - copied unchanged from r647566, ode/branches/APACHE_ODE_1.1/bpel-test/src/test/resources/log4j.properties
Modified:
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
    ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExternalVariableTest.java

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java?rev=647568&r1=647567&r2=647568&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/DbExternalVariable.java Sun Apr 13 06:19:29 2008
@@ -259,7 +259,7 @@
         String strdat = c.toText(data);
         if (strdat != null)
             cel.appendChild(doc.createTextNode(strdat));
-        else
+        else if (c.nullok) 
             cel.setAttributeNS(XSI_NS, "xsi:nil", "true");
         parent.appendChild(cel);
     }
@@ -286,13 +286,13 @@
             }
 
 			String nil = ((Element) n).getAttributeNS(XSI_NS, "nil");
-            if (nil != null && "true".equalsIgnoreCase(nil) && (val == null)) {
+            if (nil != null && "true".equalsIgnoreCase(nil) && (val == null || val.trim().length() == 0)) {
                 if (__log.isDebugEnabled()) __log.debug("Extvar key: "+key+" is null (xsi:nil)");
 				ret.put(key, null);
             } else {
 				ret.put(key, column.fromText(val));
+            }
 		}
-        }
 		return ret;
 	}
 
@@ -350,6 +350,10 @@
 			}
 		}
 
+        boolean supportsEmptyValue() {
+            return (dataType == Types.VARCHAR || dataType == Types.LONGVARCHAR || dataType == Types.CLOB); 
+        }
+
 		/**
 		 * Return <code>true</code> if column is a date-like type.
 		 */
@@ -420,22 +424,37 @@
 
 		Object fromText(String val) throws ExternalVariableModuleException {
 			try {
+                if (val == null)
+                    return null;
+                
+                if (!supportsEmptyValue() && val.trim().length() == 0) {
+                    return null;
+                }
+                
 				// TODO: use xsd:date and xsd:time conversions
 				if (isDate())
-					return new java.sql.Date(ISO8601DateParser.parse(val)
-							.getTime());
+                    return new java.sql.Date(ISO8601DateParser.parse(val).getTime());
 				else if (isTime())
-					return new java.sql.Time(ISO8601DateParser.parse(val)
-							.getTime());
+                    return new java.sql.Time(ISO8601DateParser.parse(val).getTime());
 				else if (isTimeStamp())
-					return new java.sql.Timestamp(ISO8601DateParser.parse(val)
-							.getTime());
-				else if (isInteger())
+                    return new java.sql.Timestamp(ISO8601DateParser.parse(val).getTime());
+                else if (isInteger()) {
+                    String v = val.trim().toLowerCase();
+                    if (v.equals("true"))
+                        return 1;
+                    if (v.equals("false"))
+                        return 0;
 					return Long.valueOf(val);
-				else if (isReal())
+                } else if (isReal())
 					return Double.valueOf(val);
-				else if (isBoolean())
+                else if (isBoolean()) {
+                    String v = val.trim();
+                    if (v.equals("1"))
+                        return true;
+                    if (v.equals("0"))
+                        return false;
 					return Boolean.valueOf(val);
+                }
 
 				return val;
 			} catch (Exception ex) {

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java?rev=647568&r1=647567&r2=647568&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java Sun Apr 13 06:19:29 2008
@@ -397,7 +397,10 @@
                 Object val = c.getValue(c.name, keys, values, locator.iid);
                 values.put(c.name, val);
                 if (__log.isDebugEnabled()) __log.debug("Set parameter "+idx+": "+val);
-                stmt.setObject(idx, val);
+                if (val == null)
+                    stmt.setNull(idx, c.dataType);
+                else 
+                    stmt.setObject(idx, val);
                 idx++;
             }
 

Modified: ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExternalVariableTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExternalVariableTest.java?rev=647568&r1=647567&r2=647568&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExternalVariableTest.java (original)
+++ ode/trunk/bpel-test/src/test/java/org/apache/ode/test/ExternalVariableTest.java Sun Apr 13 06:19:29 2008
@@ -12,9 +12,6 @@
 
 /**
  * Simple test of external variables.
- * 
- * @author Maciej Szefler <mszefler at gmail dot com>
- * 
  */
 public class ExternalVariableTest extends BPELTestAbstract {
 
@@ -43,9 +40,13 @@
 
         s.execute("CREATE TABLE costPerCustomer (value0 varchar(250), key1 varchar(250) primary key)");
         
+        s.execute("CREATE TABLE DataTypesTest (KEYSTRING VARCHAR(255), STRINGCOL VARCHAR(255), FLOATCOL FLOAT, " 
+            + "INTCOL INTEGER, NUMBERCOL NUMERIC, TIMESTAMPCOL TIMESTAMP, BOOLEANCOL TINYINT)");
+        
         conn.close();
     }
 
+    /*
     @Test
     public void testHelloWorld2() throws Throwable {
         go("/bpel/2.0/ExtVar");
@@ -55,5 +56,10 @@
     public void testExtVar2() throws Throwable {
         go("/bpel/2.0/ExtVar2");
     }
+    */
 
+    @Test
+    public void testExtVar2() throws Throwable {
+        go("/bpel/2.0/ExtVar3");
+    }
 }