You made it so that it will only work if DEBUG is enabled. This will work in all circumstances:
(see http://opensource.atlassian.com/confluence/oss/pages/viewpage.action?pageId=15597591 ) public Object getResult(ResultGetter getter) throws SQLException { logger.info("Entered getResult(ResultGetter getter)"); Object xmlDocument = null; ResultSet realResultSet = getter.getResultSet(); if (Proxy.isProxyClass(realResultSet.getClass())) { InvocationHandler ih = Proxy. getInvocationHandler(realResultSet); if (ih instanceof ResultSetLogProxy) { realResultSet = ((ResultSetLogProxy) ih).getRs(); } else { logger.error("Some non-iBATIS ResultSet Proxy"); } } OracleResultSet ors = (OracleResultSet) realResultSet; OPAQUE opaqueValue = null; if (getter.getColumnName() != null) { opaqueValue = ors.getOPAQUE(getter.getColumnName()); } else { opaqueValue = ors.getOPAQUE(getter.getColumnIndex()); } if (opaqueValue != null) { XMLType xmlResult = XMLType.createXML(opaqueValue); xmlDocument = xmlResult.getDOM(); } else { xmlDocument = null; } return xmlDocument; } Jeff Butler On Tue, Apr 29, 2008 at 2:19 PM, <[EMAIL PROTECTED]> wrote: > > Jeff, > > Here is my code for ResultSet TypeHandlerCallback. > > > public Object getResult(ResultGetter getter) throws SQLException > { > logger.info("Entered getResult(ResultGetter getter)"); > Object xmlDocument = null; > ResultSet rs = getter.getResultSet(); > > if (Proxy.isProxyClass(rs.getClass())) > { > InvocationHandler ih = Proxy. getInvocationHandler(rs); > if (ih instanceof ResultSetLogProxy) > { > ResultSet realResultSet = ((ResultSetLogProxy) ih).getRs(); > OracleResultSet ors = (OracleResultSet) realResultSet; > OPAQUE opaqueValue = null; > if (getter.getColumnName() != null) > { > opaqueValue = ors.getOPAQUE(getter.getColumnName()); > } > else > { > opaqueValue = ors.getOPAQUE(getter.getColumnIndex()); > } > if (opaqueValue != null) > { > XMLType xmlResult = XMLType.createXML(opaqueValue); > xmlDocument = xmlResult.getDOM(); > } > else > { > xmlDocument = null; > } > } > } > else > { > logger.error("ResultSet class is not Proxy class"); > xmlDocument = null; > } > return xmlDocument; > } > > > I have ibatis-2.3.0.677.jar and I have tried with both log4j-1.2.8.jar and > log4j-1.2.13.jar as well. But as long as I keep the log level to DEBUG it > works fine. If I change it to either INFO or ERROR, I am getting error on > reading resultset for XML datatype > > [29 Apr 2008 11:58:33] INFO [XMLTypeHandlerCallback] Entered > getResult(ResultGetter getter) > [exec] [29 Apr 2008 11:58:33] ERROR [XMLTypeHandlerCallback] > ResultSet class is not Proxy class > [exec] [29 Apr 2008 11:58:33] INFO [XMLTypeHandlerCallback] Entered > getResult(ResultGetter getter) > [exec] [29 Apr 2008 11:58:33] ERROR [XMLTypeHandlerCallback] > ResultSet class is not Proxy class > [exec] java.lang.NullPointerException > [exec] at > org.jdom.input.DOMBuilder.buildTree(DOMBuilder.java:166) > [exec] at > org.jdom.input.DOMBuilder.build(DOMBuilder.java:135): > > > How do I fix it for log level ERROR or INFO? > > Thanks > Jasmin > > > > > *"Jeff Butler" <[EMAIL PROTECTED]>* > > 12/26/2007 10:30 PM > Please respond to > [email protected] > > To > [email protected] cc > Subject > Re: Exception "XMLType mapping only supported for Oracle RDBMS" > > > > > Here's how to get the real resultset from a the proxied class: > > > *public* Object getResult(ResultGetter getter) *throws* SQLException { > ResultSet rs = getter.getResultSet();* > if* (Proxy.*isProxyClass*(rs.getClass())) { > InvocationHandler ih = Proxy. *getInvocationHandler*(rs);* > if* (ih *instanceof* ResultSetLogProxy) { > ResultSet realResultSet = ((ResultSetLogProxy) ih).getRs(); > // do something here... > } > } > } > > It's ugly - but it works. > > Jeff Butler > On Dec 26, 2007 11:37 AM, <[EMAIL PROTECTED]<[EMAIL PROTECTED]>> > wrote: > > Jeff, > > I did read your posting at * > http://www.mail-archive.com/[email protected]/msg06898.html*<http://www.mail-archive.com/[email protected]/msg06898.html> > already before sending this question. I could not understand how/where do I > modify the code to consider proxy class. > > My getOpaqueValue() displays *ResultSet class is: $Proxy2, *not > ResultSetLogProxy. > > The program DOES WORK if I turn off logging. > > I tried something like this: > > public Object getResult(ResultGetter getter) throws SQLException { > // if (getter.getResultSet() instanceof OracleResultSet) { > OPAQUE opaqueValue = getOpaqueValue(getter); > if (opaqueValue != null) { > XMLType xmlResult = XMLType.createXML (opaqueValue); > return xmlResult.getDOM(); > } else { > return null; > } > // } else { > // throw new UnsupportedOperationException("XMLType mapping only > supported for Oracle RDBMS"); > // } > } > > > private OPAQUE getOpaqueValue(ResultGetter getter) throws SQLException > { > > > java.sql.ResultSet rs = getter.getResultSet(); > System.out.println("ResultSet class is: " + rs.getClass()); > // ResultSetLogProxy rsProx = (ResultSetLogProxy)rs; > OracleResultSet ors = > (OracleResultSet)ResultSetLogProxy.newInstance(rs); //--- *THROWS > ClassCastException* > OPAQUE op = null; > if (getter.getColumnName() != null) { > op = ors.getOPAQUE(getter.getColumnName()); > } else { > op = ors.getOPAQUE(getter.getColumnIndex()); > } > return op; > } > > > Thanks > > > > *"Jeff Butler" <[EMAIL PROTECTED] <[EMAIL PROTECTED]>*>* > > 12/26/2007 12:24 PM > Please respond to > * > [EMAIL PROTECTED] <[email protected]> > > > To > [EMAIL PROTECTED] <[email protected]> cc > Subject > Re: Exception "XMLType mapping only supported for Oracle RDBMS" > > > > > > The code in the wiki article does not take into account the fact that > iBATIS logging changes the normal classes to proxy classes. First thing to > do is turn off logging to see it will work. Second thing, the code must be > modified to account for the proxy class if logging is enabled (add another > instanceof check for the proxy class, then unwind the embedded "real" > class). > > See here for more information: > * > **http://www.mail-archive.com/[email protected]/msg06898.html*<http://www.mail-archive.com/[email protected]/msg06898.html> > > Jeff Butler > > > > On Dec 26, 2007 10:26 AM, < [EMAIL PROTECTED]<[EMAIL PROTECTED]>> > wrote: > > I am using code as directed in this url: * > ** > **http://opensource.atlassian.com/confluence/oss/display/IBATIS/XMLTypeHandlerCallback.java > *<http://opensource.atlassian.com/confluence/oss/display/IBATIS/XMLTypeHandlerCallback.java> > > It throw UnsupportedOperationException("XMLType mapping only supported for > Oracle RDBMS"); > > I have logger set to DEBUG mode. > > I tried displaying class from ResultSet like : > > java.sql.ResultSet rs = getter.getResultSet(); > System.out.println("ResultSet class is: " + rs.getClass()); > > The cosole displays > > [20 Dec 2007 15:15:05] DEBUG [PreparedStatement] {pstm-100001} Executing > Statement: SELECT OTM, SEQUENCE, MESSAGETYPE, MESSAGEID, STATUS, > PROCESSED_TIME, CREATED FROM OTM_XML > [20 Dec 2007 15:15:05] DEBUG [PreparedStatement] {pstm-100001} Parameters: > [] > [20 Dec 2007 15:15:05] DEBUG [PreparedStatement] {pstm-100001} Types: [] > [20 Dec 2007 15:15:05] DEBUG [ResultSet] {rset-100002} ResultSet * > ResultSet class is: class $Proxy2 * > > I am using JDeveloper *10.1.3.1* <http://10.1.3.1/> > > What should I change in my code to make it working? > > Thanks > > * > ****************************************************************************** > * > ATTENTION ATTENTION ATTENTION ATTENTION ATTENTION > Our domain name is changing. Please take note of the sender's > e-Mail address and make changes to your personal address list, > if needed. Both domains will continue to work, only for a limited > time. > > ****************************************************************************** > This email and any files transmitted with it are intended solely for > the use of the individual or agency to whom they are addressed. > If you have received this email in error please notify the Navy > Exchange Service Command e-mail administrator. This footnote > also confirms that this email message has been scanned for the > presence of computer viruses. > > Thank You! * > > ****************************************************************************** > * > >
