Java JsonParseException:意外字符(';';(代码60)):应为有效值(数字、字符串、数组、对象、';true';、';false';或';null';)
我有一个程序,可以将新患者插入服务器内docker容器中的HBase。在我尝试将连接IP更改为phoenix查询服务器以运行JUnit测试之前,一切都正常。我正在属性文件中设置URL,如下所示:Java JsonParseException:意外字符(';';(代码60)):应为有效值(数字、字符串、数组、对象、';true';、';false';或';null';),java,maven,exception,junit,phoenix,Java,Maven,Exception,Junit,Phoenix,我有一个程序,可以将新患者插入服务器内docker容器中的HBase。在我尝试将连接IP更改为phoenix查询服务器以运行JUnit测试之前,一切都正常。我正在属性文件中设置URL,如下所示: java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, Stri
java.lang.RuntimeException: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: java.io.StringReader@1105b1f; line: 1, column: 2]
...
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at [Source: java.io.StringReader@1105b1f; line: 1, column: 2]
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-server</artifactId>
<version>4.7.0-HBase-1.1</version>
</dependency>
但我不知道是否必须为phoenix瘦客户端添加其他内容。如果必须的话,我找不到依赖关系,所以我只是假设它包括在内
感谢您的帮助
编辑:
这是服务器抛出的异常:
> > 2016-05-05 08:52:11,979 WARN org.eclipse.jetty.server.HttpChannel: / java.lang.RuntimeException:
> org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException:
> While parsing a protocol message, the input ended unexpectedly in the
> middle of a field. This could mean either that the input has been
> truncated or that an embedded message misreported its own length.
> at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:98)
> at org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:38)
> at org.apache.calcite.avatica.server.AvaticaProtobufHandler.handle(AvaticaProtobufHandler.java:68)
> at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
> at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
> at org.eclipse.jetty.server.Server.handle(Server.java:497)
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
> at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:245)
> at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
> at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
> at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
> at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException:
> While parsing a protocol message, the input ended unexpectedly in the
> middle of a field. This could mean either that the input has been
> truncated or that an embedded message misreported its own length.
> at org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:70)
> at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipRawBytesSlowPath(CodedInputStream.java:1293)
> at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipRawBytes(CodedInputStream.java:1276)
> at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipField(CodedInputStream.java:197)
> at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipMessage(CodedInputStream.java:273)
> at org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipField(CodedInputStream.java:200)
> at org.apache.calcite.avatica.proto.Common$WireMessage.<init>(Common.java:11627)
> at org.apache.calcite.avatica.proto.Common$WireMessage.<init>(Common.java:11595)
> at org.apache.calcite.avatica.proto.Common$WireMessage$1.parsePartialFrom(Common.java:12061)
> at org.apache.calcite.avatica.proto.Common$WireMessage$1.parsePartialFrom(Common.java:12055)
> at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:137)
> at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:168)
> at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:180)
> at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:185)
> at org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
> at org.apache.calcite.avatica.proto.Common$WireMessage.parseFrom(Common.java:11760)
> at org.apache.calcite.avatica.remote.ProtobufTranslationImpl.parseRequest(ProtobufTranslationImpl.java:236)
> at org.apache.calcite.avatica.remote.ProtobufHandler.decode(ProtobufHandler.java:42)
> at org.apache.calcite.avatica.remote.ProtobufHandler.decode(ProtobufHandler.java:28)
> at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:95)
> ... 11 more
>2016-05-05 08:52:11979警告org.eclipse.jetty.server.HttpChannel:/java.lang.RuntimeException:
>org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException:
>解析协议消息时,输入意外地以
>田中。这可能意味着输入已被删除
>被截断或嵌入的消息误报了自己的长度。
>位于org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:98)
>位于org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:38)
>位于org.apache.calcite.avatica.server.avaticprotobufhandler.handle(avaticprotobufhandler.java:68)
>位于org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
>位于org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
>位于org.eclipse.jetty.server.server.handle(server.java:497)
>位于org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
>位于org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:245)
>位于org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
>位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
>位于org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
>在java.lang.Thread.run(Thread.java:745)处,由以下原因引起:org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException:
>解析协议消息时,输入意外地以
>田中。这可能意味着输入已被删除
>被截断或嵌入的消息误报了自己的长度。
>位于org.apache.calcite.avatica.com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:70)
>在org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipRawBytesSlowPath(CodedInputStream.java:1293)
>位于org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipRawBytes(CodedInputStream.java:1276)
>位于org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipField(CodedInputStream.java:197)
>位于org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipMessage(CodedInputStream.java:273)
>位于org.apache.calcite.avatica.com.google.protobuf.CodedInputStream.skipField(CodedInputStream.java:200)
>位于org.apache.calcite.avatica.proto.Common$WireMessage(Common.java:11627)
>位于org.apache.calcite.avatica.proto.Common$WireMessage(Common.java:11595)
>位于org.apache.calcite.avatica.proto.Common$WireMessage$1.parsePartialFrom(Common.java:12061)
>位于org.apache.calcite.avatica.proto.Common$WireMessage$1.parsePartialFrom(Common.java:12055)
>位于org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:137)
>位于org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:168)
>位于org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:180)
>位于org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:185)
>位于org.apache.calcite.avatica.com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
>位于org.apache.calcite.avatica.proto.Common$WireMessage.parseFrom(Common.java:11760)
>位于org.apache.calcite.avatica.remote.protobuftransationimpl.parseRequest(protobuftransationimpl.java:236)
>位于org.apache.calcite.avatica.remote.ProtobufHandler.decode(ProtobufHandler.java:42)
>位于org.apache.calcite.avatica.remote.ProtobufHandler.decode(ProtobufHandler.java:28)
>位于org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:95)
> ... 还有11个
您是否正确升级了Phoenix服务器?看起来它试图同时使用JSON和协议缓冲协议来连接。它应该是一个或另一个。检查您是否正确提供了授权、标题和其他参数
我通过检查这些步骤解决了。您可能正在恢复html。我不明白为什么调试不能帮上忙。。。但您表示希望返回的xml不是json。如果调试不起作用,您可以尝试使用网络嗅探器捕获服务器响应。在我的情况下,这是由于服务器关闭并抛出404未找到。请检查您的响应代码。我根本没有更改序列化。我想这就是问题所在。在进行一些调试时,我看到默认情况下它将json设置为phoenix.queryserver.serialization,但我不知道如何更改它。它在连接中做了类似的事情吗?properties.setProperty(“phoenix.queryserver.serialization”、“PROTOBUF”);尝试在jdbc连接字符串中添加
serialization=PROTOBUF
。虽然我认为如果服务器和客户机都是4.7版,那么这将是默认的。显然,JSON是默认的(或者“其他人”正在某处更改它,我不知道!)。非常感谢。