-
Notifications
You must be signed in to change notification settings - Fork 186
Using the unexpected method, due to dependency conflicts on com.fasterxml.jackson.core:jackson-core #180
Description
Hi, in database/rdf-properties, there are mulptiple versions of library com.fasterxml.jackson.core:jackson-core. However, according to Maven's dependency management strategy: "first declaration wins", only com.fasterxml.jackson.core:jackson-core:2.4.4 can be loaded, and com.fasterxml.jackson.core:jackson-core:2.9.6 will be shadowed.
Your project expects to reference the method <com.fasterxml.jackson.core.json.ReaderBasedJsonParser: getTokenLocation()Lcom/fasterxml/jackson/core/JsonLocation;> via com.fasterxml.jackson.core:jackson-databind:jar:2.9.6, which is included in the shaded version com.fasterxml.jackson.core:jackson-core:2.9.6 (original dependency path). However, this method is missing in the actual loaded versioncom.fasterxml.jackson.core:jackson-core:2.4.4. Surprisingly, it will not cause NoSuchMethodError at rumtime.
By further analyzing, I found that the caller(com.fasterxml.jackson.core:jackson-databind:jar:2.9.6) would invoke the method getTokenLocation() defined in com.fasterxml.jackson.core.json.ReaderBasedJsonParser's superclass, due to dynamic binding mechanism (actual dependency path).
However, methods <com.fasterxml.jackson.core.base.ParserBase: getTokenLocation()Lcom/fasterxml/jackson/core/JsonLocation;> and <com.fasterxml.jackson.core.json.ReaderBasedJsonParser: getTokenLocation()Lcom/fasterxml/jackson/core/JsonLocation;> have different implementations, which will lead to buggy behaviors-----
Code snippet of <com.fasterxml.jackson.core.json.ReaderBasedJsonParser: getTokenLocation()Lcom/fasterxml/jackson/core/JsonLocation;> in com.fasterxml.jackson.core:jackson-core:2.9.6 (shadowed but expected to invoke):
public JsonLocation getTokenLocation()
{
if (_currToken == JsonToken.FIELD_NAME) {
long total = _currInputProcessed + (_nameStartOffset-1);
return new JsonLocation(_getSourceReference(),
-1L, total, _nameStartRow, _nameStartCol);
}
return new JsonLocation(_getSourceReference(),
-1L, _tokenInputTotal-1, _tokenInputRow, _tokenInputCol);
}Code snippet of <com.fasterxml.jackson.core.base.ParserBase: getTokenLocation()Lcom/fasterxml/jackson/core/JsonLocation;> in com.fasterxml.jackson.core:jackson-core:2.4.4 (loaded version):
public JsonLocation getTokenLocation() {
return new JsonLocation(_ioContext.getSourceReference(),
-1L, getTokenCharacterOffset(), // bytes, chars
getTokenLineNr(),
getTokenColumnNr());
}Actual dependency path:
<com.bigdata.rdf.ServiceProviderHook: forceLoad()V> /home/wwww/sensor/unzip/database-BLAZEGRAPH_2_1_6_RC/rdf-properties/target/classes
<com.fasterxml.jackson.databind.MappingIterator: next()Ljava/lang/Object;> /home/wwww/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.MappingIterator: nextValue()Ljava/lang/Object;> /home/wwww/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.deser.BeanDeserializer: deserialize(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;Ljava/lang/Object;)Ljava/lang/Object;> /home/wwww/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.deser.BeanDeserializer: deserializeWithExternalTypeId(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;Ljava/lang/Object;)Ljava/lang/Object;> /home/wwww/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler: complete(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;Ljava/lang/Object;)Ljava/lang/Object;> /home/wwww/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar
<com.fasterxml.jackson.databind.util.TokenBuffer: asParser(Lcom/fasterxml/jackson/core/JsonParser;)Lcom/fasterxml/jackson/core/JsonParser;> /home/wwww/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar
<com.fasterxml.jackson.core.json.ReaderBasedJsonParser: getTokenLocation()Lcom/fasterxml/jackson/core/JsonLocation;>
Dependency tree--
[INFO] com.blazegraph:rdf-properties:jar:2.1.6-SNAPSHOT
[INFO] +- commons-io:commons-io:jar:2.1:compile
[INFO] +- org.openrdf.sesame:sesame-util:jar:2.8.11:compile
[INFO] | +- com.google.guava:guava:jar:18.0:compile
[INFO] | - org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO] +- org.openrdf.sesame:sesame-rio-rdfxml:jar:2.8.11:compile
[INFO] | +- org.openrdf.sesame:sesame-model:jar:2.8.11:compile
[INFO] | | - (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-rio-api:jar:2.8.11:compile
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | - (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-rio-datatypes:jar:2.8.11:runtime
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | - (org.openrdf.sesame:sesame-util:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-rio-languages:jar:2.8.11:runtime
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | | - (org.openrdf.sesame:sesame-util:jar:2.8.11:runtime - omitted for duplicate)
[INFO] | +- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | - (commons-io:commons-io:jar:2.4:compile - omitted for conflict with 2.1)
[INFO] +- org.openrdf.sesame:sesame-queryresultio-sparqljson:jar:2.8.11:compile
[INFO] | +- org.openrdf.sesame:sesame-queryresultio-api:jar:2.8.11:compile
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-query:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | +- (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | - (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- org.openrdf.sesame:sesame-query:jar:2.8.11:compile
[INFO] | | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | | - (org.openrdf.sesame:sesame-rio-api:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- (org.openrdf.sesame:sesame-model:jar:2.8.11:compile - omitted for duplicate)
[INFO] | +- (org.openrdf.sesame:sesame-util:jar:2.8.11:compile - omitted for duplicate)
[INFO] | - com.fasterxml.jackson.core:jackson-core:jar:2.4.4:compile
[INFO] +- com.github.jsonld-java:jsonld-java:jar:0.12.1:compile
[INFO] | +- (com.fasterxml.jackson.core:jackson-core:jar:2.9.6:compile - omitted for conflict with 2.4.4)
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.6:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] | | - (com.fasterxml.jackson.core:jackson-core:jar:2.9.6:compile - omitted for conflict with 2.4.4)
[INFO] | +- org.apache.httpcomponents:httpclient-osgi:jar:4.5.6: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-codec:commons-codec:jar:1.10:compile - omitted for duplicate)
[INFO] | | +- commons-codec:commons-codec:jar:1.10:compile
[INFO] | | +- org.apache.httpcomponents:httpmime:jar:4.5.6:compile
[INFO] | | | - (org.apache.httpcomponents:httpclient:jar:4.5.6:compile - omitted for duplicate)
[INFO] | | +- org.apache.httpcomponents:httpclient-cache:jar:4.5.6:compile
[INFO] | | | - (org.apache.httpcomponents:httpclient:jar:4.5.6:compile - omitted for duplicate)
[INFO] | | - org.apache.httpcomponents:fluent-hc:jar:4.5.6:compile
[INFO] | | - (org.apache.httpcomponents:httpclient:jar:4.5.6:compile - omitted for duplicate)
[INFO] | +- org.apache.httpcomponents:httpcore-osgi:jar:4.4.10:compile
[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.4.10:compile
[INFO] | | - org.apache.httpcomponents:httpcore-nio:jar:4.4.10:compile
[INFO] | | - (org.apache.httpcomponents:httpcore:jar:4.4.10:compile - omitted for duplicate)
[INFO] | +- (org.slf4j:slf4j-api:jar:1.7.25:compile - omitted for conflict with 1.7.10)
[INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.25:runtime
[INFO] | | - (org.slf4j:slf4j-api:jar:1.7.25:runtime - omitted for conflict with 1.7.10)
[INFO] | - (commons-io:commons-io:jar:2.6:compile - omitted for conflict with 2.1)
[INFO] +- org.semarglproject:semargl-sesame:jar:0.6.1:compile
[INFO] | +- org.semarglproject:semargl-core:jar:0.6.1:compile
[INFO] | +- org.semarglproject:semargl-rdfa:jar:0.6.1:compile
[INFO] | | +- (org.semarglproject:semargl-core:jar:0.6.1:compile - omitted for duplicate)
[INFO] | | - org.semarglproject:semargl-rdf:jar:0.6.1:compile
[INFO] | | - (org.semarglproject:semargl-core:jar:0.6.1:compile - omitted for duplicate)
[INFO] | - (org.openrdf.sesame:sesame-rio-api:jar:2.7.5:compile - omitted for conflict with 2.8.11)
[INFO] - log4j:log4j:jar:1.2.17:compile
Suggested solutions:
Solution: Declare version com.fasterxml.jackson.core:jackson-core:2.9.6 as a direct dependency.
Thanks.
Best regards,
Coco
