That sounds like a bug in Avatica. I was not aware that in 'isWrapperFor(Class<?> iface)', 'iface' had to be an interface, and had assumed the driver would just return 'false'.
Can you please log it? A solution would be to create an interface in Avatica for AvaticaPreparedStatement. (It seems that the 'handle' field is the only thing that we need from it.) Julian On Thu, May 14, 2020 at 8:53 AM Thierry Rolland <thierry.roll...@dalim.com> wrote: > > Hello all, > > > I'm trying calcite avatica v1.16.0 which seems to be a very great tool. > > I tried with a postgresql database and that works very fine (I used the > provided docker standalone server for my tests) > > > Now, I'm trying with an oracle database (v19c) and like for postgresql, > I'm using a docker standalone server. > > I'm running on an openJDK11 and I have a problem related to the Oracle > jdbc driver (ojdbc10.jar) which throws an SQLException if the input > parameter of the method */isWrapperFor/* is not a java interface : > > > java.lang.RuntimeException: java.sql.SQLException: Object does not wrap > anything with requested interface > at > org.apache.calcite.avatica.jdbc.JdbcMeta.propagate(JdbcMeta.java:700) > at > org.apache.calcite.avatica.jdbc.JdbcMeta.prepare(JdbcMeta.java:726) > at > org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:195) > at > org.apache.calcite.avatica.remote.Service$PrepareRequest.accept(Service.java:1215) > at > org.apache.calcite.avatica.remote.Service$PrepareRequest.accept(Service.java:1186) > at > org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:94) > at > org.apache.calcite.avatica.remote.JsonHandler.apply(JsonHandler.java:52) > at > org.apache.calcite.avatica.server.AvaticaJsonHandler.handle(AvaticaJsonHandler.java:129) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:61) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.server.Server.handle(Server.java:502) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765) > at > org.apache.calcite.avatica.standalone.shaded.org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683) > at java.lang.Thread.run(Thread.java:748) > *Caused by: java.sql.SQLException: Object does not wrap anything with > requested interface** > ** at > oracle.jdbc.driver.OracleStatementWrapper.isWrapperFor(OracleStatementWrapper.java:487)** > ** at > org.apache.calcite.avatica.jdbc.JdbcMeta.prepare(JdbcMeta.java:711)* > ... 22 more > > > > In the corresponding source code of */JdbcMeta.java/*, the input > parameter of the method /*isWrapperFor* /is the abstract > class/*AvaticaPreparedStatement* /(which is not a java interface) /: > / > > > Meta.StatementTypestatementType= null; > if(statement.isWrapperFor(AvaticaPreparedStatement.class)) { > finalAvaticaPreparedStatementavaticaPreparedStatement; > > > > > Does someone have an idea how to solve this problem ? > > Thank you in advance. > > Thierry > > > > > > > >