[ https://issues.apache.org/jira/browse/IBATIS-397?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12474623 ]
Jan Vissers commented on IBATIS-397: ------------------------------------ Put this one on hold! I'm going to retry things with getObject() and see how far that'll get me. > Support for Oracle "OPAQUE" > --------------------------- > > Key: IBATIS-397 > URL: https://issues.apache.org/jira/browse/IBATIS-397 > Project: iBatis for Java > Issue Type: Improvement > Components: SQL Maps > Affects Versions: 2.2.0, 2.3.0 > Reporter: Jan Vissers > > Based on the custom type handler described in: > http://opensource.atlassian.com/confluence/oss/display/IBATIS/XMLTypeHandlerCallback.java > we tried to use this handler not only for "regular select" statements but > also for "callable statements". As it turns out the current iBatis codebase > doesn't allow us to use and/or extend the type handler to fully support > Oracle's RDBMS XMLType datatype. > I've experimented a bit and suggest the following solution: > 1) Modify the JdbcTypeRegistry class in order for it to contain the > ORACLEOPAQUE (much like the ORACLECURSOR already specified) > setType("ORACLEOPAQUE", 2007); > 2) Modify the CallableStatementResultSet class to have it expose its > decorated "CallableStatement" instance: > public CallableStatement getCs() { > return cs; > } > With these two modifications we can declare the mapping as follows: > <parameter property="doc" jdbcType="ORACLEOPAQUE" mode="OUT" > typeHandler="XMLTypeHandlerCallback" typeName="SYS.XMLTYPE"/> > We have to change the XMLTypeHandlerCallback (referenced at the top) in order > for the getResult() to determine whether to perform work for a > CallableStatementResultSet or an OracleResultSet, like so: > //The handler getResult > public Object getResult(ResultGetter getter) throws SQLException { > if (getter.getResultSet() instanceof CallableStatementResultSet) { > if (((CallableStatementResultSet) getter.getResultSet()).getCs() > instanceof OracleCallableStatement) { > OracleCallableStatement ocsmt = (OracleCallableStatement) > ((CallableStatementResultSet) getter.getResultSet()).getCs(); > // go to work > } else { > throw new UnsupportedOperationException("XMLType mapping only > supported for Oracle RDBMS"); > } > } else > if (getter.getResultSet() instanceof OracleResultSet) { > // go to work > } else { > throw new UnsupportedOperationException("XMLType mapping only > supported for Oracle RDBMS"); > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.