Reputation: 421
I have build a rest service using tomcat and jersey.
The used web.xml contains only:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
The pom.xml file contains:
<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.pi4j</groupId>
<artifactId>pi4j-core</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
</dependencies>
</project>
This is part of the java file I use as the implementation of the service:
@Path("/light")
public class Hello {
// This method is called if TEXT_PLAIN is requested
@GET
@Path("/state/")
@Produces(MediaType.TEXT_PLAIN)
public String getStateOfLights() {
return "hi";//getLightsStateAsJSON();
}
}
The index.html file directly under the WebContent directory is reachable through localhost:8080/ha/index.html. This is working as expected.
If I want to test my rest service I call: http://localhost:8080/ha/rest/light/state/ And what do I get: HTTP Status 404: Not found
What am I missing here?
This is the server log :
Apr 25, 2015 7:07:32 PM org.apache.tomcat.util.digester.SetPropertiesRule begin WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:ha' did not find a matching property.
Apr 25, 2015 7:07:32 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/werner/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
Apr 25, 2015 7:07:32 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Apr 25, 2015 7:07:32 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Apr 25, 2015 7:07:32 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 620 ms
Apr 25, 2015 7:07:32 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 25, 2015 7:07:32 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.59
Apr 25, 2015 7:07:33 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [548] milliseconds.
Apr 25, 2015 7:07:34 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Apr 25, 2015 7:07:34 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Apr 25, 2015 7:07:34 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2641 ms
Upvotes: 0
Views: 1602
Reputation: 7571
You are missing <init-param>
in your web.xml. it should be:
<servlet>
<servlet-name>Jersey REST Service</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.example</param-value> <!-- where com.example.Hello is your Hello class -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Replace com.example
with the package of your Hello
class.
Upvotes: 2