3

I've been working on making some changes to a REST service. When I deploy the .war file to Tomcat, I get a variety of exception messages in the Tomcat logs. I assume it is related to the java.lang.ClassNotFoundException:javax.ws.rs.ProcessingException I am encountering. I can't for the life of me resolve it.

I've tried numerous versions of javax.ws.rs and I currently use MAVEN to download my dependencies.

Environment information:

Server version: Apache Tomcat/7.0.54
OS Name:        Linux - CentOS 7
OS Version:     3.10.0-229.el7.x86_64
JVM Version:    1.8.0_242-b08

My Web.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>RemoteHost</display-name>
    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>edu.usafa.csoc.ftn.remotehost.ApplicationConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages;org.codehaus.jackson.jaxrs</param-name>
        <param-value>edu.usafa.csoc.ftn.remotehost.ApplicationConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

My pom.xml file:

<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>edu.csmeicomp.ceasar</groupId>
  <artifactId>RemoteHost</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>ftn-RemoteHost</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</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>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.3.3</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

AND last but not least the log output from TOMCAT

INFO: Deploying web application archive /var/lib/tomcat/webapps/RemoteHost.war
Mar 10, 2020 1:38:37 PM org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start:
      org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/RemoteHost]]
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/ProcessingException
      at java.lang.ClassLoader.defineClass1(Native Method)
      at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
      at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
      at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
      at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
      at java.lang.Class.getDeclaredFields0(Native Method)
      at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
      at java.lang.Class.getDeclaredFields(Class.java:1916)
      at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
      at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:261)
      at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:140)
      at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
      at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:403)
      at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:879)
      at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:374)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
      at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355)
      at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      ... 10 more
    Caused by: java.lang.ClassNotFoundException: javax.ws.rs.ProcessingException
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
      at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
      ... 31 more
      Mar 10, 2020 1:38:37 PM org.apache.catalina.startup.HostConfig deployWAR
SEVERE: Error deploying web application archive /var/lib/tomcat/webapps/RemoteHost.war
      java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/RemoteHost]]
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1083)
      at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1880)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      Mar 10, 2020 1:38:37 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive /var/lib/tomcat/webapps/RemoteHost.war has finished in 5,743 m

Thanks for the help, definitely been struggling with this issue for sometime now. If more information is needed please ask and I'll update my post.

I've looked at the following to try and resolve but none of the solutions are working:

My Solution: So after a great deal of experimentation, re-adding dependancies, dumping jars and using different versions I was able to solve the problem. I think my issue had something to do with incompatible javax and jersey versions.

New 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>edu.csmeicomp.ceasar</groupId>
  <artifactId>RemoteHost</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>RemoteHost</name>
  <url>http://maven.apache.org</url>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
        </dependency>
    <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
    </dependency>
    </dependencies>


    <properties>
        <jersey.version>2.22.1</jersey.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>
CSCMEICOMP
  • 51
  • 7
  • Can you edit your answer and include a list the libraries and versions you have loaded with your project? Have you dumped them to see if there are any duplicate references. For example do any include any classes that get loaded first and cover up things in your class path? Have you dumped all libraries and grepped (or looked at) the output to see if that class is anywhere? Any version dependency analysis at all? – clearlight Mar 10 '20 at 20:43
  • I meant have you examined the contents of all the jars? – clearlight Mar 10 '20 at 20:45
  • [Dumpclass](https://github.com/hengyunabc/dumpclass) – clearlight Mar 10 '20 at 20:48
  • [Get All Classes of Classpath](https://stackoverflow.com/questions/3222638/get-all-of-the-classes-in-the-classpath) – clearlight Mar 10 '20 at 20:50
  • [ClasspathInspector.java](https://gist.github.com/pal/110024/8a845866d3aad6865a4d2cad2b3eff112b61b1d5) – clearlight Mar 10 '20 at 20:50
  • That jersey stack stuff can be a nightmare to find out the dependencies for. Been there for a work assignment for a huge project once. But you can dig it out. Just list all the jars figure out their versions. Try to figure out their version compatibilities. Look for missing things, classpath errors, overrides, etc.... – clearlight Mar 10 '20 at 20:54
  • 1
    You're right that was a nightmare! I edited my original post with my end solution. – CSCMEICOMP Mar 17 '20 at 15:01
  • To earn reputation points and help others better, I suggest breaking out the solution (remove it from the question) and post it as a complete answer. Then you can accept your own answer (by clicking the checkmark next to it) to show it is the accepted solution. (When others accept your answers it gets 15 points, but when you accept your own 0 points, but it still clarifies that it's the solution). Meanwhile people stopping by, myself included may decide to upvote your answer if it is clear and they can see how to make it help them. – clearlight Mar 17 '20 at 16:01
  • @CSEMEICOMP BTW: StackOverflow says it's fine to post an answer or solution in Q & A format where you ask a question and then provide an answer, BTW. Click the questionmark icon at the top of the page to go to the help page and read about reputation and badges and site privileges. This is a community run community moderated meritocracy and there are some fun perks for participating. – clearlight Mar 17 '20 at 16:03

0 Answers0