Author: karthick
Date: Thu Feb 19 22:50:24 2009
New Revision: 746041

URL: http://svn.apache.org/viewvc?rev=746041&view=rev
Log:
Downcast parameter values so that it matches BAM table definition.

Modified:
    
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java

Modified: 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java?rev=746041&r1=746040&r2=746041&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
 Thu Feb 19 22:50:24 2009
@@ -18,17 +18,21 @@
  */
 package org.apache.ode.bpel.extvar.jdbc;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Types;
 import java.util.HashMap;
 import java.util.List;
 
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.sql.DataSource;
+import javax.swing.text.StyleContext.SmallAttributeSet;
 import javax.xml.namespace.QName;
 
 import org.apache.commons.logging.Log;
@@ -335,7 +339,7 @@
                 if (val == null)
                     stmt.setNull(idx, c.dataType);
                 else
-                    stmt.setObject(idx, val);
+                    stmt.setObject(idx, downcastValue(val, c.dataType));
                 idx++;
             }
 
@@ -345,7 +349,7 @@
                 if (val == null)
                     stmt.setNull(idx, ck.dataType);
                 else
-                    stmt.setObject(idx, val);
+                    stmt.setObject(idx, downcastValue(val, ck.dataType));
                 idx++;
             }
             return stmt.executeUpdate();
@@ -355,7 +359,127 @@
         }
     }
 
-    RowVal execSelect(DbExternalVariable dbev, Locator locator) throws 
SQLException, ExternalVariableModuleException {
+    private Object downcastValue(Object value, int dataType) {
+       if (value == null) {
+               return null;
+       }
+       // Try down casting the value as per its column type.
+       try {
+               // Some JDBC 4.0 types have been ignored to avoid compilation 
errors 
+               switch (dataType) {
+               case Types.ARRAY:
+                       break;
+               case Types.BIGINT:
+                       if (!(value instanceof BigInteger)) {
+                               value = new 
BigDecimal(value.toString()).longValue();
+                       }
+                       break;
+               case Types.BINARY:
+                       break;
+               case Types.BIT:
+                       if (!(value instanceof Boolean)) {
+                               value = new Boolean(value.toString());
+                       }
+                       break;
+               case Types.BLOB:
+                       break;
+               case Types.BOOLEAN:
+                       if (!(value instanceof Boolean)) {
+                               value = new Boolean(value.toString());
+                       }
+                       break;
+               case Types.CHAR:
+                       break;
+               case Types.CLOB:
+                       break;
+               case Types.DATALINK:
+                       break;
+               case Types.DATE:                
+                       break;
+               case Types.DECIMAL:
+                       if (!(value instanceof BigDecimal)) {
+                               value = new BigDecimal(value.toString());
+                       }
+                       break;
+               case Types.DISTINCT:
+                       break;
+               case Types.DOUBLE:
+                       if (!(value instanceof Double)) {
+                               value = 
Double.valueOf(value.toString()).doubleValue();
+                       }
+                       break;
+               case Types.FLOAT:
+                       if (!(value instanceof Float)) {
+                               value = 
Float.valueOf(value.toString()).floatValue();
+                       }
+                       break;
+               case Types.INTEGER:
+                       if (!(value instanceof Integer)) {
+                               value = 
Double.valueOf(value.toString()).intValue();
+                       }
+                       break;
+               case Types.JAVA_OBJECT:
+                       break;
+//             case Types.LONGNVARCHAR:
+//                     break;
+               case Types.LONGVARBINARY:
+                       break;
+               case Types.LONGVARCHAR:
+                       break;
+//             case Types.NCHAR:
+//                     break;
+//             case Types.NCLOB:
+//                     break;
+               case Types.NUMERIC:
+                       if (!(value instanceof BigDecimal)) {
+                               value = new BigDecimal(value.toString());
+                       }
+                       break;
+//             case Types.NVARCHAR:
+//                     break;
+               case Types.OTHER:
+                       break;
+               case Types.REAL:
+                       if (!(value instanceof Double)) {
+                               value = 
Float.valueOf(value.toString()).floatValue();
+                       }
+                       break;
+               case Types.REF:
+                       break;
+//             case Types.ROWID:
+//                     break;
+               case Types.SMALLINT:
+                       if (!(value instanceof Short)) {
+                               value = new 
Short(value.toString()).shortValue();
+                       }
+                       break;
+//             case Types.SQLXML:
+//                     break;
+               case Types.STRUCT:
+                       break;
+               case Types.TIME:
+                       break;
+               case Types.TIMESTAMP:
+                       break;
+               case Types.TINYINT:
+                       if (!(value instanceof Short)) {
+                               value = new 
Short(value.toString()).shortValue();
+                       }
+                       break;
+               case Types.VARBINARY:
+                       break;
+               case Types.VARCHAR:
+                       break;
+               default:        
+                       break;
+               }
+       } catch (Exception e) {
+               // couldn't cast... let's just use original value object
+       }
+       return value;
+       }
+
+       RowVal execSelect(DbExternalVariable dbev, Locator locator) throws 
SQLException, ExternalVariableModuleException {
         RowKey rowkey = dbev.keyFromLocator(locator);
         if (__log.isDebugEnabled()) __log.debug("execSelect: " + rowkey);
         


Reply via email to