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());
}
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):
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):
Actual dependency path:
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