java - Datastax cassandra QueryBuilder 插入错误(java)

标签 java json cassandra cql datastax

环境:

  • Java 7

  • cassandra 2.1.2 在 Windows 8.1 上的一个简单节点中的本地开发工作站上运行

  • 驱动程序 cassandra-driver-core-2.1.2

  • 运行环境:apache karaf 2.3.8

我尝试通过在简单类型定义的列中给出 json(与 x 和 y 坐标)来插入行。

我构建了这个 java 语句:

Statement statement = QueryBuilder
.insertInto("myKeySpace", "myTable")
.value("myKeyColumn", "myKeyValue")
.value("coordinates", "{\"x\":10.4,\"y\":20.3}");

执行此操作时:

mySession.execute(statement);

我收到以下错误(完整的堆栈跟踪位于此消息的末尾):

com.datastax.driver.core.exceptions.InvalidQueryException: Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]

[在下面的CQL语句中,我对列名进行了匿名处理,有可能引号是错误的,但问题出在上面的java语句上]

我的 cassandra 表和类型:

CREATE TABLE IF NOT EXISTS "myTable" ( 
    "myKeyColumn" text,
    coordinates FROZEN<coordinates>,
    PRIMARY KEY ("myKeyColumn") 
);

CREATE TYPE IF NOT EXISTS coordinates (
      x double,
      y double
);

在 Datastax DevCenter 中执行以下查询时,效果很好:

INSERT INTO "myTable"("myKeyColumn","coordinates")
VALUES ('myKeyValue',{"x":10.4,"y":20.3});

欢迎任何帮助! :-)

完整堆栈跟踪:

2014-11-27 11:38:07,532 | WARN  | tp1271566160-230 | ServletHandler                   | pse.jetty.servlet.ServletHandler  563 | 135 - org.eclipse.jetty.aggregate.jetty-all-server - 8.1.15.v20140411 | /cxf/rest/myProject/add
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: com.datastax.driver.core.exceptions.InvalidQueryException: Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]
    at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:116)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:336)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)[83:org.apache.geronimo.specs.geronimo-servlet_3.0_spec:1.0]
    at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)[171:org.apache.cxf.cxf-rt-transports-http:2.7.12]
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:69)[145:org.ops4j.pax.web.pax-web-jetty:3.1.1]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:240)[145:org.ops4j.pax.web.pax-web-jetty:3.1.1]
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:77)[145:org.ops4j.pax.web.pax-web-jetty:3.1.1]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.Server.handle(Server.java:370)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)[135:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
    at java.lang.Thread.run(Thread.java:724)[:1.7.0_25]
Caused by: org.apache.cxf.interceptor.Fault: com.datastax.driver.core.exceptions.InvalidQueryException: Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]
    at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:170)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:136)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:204)[177:org.apache.cxf.cxf-rt-frontend-jaxrs:2.7.12]
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)[177:org.apache.cxf.cxf-rt-frontend-jaxrs:2.7.12]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)[164:org.apache.cxf.cxf-api:2.7.12]
    ... 36 more
Caused by: org.mycompany.service.container.InvocationException: com.datastax.driver.core.exceptions.InvalidQueryException: Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]
    at org.mycompany.service.container.interceptors.ServiceInterceptor.invoke(ServiceInterceptor.java:73)
    at org.mycompany.service.container.InvocationChain.invokeNext(InvocationChain.java:82)
    at org.mycompany.service.container.interceptors.SecurityInterceptor.invoke(SecurityInterceptor.java:84)
    at org.mycompany.service.container.InvocationChain.invokeNext(InvocationChain.java:82)
    at org.mycompany.service.container.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:66)
    at com.sun.proxy.$Proxy24.add(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_25]
    at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_25]
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:188)[164:org.apache.cxf.cxf-api:2.7.12]
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:104)[164:org.apache.cxf.cxf-api:2.7.12]
    ... 41 more
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]
    at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
    at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:258)
    at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:174)
    at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:52)
    at mypackage.data.internal.mydao.add(Mydao.java:140)
    ... 51 more
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Not enough bytes to read 0th field java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]
    at com.datastax.driver.core.Responses$Error.asException(Responses.java:97)[120:com.datastax.driver.core:2.1.0]
    at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:110)[120:com.datastax.driver.core:2.1.0]
    at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:235)[120:com.datastax.driver.core:2.1.0]
    at com.datastax.driver.core.RequestHandler.onSet(RequestHandler.java:367)[120:com.datastax.driver.core:2.1.0]
    at com.datastax.driver.core.Connection$Dispatcher.messageReceived(Connection.java:584)[120:com.datastax.driver.core:2.1.0]
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:70)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:70)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)[118:org.jboss.netty:3.9.3.Final]
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)[118:org.jboss.netty:3.9.3.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_25]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_25]
    ... 1 more

最佳答案

驱动程序 v2.1.2 中的 UDT 存在一个已知问题,该问题将在 v2.1.3 中得到解决。与此同时,您可以尝试此处给出的解决方法:

https://datastax-oss.atlassian.net/browse/JAVA-500

如:

Cluster.builder().withProtocolVersion(ProtocolVersion.V3)

看看是否有帮助

关于java - Datastax cassandra QueryBuilder 插入错误(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169211/

相关文章:

java - 如何实现AsyncTask连接服务器并解析JSON

javascript - 无法从 JSON 对象获取数据

c# - 以 JSON 格式返回文件数据

java - Ignite C++ 客户端用于 cassandra 集成

java - 在 viewpager 中查看所有 View 时如何显示按钮?

java - Java 中的 FFMPEG 问题

cassandra - 我们需要在 Cassandra 中对模型进行非规范化吗?

insert - 如何将时间序列数据插入Cassandra

java - 为什么访问规则不适用于非根组?

java - 不改变 boolean 值