Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Using the unexpected method, due to dependency conflicts on com.fasterxml.jackson.core:jackson-core #180

@HelloCoCooo

Description

@HelloCoCooo

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());
    }

database

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions