2016-05-14 3 views
1

Ich habe ein Problem mit der neuesten Version von Camel und eine REST-DSL-Route. Der vollständige Code kann hier gefunden und ausgeführt werden: https://github.com/mikevoxcap/nvisia-catalog-camel-service. Ich erhalte eine Ausnahme, wenn ich versuche, um die Strecke zu laufen, zugrunde liegende Ursache unter:Problem mit Camel und Jackson Dependency

Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedMember.getType()Lcom/fasterxml/jackson/databind/JavaType; 
.... 
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:926) 
    at org.apache.camel.component.jackson.JacksonDataFormat.marshal(JacksonDataFormat.java:154) 
    at org.apache.camel.processor.MarshalProcessor.process(MarshalProcessor.java:69) 

Meine Frage ist, welche Version von Jackson soll ich nicht mehr sein Targeting diese Ausnahme zu erhalten.

ich in den folgenden Abhängigkeiten bin die:

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <spring.boot.version>1.3.5.RELEASE</spring.boot.version> 
    <camel.version>2.17.1</camel.version> 
    <java.version>1.8</java.version> 
</properties> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-dependencies</artifactId> 
      <version>${spring.boot.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-spring-boot</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-jackson</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-servlet</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-swagger-java</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 

    <!-- Testing --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-test-spring</artifactId> 
     <version>${camel.version}</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

Nach einiger Suche auf der Ausnahme zu tun erhielt ich haben einige Leute in diese Frage führen, wenn es um Versionskonflikt kommt. Ich habe bemerkt, dass die camel-jackson-Bibliothek jackson-modul-jaxb-Anmerkungen 2.7.2 enthält, aber die restlichen jackson-Bibliotheken sind 2.6.6. Ich habe versucht, jackson-module-jaxb-annotations 2.7.2 auszuschließen und dann 2.6.6 direkt einzubeziehen, aber das führte immer noch zu der Ausnahme.

Mein Weg ist relativ einfach:

// Definition of the get catalog item endpoint 
    rest("/catalogItem"). 
     // This is a GET method call for getting a catalog item by ID. 
    get("{id}"). 
     // Description of what this method does 
     description("Retrieve a catalog item by ID"). 
     // Define the output type that will be returned from this method 
     outType(CatalogItem.class) 
     // Define where the message is routed to as a URI. Here we use a 
     // Spring Bean and define the bean method to invoke. Note that Camel 
     // has converted the ID placeholder from the URL into a header 
     // entry. 
     .to("bean:catalogService?method=getCatalogItem(${header.id})"); 

Mein Objekt als JSON-Typ verwendet wird, auch ziemlich einfach:

public class CatalogItem { 

    private int id; 
    private double price; 
    private String catalogItemType; 
    private List<CatalogItemAttribute> attributes; 

public class CatalogItemAttribute { 

    private String attributeName; 
    private String attributeValue; 
+0

Dieser Fehler 'Verursacht durch: java.lang.NoSuchMethodError' zeigt an, dass entweder die falschen Methodennamen verwenden oder eine Version Ihrer Abhängigkeiten verwenden, die nicht mehr diese Methode oder noch nicht umgesetzt haben Sie verwenden Bibliotheksversion, die es nicht implementiert hat. –

+0

@JorgeCampos Ja und das ist, was meine Frage hier ist. Die Jackson Annotations-Abhängigkeit ist eine höhere Version, wenn das POM aufgelöst wird. Ich versuche herauszufinden, ob ich die Core-Jackson-Bibliotheken ausschließen und die Version generell auf 2.7.2 erhöhen sollte, ob es ein Downgrade auf eine Version unter 2.6.6 geben muss. –

+1

Also habe ich Ausschlüsse für Jackson-Annotationen, Jackson-Core und Jackson-Databind zu den Spring-Boot-Starter-Web-, Spring-Boot-Starter-Aktor-, Camel-Jackson- und Camel-Swagger-Java-Abhängigkeiten hinzugefügt. Dann habe ich speziell die Abhängigkeiten für diese drei Bibliotheken mit 2.7.2 definiert und der Code funktioniert jetzt. Nach ein paar Recherchen scheint dies ein Problem mit Boot mehr als Camel zu sein. Sieht wie 1.4 von Boot-Updates zu 2.7 von Jackson aus, also muss ich das jetzt als die Antwort für jetzt geben. –

Antwort

4

Während ich etwas Beamten nicht von Camel gefunden, es sieht aus So wird sich das Problem lösen, sobald Spring Boot 1.4 veröffentlicht wird, da es zur Unterstützung von Jackson 2.7 verschoben wird. In der Zwischenzeit habe ich meine Abhängigkeiten wie unten beschrieben aktualisiert. Ich habe Ausschlüsse für die Jackson-Annotations-, Jackson-Core- und Jackson-Databind-Bibliotheken zu den Spring-Boot-Starter-Web-, Spring-Boot-Starter-Aktor-, Camel-Jackson- und Camel-Swagger-Java-Abhängigkeiten hinzugefügt. Dann habe ich die drei Jackson-Abhängigkeiten mit 2.7.2 angegeben.

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <artifactId>jackson-annotations</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jackson-core</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jackson-databind</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
     <exclusions> 
      <exclusion> 
       <artifactId>jackson-databind</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-spring-boot</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-jackson</artifactId> 
     <version>${camel.version}</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>jackson-annotations</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jackson-core</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jackson-databind</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-servlet</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-swagger-java</artifactId> 
     <version>${camel.version}</version> 
     <exclusions> 
      <exclusion> 
       <artifactId>jackson-annotations</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jackson-core</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
      <exclusion> 
       <artifactId>jackson-databind</artifactId> 
       <groupId>com.fasterxml.jackson.core</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <artifactId>jackson-annotations</artifactId> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <version>2.7.2</version> 
    </dependency> 
    <dependency> 
     <artifactId>jackson-core</artifactId> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <version>2.7.2</version> 
    </dependency> 
    <dependency> 
     <artifactId>jackson-databind</artifactId> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <version>2.7.2</version> 
    </dependency> 

    <!-- Testing --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-test-spring</artifactId> 
     <version>${camel.version}</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies>