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
<[email protected]> 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