“NoSuchMethodErrors” due to multiple versions of com.fasterxml.jackson.core:jackson-core:jar
Bing-ok opened this issue · 2 comments
Issue description
Hi, there are multiple versions of com.fasterxml.jackson.core:jackson-core in Quicksql\client. As shown in the following dependency tree, library com.fasterxml.jackson.core:jackson-core:2.9.8 is transitively introduced by org.apache.calcite.avatica:avatica-server:1.15.0, but has been managed to be version 2.6.5.
However, several methods defined in shadowed version com.fasterxml.jackson.core:jackson-core:2.9.8 are referenced by client project via org.apache.calcite.avatica:avatica-server:1.15.0, but missing in the actually loaded version com.fasterxml.jackson.core:jackson-core:2.6.5.
For instance, the following missing method(defined in com.fasterxml.jackson.core:jackson-core:2.9.8) is actually referenced by Quicksql\client, which will introduce a runtime error(i.e., "NoSuchMethodErrors") into Quicksql.
1. com.fasterxml.jackson.core.base.ParserMinimalBase: void reportOverflowInt() is invoked by Quicksql\client via the following path:
paths------
<com.qihoo.qsql.client.QuicksqlRemoteMeta$15: org.apache.calcite.avatica.Meta$ExecuteResult call()> Quicksql\client\target\classes
<org.apache.calcite.avatica.remote.JsonService: org.apache.calcite.avatica.remote.Service$ExecuteResponse apply(org.apache.calcite.avatica.remote.Service$ExecuteRequest)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<org.apache.calcite.avatica.remote.JsonService: java.lang.Object decode(java.lang.String,java.lang.Class)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object readValue(java.lang.String,java.lang.Class)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object _readMapAndClose(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.JavaType)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.deser.std.EnumDeserializer: java.lang.Object deserialize(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.util.TokenBuffer$Parser: int getIntValue()> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.util.TokenBuffer$Parser: int _convertNumberToInt(java.lang.Number)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.core.base.ParserMinimalBase: void reportOverflowInt()>
2. com.fasterxml.jackson.core.JsonParser: boolean isNaN() is invoked by Quicksql\client via the following path:
paths------
<com.qihoo.qsql.client.QuicksqlRemoteMeta$15: org.apache.calcite.avatica.Meta$ExecuteResult call()> Quicksql\client\target\classes
<org.apache.calcite.avatica.remote.JsonService: org.apache.calcite.avatica.remote.Service$ExecuteResponse apply(org.apache.calcite.avatica.remote.Service$ExecuteRequest)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<org.apache.calcite.avatica.remote.JsonService: java.lang.Object decode(java.lang.String,java.lang.Class)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object readValue(java.lang.String,java.lang.Class)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object _readMapAndClose(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.JavaType)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.deser.std.NumberDeserializers$NumberDeserializer: java.lang.Object deserialize(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.core.JsonParser: boolean isNaN()>
3. com.fasterxml.jackson.core.JsonGenerator: void writeStartObject(java.lang.Object) is invoked by Quicksql\client via the following path:
paths------
<com.qihoo.qsql.client.QuicksqlRemoteMeta$15: org.apache.calcite.avatica.Meta$ExecuteResult call()> Quicksql\client\target\classes
<org.apache.calcite.avatica.remote.JsonService: org.apache.calcite.avatica.remote.Service$ExecuteResponse apply(org.apache.calcite.avatica.remote.Service$ExecuteRequest)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<org.apache.calcite.avatica.remote.JsonService: java.lang.String encode(java.lang.Object)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<com.fasterxml.jackson.databind.ObjectMapper: void writeValue(java.io.Writer,java.lang.Object)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ObjectMapper: void _configAndWriteValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ser.DefaultSerializerProvider: void serializeValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ser.DefaultSerializerProvider: void _serialize(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object,com.fasterxml.jackson.databind.JsonSerializer)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ser.BeanSerializer: void serialize(java.lang.Object,com.fasterxml.jackson.core.JsonGenerator,com.fasterxml.jackson.databind.SerializerProvider)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.core.JsonGenerator: void writeStartObject(java.lang.Object)>
4. com.fasterxml.jackson.core.JsonGenerator: void writeFieldId(long) is invoked by Quicksql\client via the following path:
paths------
<com.qihoo.qsql.client.Driver: org.apache.calcite.avatica.remote.Service createService(org.apache.calcite.avatica.AvaticaConnection,org.apache.calcite.avatica.ConnectionConfig)> Quicksql\client\target\classes
<org.apache.calcite.avatica.remote.MockJsonService$Factory: org.apache.calcite.avatica.remote.Service create(org.apache.calcite.avatica.AvaticaConnection)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<org.apache.calcite.avatica.remote.JsonService: java.lang.String encode(java.lang.Object)> Repositories\org\apache\calcite\avatica\avatica-core\1.15.0\avatica-core-1.15.0.jar
<com.fasterxml.jackson.databind.ObjectMapper: void writeValue(java.io.Writer,java.lang.Object)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ObjectMapper: void _configAndWriteValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ser.DefaultSerializerProvider: void serializeValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ser.DefaultSerializerProvider: void _serialize(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object,com.fasterxml.jackson.databind.JsonSerializer)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.databind.ser.std.StdKeySerializers$Default: void serialize(java.lang.Object,com.fasterxml.jackson.core.JsonGenerator,com.fasterxml.jackson.databind.SerializerProvider)> Repositories\com\fasterxml\jackson\core\jackson-databind\2.6.5\jackson-databind-2.6.5.jar
<com.fasterxml.jackson.core.JsonGenerator: void writeFieldId(long)>
Suggested fixing solutions:
Upgrade dependency com.fasterxml.jackson.core:jackson-core from 2.6.5 to 2.9.8 in the pom file of Quicksql\client.
Thank you very much for your attention.
Best regards,
Dependency tree----
[INFO] com.qihoo.qsql:qsql-client:jar:0.7.0
[INFO] +- org.apache.calcite.avatica:avatica-server:jar:1.15.0:compile
[INFO] | +- org.apache.calcite.avatica:avatica-core:jar:1.15.0:compile
[INFO] | | +- (org.apache.calcite.avatica:avatica-metrics:jar:1.15.0:compile - omitted for duplicate)
[INFO] | | +- com.fasterxml.jackson.core:jackson-core:jar:2.6.5:compile (version managed from 2.9.8)
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.5:compile (version managed from 2.9.8)
[INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.5:compile (version managed from 2.9.8)
[INFO] | | | +- (com.fasterxml.jackson.core:jackson-annotations:jar:2.6.5:compile - version managed from 2.6.0; omitted for duplicate)
[INFO] | | | \- (com.fasterxml.jackson.core:jackson-core:jar:2.6.5:compile - version managed from 2.9.8; omitted for duplicate)
[INFO] | | +- com.google.protobuf:protobuf-java:jar:3.6.1:compile
[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.5.6:compile
[INFO] | | | +- (org.apache.httpcomponents:httpcore:jar:4.4.10:compile - omitted for duplicate)
[INFO] | | | +- commons-logging:commons-logging:jar:1.2:compile
[INFO] | | | \- commons-codec:commons-codec:jar:1.10:compile
[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.4.10:compile
[INFO] | | \- (org.slf4j:slf4j-api:jar:1.7.13:compile - version managed from 1.7.25; omitted for duplicate)
[INFO] | +- org.apache.calcite.avatica:avatica-metrics:jar:1.15.0:compile
[INFO] | | \- (org.slf4j:slf4j-api:jar:1.7.13:compile - version managed from 1.7.25; omitted for duplicate)
[INFO] | +- javax.servlet:javax.servlet-api:jar:3.0.1:compile (version managed from 4.0.1)
[INFO] | +- com.google.guava:guava:jar:19.0:compile (version managed from 14.0.1)
[INFO] | +- org.slf4j:slf4j-api:jar:1.7.13:compile
[INFO] | +- org.eclipse.jetty:jetty-security:jar:9.4.15.v20190215:compile
[INFO] | | \- (org.eclipse.jetty:jetty-server:jar:9.2.19.v20160908:compile - version managed from 9.4.15.v20190215; omitted for duplicate)
[INFO] | +- org.eclipse.jetty:jetty-server:jar:9.2.19.v20160908:compile
[INFO] | | +- (javax.servlet:javax.servlet-api:jar:3.0.1:compile - version managed from 3.1.0; omitted for duplicate)
[INFO] | | \- org.eclipse.jetty:jetty-io:jar:9.2.19.v20160908:compile
[INFO] | | \- (org.eclipse.jetty:jetty-util:jar:9.2.19.v20160908:compile - version managed from 9.4.15.v20190215; omitted for duplicate)
[INFO] | \- org.eclipse.jetty:jetty-util:jar:9.2.19.v20160908:compile
[INFO] +- org.eclipse.jetty:jetty-http:jar:9.2.19.v20160908:compile
[INFO] | \- (org.eclipse.jetty:jetty-util:jar:9.2.19.v20160908:compile - version managed from 9.4.15.v20190215; omitted for duplicate)
[INFO] \- junit:junit:jar:4.12:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
@fangyuefy Could you please help me review this issue? Thank you very much.
hello,Jackson-core was upgraded from 2.6.5 to 2.10.0, corresponding to the Avatica Server 1.17.0 version