2011-01-28 102 views
3

我正在使用傑克遜轉換器(MappingJacksonHttpMessageConverter)從彈簧控制器中消費和生成json數據。但是,當調用控制器拋出以下異常。什麼是春季正確的版本或傑克遜?

Caused by: java.lang.NoSuchMethodError: org.codehaus.jackson.type.JavaType.isConcrete()Z 
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:80) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:266) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:198) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider.hasValueDeserializerFor(StdDeserializerProvider.java:152) 
at org.codehaus.jackson.map.ObjectMapper.canDeserialize(ObjectMapper.java:829) 

我的代碼:

的Spring bean文件:

abc.CartType abc.CartResponseType

POM文件(僅片段)

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <compileSource>1.5</compileSource> 
    <org.springframework.version>3.0.2.RELEASE</org.springframework.version> 
    <jboss.server.name>network-epro</jboss.server.name> 
</properties> 


    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <version>${org.springframework.version}</version> 
    <scope>test</scope> 
    </dependency> 
    <dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.4</version> 
    <scope>provided</scope> 
    </dependency> 
    <dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.1</version> 
    <scope>provided</scope> 
    </dependency> 
    <dependency> 
    <groupId>taglibs</groupId> 
    <artifactId>standard</artifactId> 
    <version>1.1.2</version> 
    </dependency> 
    <dependency> 
    <groupId>jstl</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.1.2</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-api</artifactId> 
    <version>2.1.4</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-core</artifactId> 
    <version>2.1.4</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.tiles</groupId> 
    <artifactId>tiles-jsp</artifactId> 
    <version>2.1.4</version> 
    </dependency> 
    <dependency> 
    <groupId>commons-lang</groupId> 
    <artifactId>commons-lang</artifactId> 
    <version>2.2</version> 
    </dependency> 
    <dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.1.1</version> 
    </dependency> 
    <dependency> 
    <groupId>commons-collections</groupId> 
    <artifactId>commons-collections</artifactId> 
    <version>3.2</version> 
    </dependency> 
    <dependency> 
    <groupId>sso</groupId> 
    <artifactId>casclient</artifactId> 
    <version>2.2.1</version> 
    </dependency> 
    <dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>1.1.5.1</version> 
    </dependency> 
    <dependency> 
    <groupId>commons-codec</groupId> 
    <artifactId>commons-codec</artifactId> 
    <version>1.3</version> 
    </dependency> 
    <dependency> 
    <groupId>com.sun.xml.bind</groupId> 
    <artifactId>jaxb-impl</artifactId> 
    <version>2.2</version> 
    </dependency> 
    <dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.15</version> 
    <exclusions> 
    <exclusion> 
    <groupId>com.sun.jdmk</groupId> 
    <artifactId>jmxtools</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>com.sun.jmx</groupId> 
    <artifactId>jmxri</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>javax.jms</groupId> 
    <artifactId>jms</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    </exclusion> 
    </exclusions> 
    </dependency> 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.5</version> 
    <scope>test</scope> 
    </dependency> 
    <dependency> 
    <groupId>net.sf.json-lib</groupId> 
    <artifactId>json-lib-ext-spring</artifactId> 
    <version>1.0.2</version> 
    </dependency> 

    <dependency> 
    <groupId>xpp</groupId> 
    <artifactId>xpp</artifactId> 
    <version>2.3.0</version> 
    </dependency> 

    <!-- http://code.google.com/p/jsonp-java/ --> 
    <dependency> 
    <groupId>org.jsonp</groupId> 
    <artifactId>jsonp</artifactId> 
    <version>1.0.1</version> 
    </dependency> 
    <dependency> 
    <groupId>email</groupId> 
    <artifactId>email-client</artifactId> 
    <version>2.0.0</version> 
    <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>velocity</groupId> 
     <artifactId>velocity</artifactId> 
     <version>1.4</version> 
    </dependency> 
    <dependency> 
    <groupId>cglib</groupId> 
    <artifactId>cglib</artifactId> 
    <version>2.2</version> 
    <type>jar</type> 
    <scope>compile</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate</artifactId> 
    <version>3.2.2.ga</version> 
    <type>jar</type> 
    <scope>compile</scope> 
    </dependency> 
    <!-- 
    Jboss client dependancy. 
    --> 
    <dependency> 
    <groupId>jboss</groupId> 
    <artifactId>jbossall-client</artifactId> 
    <version>4.2.2.GA</version> 
    <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.4.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.ws</groupId> 
     <artifactId>spring-oxm-tiger</artifactId> 
     <version>1.5.9</version> 
    </dependency> 

我可以在春天的Web POM文件傑克遜版本中看到被提及爲1.4.2,並同我用它仍然拋出未發現異常有關方法。我使用正確的版本嗎?

回答

1

我發現了這個問題。

使用Jacson版本1.4.2應該沒有問題,因爲StaxMan建議核心對於映射器是可靠的,因此它將自動解析,無需明確聲明。

現在回到問題。這是jboss中的類路徑問題。我有兩個Web應用程序部署在同一個服務器上,依賴於jacson versioin 1.1.1和另一個1.4.2。我還沒有解決方案,所以我發佈了另一個與Jboss相關的question

1

您似乎錯過了jackson-core依賴項。你需要這個以及jackson-mapper

1.4.x版本應該沒問題,但不應該將其升級到更新的版本。

+2

我認爲Maven也會引入核心,但如果某些lib取決於較舊的核心版本(可能爲1.1或1.3),那麼可能版本和解會帶來不兼容的核心版本。對於Maven來說,這是一個常見的問題,它在跨傳輸層次上同步版本。 – StaxMan 2011-01-28 19:35:56

1

我認爲Jackson核心和mapper jars(前者有流解析器/生成器;後者數據綁定)有不同的版本。很難確保傳遞依賴關係具有兼容版本 - 雖然多個Jackson版本在Spring(以及大多數其他框架)中都可以很好地工作,但mapper和core版本有更嚴格的依賴關係。

具體而言:核心版本不應該比版本映射器更舊,因爲更新的映射器版本依賴於核心中的新功能。反向事宜少;所以通常使用較舊的mapper版本,較新的核心(核心在這一點上的變化速度要慢得多)。