0

I'm new in jersey and trying to create project that uses rest web service and response me the json. following is my pom.xml

<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.modaltestapp</groupId>
    <artifactId>modaltestapp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.modaltestapp</groupId>
<artifactId>modaltestapp-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>modaltestapp-api Maven Webapp</name>
<url>http://maven.apache.org</url>

<properties>
    <slf4j.version>1.7.9</slf4j.version>
    <logback.version>1.1.2</logback.version>
</properties>
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.9</version>
    </dependency>



</dependencies>
<build>
    <finalName>modaltestapp-api</finalName>
</build>

web.xml

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Restful Web Application</display-name>


<servlet>
<servlet-name>helloworld</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.modaltestapp.service</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

And java file is:

 @GET
@Path("/print")
@Produces({ MediaType.APPLICATION_JSON }) // add MediaType.APPLICATION_XML
                                            // if you want XML as well
                                            // (don't forget
                                            // @XmlRootElement)
public List<RegistrationDto> getAllMessages() throws Exception {

    List<RegistrationDto> messages = new ArrayList<RegistrationDto>();

    RegistrationDto m = new RegistrationDto();

    m.setFirstName("Nabi");
    m.setLastName("Zamani");
    m.setAge(30);

    messages.add(m);

    System.out.println("getAllMessages(): found " + messages.size() + " message(s) on DB");

    return messages; // do not use Response object because this causes
                        // issues when generating XML automatically
}

but when I build and run app it shows me error:

 INFO: Starting Servlet Engine: Apache Tomcat/9.0.0.M21
 Jul 03, 2017 11:12:24 AM org.apache.catalina.core.ApplicationContext log
  INFO: Marking servlet [helloworld] as unavailable
 Jul 03, 2017 11:12:24 AM org.apache.catalina.core.StandardContext 
 loadOnStartup
 SEVERE: Servlet [helloworld] in web application [/modaltestapp-api] threw 
  load() exception
 java.lang.ClassNotFoundException: 
 com.sun.jersey.spi.container.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1109)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:508)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:489)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1050)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:989)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4921)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5231)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1439)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
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:953)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1439)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
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:953)
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:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:656)
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:355)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

Jul 03, 2017 11:12:24 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Jul 03, 2017 11:12:24 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Jul 03, 2017 11:12:24 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 317 ms

How can I fix this? I'm using Apache Tomcat 9.

halfer
  • 19,824
  • 17
  • 99
  • 186
Unnati
  • 71
  • 1
  • 12

2 Answers2

0

You can follow this post to solve your issue.Make sure you have all the jars.I see that your pom has this maven dependency "jersey-servlet"is missing.

 <groupId>com.sun.jersey</groupId>
 <artifactId>jersey-servlet</artifactId>
 <version>1.17</version> 
Aastha Jain
  • 180
  • 1
  • 1
  • 13
0

I think this thread is for same issue. You can take reference of these answers. Link : java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer