0

I have a web app that has been happliy running on GlassFish 3.1.2 but we are now moving to Tomcat 9.

The web app deployed successfully, but when trying access the inner parts we get this:

01-Aug-2019 15:47:21.082 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [ServletAdaptor] in web application [/myapp] threw load() exception
        java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
                at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
                at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
                at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)
                at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)
                at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
                at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1030)
                at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:971)
                at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4868)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5177)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1849)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)
                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
                at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
                at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
                at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:932)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:344)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)

The /opt/tomcat/webapps/myapp/WEB-INF/web.xml has this:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.yapp.rest.ws;com.myapp.licencing</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>
       <resource-ref>
      <res-ref-name>jdbc/CustDBInst</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
   </resource-ref>
</web-app>

The WEB-INF/lib directory contains the following:

/WEB-INF/lib/
asm-all-repackaged-2.2.0-b21.jar  javax.ws.rs-api-2.0.jar            org.eclipse.persistence.core.jar
cglib-2.2.0-b21.jar               jaxb-api-2.2.7.jar                 org.eclipse.persistence.dbws.jar
commons-codec-1.7.jar             jersey-client.jar                  org.eclipse.persistence.jpa.jar
eclipselink.jar                   jersey-common.jar                  org.eclipse.persistence.jpa.jpql.jar
guava-14.0.1.jar                  jersey-container-servlet-core.jar  org.eclipse.persistence.jpa.modelgen.processor.jar
hk2-api-2.2.0-b21.jar             jersey-container-servlet.jar       org.eclipse.persistence.moxy.jar
hk2-locator-2.2.0-b21.jar         jersey-entity-filtering-2.5.1.jar  org.eclipse.persistence.oracle.jar
hk2-utils-2.2.0-b21.jar           jersey-media-moxy-2.5.1.jar        org.osgi.core-4.2.0.jar
javax.annotation-api-1.2.jar      jersey-server.jar                  osgi-resource-locator-1.0.1.jar
javax.inject-2.2.0-b21.jar        ojdbc6.jar                         persistence-api-1.0.jar
javax.persistence.jar             org.eclipse.persistence.antlr.jar  validation-api-1.1.0.Final.jar
javax.servlet-api-3.0.1.jar       org.eclipse.persistence.asm.jar
TenG
  • 3,843
  • 2
  • 25
  • 42
  • 1
    If this answer (https://stackoverflow.com/questions/18086218/java-lang-classnotfoundexception-com-sun-jersey-spi-container-servlet-servletco) is correct, you seem to have configured a jersey 1.x class instead of a jersey 2.x, as suggested by your tag – second Aug 01 '19 at 17:35
  • Thanks. That worked. See my post below. – TenG Aug 01 '19 at 18:19

1 Answers1

0

Based on @second's suggestion, I changed the web.xml to replace the OLD SETTING with the NEW SETTING and it worked.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 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_3_0.xsd">

<!-- NEW SETTING -->
        <servlet>
            <servlet-name>ServletAdaptor</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.myapp.rest.ws;com.myapp.licencing</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

    <!-- OLD SETTING
            <servlet-name>ServletAdaptor</servlet-name>
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
            <init-param>
                <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
                <param-name>com.sun.jersey.config.property.packages</param-name>
                <param-value>com.myapp.rest.ws;com.myapp.licencing</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>
           <resource-ref>
          <res-ref-name>jdbc/CustDBInst</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
       </resource-ref>
    </web-app>
TenG
  • 3,843
  • 2
  • 25
  • 42