我面臨的最新版本的駱駝和REST DSL路線的問題。完整的代碼可以從這裏找到並運行:https://github.com/mikevoxcap/nvisia-catalog-camel-service。我發現了一個例外,當我嘗試運行路線,下面根本原因:問題與駱駝和傑克遜依賴
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)
我的問題是,傑克遜的版本,我應該把目標定到不再接收此異常。
我帶下面的依賴關係:
<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>
做我收到的例外在經過一番搜索,幾個人都遇到了這個問題,當涉及到版本衝突。我注意到camel-jackson庫引入了jackson-module-jaxb-annotations 2.7.2,但剩下的jackson庫在2.6.6。我試圖排除傑克遜模塊jaxb註釋2.7.2,然後直接包括2.6.6,但仍然導致異常。
我的路線是比較簡單的:
// 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})");
我對象被用作JSON類型也很簡單:
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;
此錯誤'造成的:java.lang.NoSuchMethodError'表明,要麼你使用了錯誤的方法名,或者你正在使用一個版本的依賴不再有實施此方法,或者尚未使用的是庫版本沒有實現。 –
@JorgeCampos是的,這就是我的問題在這裏。當解決POM問題時,傑克遜註釋依賴是更高版本。我試圖確定是否應該排除傑克遜核心庫,並將版本提高到2.7.2,如果需要降級到低於2.6.6的版本。 –
因此,我在jack-annotations,jackson-core和jackson-databind中添加了排除項到spring-boot-starter-web,spring-boot-starter-actuator,camel-jackson和camel-swagger-java依賴項。然後我用2.7.2專門定義了這三個庫的依賴關係,現在代碼可以工作。經過一番研究,這看起來比Boot更像Camel的問題。看起來像1.4的Boot更新到了Jackson的2.7,所以我現在只需要給出這個答案。 –