【问题标题】:What is correct version or jackson for spring?春天的正确版本或杰克逊是什么?
【发布时间】:2011-01-28 05:37:07
【问题描述】:

我正在使用杰克逊转换器 (MappingJacksonHttpMessageConverter) 从 spring 控制器消费和生成 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 文件(仅限 sn-ps)

<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>

我可以在 spring-web pom 文件中看到 jackson 版本被提及为 1.4.2 并且我使用过的同样的版本仍然抛出关于找不到方法的异常。我使用的是正确的版本吗?

【问题讨论】:

    标签: java spring maven-2 jackson


    【解决方案1】:

    您似乎缺少 jackson-core 依赖项。你需要它以及jackson-mapper

    1.4.x 版本应该没问题,虽然升级到更新版本应该不会有什么坏处。

    【讨论】:

    • 我认为 Maven 也会引入核心,但如果某些 lib 依赖于较旧的核心版本(可能是 1.1 或 1.3),版本协调可能会引入不兼容的核心版本。这对我来说是 Maven 的一个常见问题,跨传递性部门同步版本。
    【解决方案2】:

    我认为 Jackson 核心和映射器 jar 之间的版本不同(前者具有流解析器/生成器;后者具有数据绑定)。很难确保传递依赖项具有兼容的版本——虽然多个 Jackson 版本在 Spring(和大多数其他框架)中工作得很好,但 mapper 和 core 的版本具有更严格的依赖关系。

    特别是:核心版本不应该比映射器版本旧很多,因为较新的映射器版本依赖于核心中的新功能。逆向事变少;因此,使用较旧的映射器版本、较新的核心通常没问题(此时核心的变化速度也慢得多)。

    【讨论】:

      【解决方案3】:

      我发现了问题。

      使用 Jacson 版本 1.4.2 应该没有问题,因为 StaxMan 建议核心对于映射器是可靠的,因此它将自动解决,无需显式声明。

      现在回到问题。这是 jboss 中的类路径问题。我在同一服务器上部署了两个 Web 应用程序,一个依赖于 jacson 版本 1.1.1,另一个依赖于 1.4.2。我还没有解决方案,所以我发布了另一个与 Jboss 相关的question

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        • 2021-10-22
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 2017-12-04
        相关资源
        最近更新 更多