Reputation: 99
My java class throws this error when deployed on tomcat:
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.getValueAsString()Ljava/lang/String; org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556)
When tested locally the class runs perfectly well. I understand that there might be a conflict of Jackson version, but I can't find out.
Here is an extract of my pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.skylads.skott.webapp</groupId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Skylads CRM App</name>
<description>CRM App integrating various features</description>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>resources</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<artifactId>crm</artifactId>
<dependencies>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-oauth2</artifactId>
<exclusions>
<exclusion>
<artifactId>jackson-core</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
<version>v2-rev98-1.20.0</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-plus</artifactId>
<version>v1-rev323-1.21.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-java6</artifactId>
<version>1.21.0</version>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson</artifactId>
<version>1.20.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client</artifactId>
<version>1.21.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>7.0.35</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.scribe</groupId>
<artifactId>scribe</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.1.3</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
App runs on Tomcat 7.0.
Edit: Full pom.xml
added
Any help very much appreciated.
Upvotes: 4
Views: 5100
Reputation: 99
OK guys, i'm out of this nightmare. I used http://jhades.org/ to identify the overlapping jars, went into web-inf and removed old jars that were conflicting and creating the issue.
Maven is very cool but doesn't solve everything, I lost 3hours+ on this issue...
Thanks again for your contribution that were very helpful.
Soufian
Upvotes: 2
Reputation: 1179
You have not provided extensive information about your question but I can tell you that version 2.1.0 is the first version to have the getValueAsString method. The version in your pom.xml also does have it. Older versions do not have it and this where your problem is. So according to my experience, this is clearly a problem that you have two jackson-core jar versions running and the class loaders are getting the older version first. You need to do something like:
$ find . -name "*jackson*"
in your tomcat 7 directory. Find the older version and remove it from your integration. Read the tomcat 7 webpage to know more about classloaders for your tomcat version.
Upvotes: 0
Reputation: 9546
As you said on tomcat you are using a different version of jackson-core than in your build. Find out what you use in maven with mvn help:effective-pom Than have a look what you have packaged in your war. Its also possible,that tomcat uses its own jackson library that makes the problem.
Upvotes: 0