Search code examples
javaswaggerjackson-databind

Faster XML dependencies that works with Swagger


What's the Faster XML version that works with Swagger?

java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedClass.construct(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/AnnotationIntrospector;Lcom/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver;)Lcom/fasterxml/jackson/databind/introspect/AnnotatedClass;
    at org.restlet.ext.platform.internal.introspection.application.RepresentationCollector.addRepresentation(RepresentationCollector.java:124)
    at org.restlet.ext.platform.internal.introspection.application.ResourceCollector.completeOperationInput(ResourceCollector.java:270)
    at org.restlet.ext.platform.internal.introspection.application.ResourceCollector.completeOperation(ResourceCollector.java:192)
    at org.restlet.ext.platform.internal.introspection.application.ResourceCollector.collectResource(ResourceCollector.java:125)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collectForFinder(RestletCollector.java:100)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collect(RestletCollector.java:64)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collectForRoute(RestletCollector.java:116)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collectForRouter(RestletCollector.java:136)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collect(RestletCollector.java:55)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collectForFilter(RestletCollector.java:80)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collect(RestletCollector.java:61)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collectForFilter(RestletCollector.java:80)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collect(RestletCollector.java:61)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collectForFilter(RestletCollector.java:80)
    at org.restlet.ext.platform.internal.introspection.application.RestletCollector.collect(RestletCollector.java:61)
    at org.restlet.ext.platform.internal.introspection.application.ApplicationIntrospector.getDefinition(ApplicationIntrospector.java:169)
    at org.restlet.ext.swagger.Swagger2SpecificationRestlet.getDefinition(Swagger2SpecificationRestlet.java:169)
    at org.restlet.ext.swagger.Swagger2SpecificationRestlet.getSwagger(Swagger2SpecificationRestlet.java:189)
    at org.restlet.ext.swagger.Swagger2SpecificationRestlet.handle(Swagger2SpecificationRestlet.java:215)

My project dependencies at the moment:

[INFO] +- org.restlet.jee:org.restlet.ext.swagger:jar:2.4.0:compile
[INFO] |  +- org.scala-lang:scala-library:jar:2.9.1:compile
[INFO] |  +- org.scala-lang:scalap:jar:2.9.1:compile
[INFO] |  |  \- org.scala-lang:scala-compiler:jar:2.9.1:compile
[INFO] |  +- com.wordnik:swagger-models:jar:1.5.3-M1:compile
[INFO] |  +- javax.ws.rs:javax.ws.rs-api:jar:2.0:compile
[INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-csv:jar:2.4.4:compile
[INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.4.4:compile
[INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.4.4:compile
[INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.4.4:compile
[INFO] |  +- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.4.4:compile
[INFO] |  +- com.fasterxml.jackson.module:jackson-module-jsonSchema:jar:2.4.4:compile

And

[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.10.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.10.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-core:jar:2.10.0:compile

I'm trying to figure out what could be wrong. What could have mixed up here?


Solution

  • This could work:

    With this version of Jackson:

    <jackson.version>2.4.4</jackson.version>

    And

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jdk8</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    

    The idea is to make sure to have the same Jackson version with the one that Restlet swagger have in it's dependency tree.