You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ka...@apache.org on 2009/02/19 23:50:25 UTC
svn commit: r746041 -
/ode/branches/APACHE_ODE_1.X/bpel-runtime/src/main/java/org/apache/ode/bpel/extvar/jdbc/JdbcExternalVariableModule.java
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);