2011-01-28 39 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版本,较新的核心(核心在这一点上的变化速度要慢得多)。