Hi,
I have installed sap hana sdk in my eclipse and created a dynamic web project and deployed it. I have created a sample REST service using Jersey.
I have also tested this REST service in Apache tomcat and when I call it it gives me proper response. But same REST service when I call on SAP HANA i get following error: Please help me in resolving this error.
URL: http://localhost:8181/HelloWorld/rest/UserInfoService/name/girish
Response:
Status
500 Internal Server ErrorLoading time: 35
com.sap.security.auth.service.webcontainer.internal.Authenticator.invoke(Authenticator.java:192)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:221)
com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:103)
com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:24)
com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:744)
</pre></p><p><b>root cause</b><pre>java.lang.NoClassDefFoundError: javax/annotation/Priority
org.glassfish.jersey.model.internal.ComponentBag.modelFor(ComponentBag.java:483)
org.glassfish.jersey.model.internal.ComponentBag.access$100(ComponentBag.java:89)
org.glassfish.jersey.model.internal.ComponentBag$5.call(ComponentBag.java:408)
org.glassfish.jersey.model.internal.ComponentBag$5.call(ComponentBag.java:398)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:228)
org.glassfish.jersey.model.internal.ComponentBag.registerModel(ComponentBag.java:398)
org.glassfish.jersey.model.internal.ComponentBag.register(ComponentBag.java:235)
org.glassfish.jersey.model.internal.CommonConfig.register(CommonConfig.java:410)
org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:420)
org.glassfish.jersey.server.ResourceConfig.registerClasses(ResourceConfig.java:496)
org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1177)
org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144)
org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:317)
org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:284)
org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:168)
org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
javax.servlet.GenericServlet.init(GenericServlet.java:244)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
com.sap.security.auth.service.webcontainer.internal.Authenticator.invoke(Authenticator.java:192)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
com.sap.core.tenant.valve.TenantValidationValve.invokeNextValve(TenantValidationValve.java:221)
com.sap.core.tenant.valve.TenantValidationValve.invoke(TenantValidationValve.java:103)
com.sap.js.statistics.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:24)
com.sap.core.js.monitoring.tomcat.valve.RequestTracingValve.invoke(RequestTracingValve.java:27)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:744)
My web.xml file :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>HelloWorld</display-name>
<servlet>
<description></description>
<display-name>HelloWorldServlet</display-name>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>com.hana.servlets.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- <display-name>HelloWorld</display-name> -->
<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.hana.rest.services</param-value>
</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>
</web-app>
My REST service code:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("UserInfoService")
public class UserInfo {
@GET
@Path("/name/{nameParam}")
@Produces(MediaType.TEXT_XML)
public String userName(@PathParam("nameParam") String nameParam) {
String name = nameParam;
return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}
@GET
@Path("/age/{j}")
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("j") int j) {
int age = j;
return "<User>" + "<Age>" + age + "</Age>" + "</User>";
}
}