You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Nail Uenlue <na...@gmail.com> on 2009/07/30 11:25:05 UTC
- java.sql.SQLException: Fail to convert to internal representation:
ch.xxx.converter.bean.KeywordItem - Problem
Hi everyone,
Im having an issue while trying to submit an Array of Objects to an
Oracle Stored procedure.
The map file looks like:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Converter">
<typeAlias alias="keywordItems"
type="ch.generali.converter.bean.KeywordItem" />
<resultMap id="keywordsResult"
class="ch.generali.converter.bean.KeywordItem">
<result property="key" jdbcType="VARCHAR"
javaType="java.lang.String" column="KEY"/>
<result property="value" jdbcType="VARCHAR"
javaType="java.lang.String" column="VALUE"/>
</resultMap>
<parameterMap id="getKeywordParam" class="ch.generali.converter.bean.Keyword">
<parameter property="keywords"
typeHandler="ch.generali.converter.dao.KeywordTypeHandlerCallback"
javaType="java.util.List" jdbcType="VVEVER.KEYWORD_TAB"
typeName="VVEVER.KEYWORD_TAB" mode="INOUT" />
<parameter property="language" jdbcType="NUMERIC" mode="IN"
javaType="java.lang.Integer" />
<parameter property="vertragsnr" jdbcType="VARCHAR" mode="IN"
javaType="java.lang.String" />
</parameterMap>
<procedure id="getKeyword" parameterMap="getKeywordParam">
{call vvever.pck_ev_textbaustein_liste.ip_get_textbaustein_liste(?,?,?,?)}
</procedure>
</sqlMap>
my TypeHandlerCallback class looks like:
package ch.generali.converter.dao;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbcp.PoolableConnection;
import oracle.jdbc.driver.OracleConnection;
import oracle.jdbc.internal.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import ch.generali.converter.bean.Keyword;
import ch.generali.converter.bean.KeywordItem;
import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;
import com.ibatis.sqlmap.engine.type.JdbcTypeRegistry;
public class KeywordTypeHandlerCallback implements TypeHandlerCallback {
static {
JdbcTypeRegistry.setType("VVEVER.KEYWORD_ITEM", OracleTypes.STRUCT);
JdbcTypeRegistry.setType("VVEVER.KEYWORD_TAB",
OracleTypes.ARRAY);
}
public Object getResult(ResultGetter getter) throws SQLException {
// TODO Auto-generated method stub
return null;
}
public void setParameter(ParameterSetter setter, Object parameter)
throws SQLException {
Statement stmt = setter.getPreparedStatement();
Connection conn = stmt.getConnection();
// Map<String, String> parameterMap = (HashMap<String, String>)parameter;
List<KeywordItem> keywordItems = (List<KeywordItem>) parameter;
KeywordItem[] keywordArray = new KeywordItem[keywordItems.size()];
for (int i = 0; i < keywordArray.length; i++) {
keywordArray[i] = keywordItems.get(i);
}
PoolableConnection pc = (PoolableConnection)conn;
OracleConnection oc = (OracleConnection)pc.getDelegate();
Map map = oc.getTypeMap();
map.put("VVEVER.KEYWORD_ITEM",KeywordItem.class);
ArrayDescriptor desc =
ArrayDescriptor.createDescriptor("VVEVER.KEYWORD_TAB", oc);
this is where it fails --> ARRAY array = new ARRAY(desc, oc,keywordArray);
setter.setArray(array);
}
public Object valueOf(String s) {
// TODO Auto-generated method stub
return null;
}
}
The KeywordItem looks like:
public class KeywordItem {
public String key;
public String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
And the Object type in Oracle like:
CREATE type keyword_item
AS
object (
key VARCHAR2(20) ,
value VARCHAR2(1000) );
/
create or replace type keyword_tab as table of keyword_item;
What could cause this behavour?
---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org