Reputation: 126
I created a maven project with archetype as maven-archetype-webapp, and then for exposing my application as a rest webservice i'm using RestEasy, however after implementin the rest application i'm unable to acces the URL created by me. Please guide me in what i'm doing incorrectly. Thanks for reading the question.
My UserManagementController is as below :
package com.restimplement.btl.pl.controller;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import com.restimplement.btl.pl.dao.UserDao;
@Path(value="/UserManagement")
public class UserManagementController {
@GET
@Path("/{pathParameter}")
public Response getAllUsers( @PathParam("pathParameter") String pathParameter,
@DefaultValue("Nothing to say") @QueryParam("queryParameter") String queryParameter)
{
UserDao userdao = new UserDao();
System.out.println("able to visit user add");
String response = "details from: "+userdao.findObject();
return Response.status(200).entity(response).build();
}
}
My MyRestWS.java is as below :
package com.restimplement.btl.pl.controller;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
public class MyRestWS extends Application{
private Set<Object> singletons = new HashSet<Object>();
public MyRestWS() {
singletons.add(new UserManagementController());
}
}
My web.xml is as below :
<?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/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>BTL_PL</display-name>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/btlservice/*</url-pattern>
</servlet-mapping>
<!-- this should be the same URL pattern as the servlet-mapping property -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/btlservice</param-value>
</context-param>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.restimplement.btl.pl.controller.MyRestWS</param-value>
</init-param>
</servlet>
</web-app>
The application was successfully deployed on JBoss-wildfly 8 however when accessing the URL : http://localhost:8080/BTL_PL/btlservice/UserManagement/getUser; i'm getting below errors on jboss console :
14:19:33,240 WARN [org.jboss.resteasy.core.ExceptionHandler] (default task-10)
failed to execute: javax.ws.rs.NotFoundException: Could not find resource for fu
ll path: http://localhost:8080/BTL_PL/btlservice/UserManagement/getUser
at org.jboss.resteasy.core.registry.ClassNode.match(ClassNode.java:73) [
resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.ja
va:48) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(Res
ourceMethodRegistry.java:444) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousD
ispatcher.java:234) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispa
tcher.java:171) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.
service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.servi
ce(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.servi
ce(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.6.Final.jar:]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-s
ervlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHand
ler.java:85) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.hand
leRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.0.Final.jar:
1.0.0.Final]
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(
ServletDispatchingHandler.java:36) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final
]
at org.wildfly.extension.undertow.security.SecurityContextAssociationHan
dler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandle
r.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0
.0.Final.jar:1.0.0.Final]
at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest
(AuthenticationCallHandler.java:52) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRe
quest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.0.Final.jar:1.0
.0.Final]
at io.undertow.servlet.handlers.security.ServletConfidentialityConstrain
tHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [underto
w-servlet-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandl
er.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.
0.0.Final.jar:1.0.0.Final]
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(Se
curityInitialHandler.java:76) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.han
dleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest
(ServletInitialHandler.java:240) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(Se
rvletInitialHandler.java:227) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(Servlet
InitialHandler.java:73) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(Se
rvletInitialHandler.java:146) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168)
[undertow-core-1.0.0.Final.jar:1.0.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:6
87) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1145) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:615) [rt.jar:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
Please let me know if there's something else that i need to add to the query for more information. Also, if i'm trying to access the wrong URL.
Upvotes: 0
Views: 3357
Reputation: 130927
web.xml
is not required in servlet 3.x environmentsIn a Servlet 3.x environment (like WildFly 8.x), the web.xml
deployment descriptor is not mandatory and you may not need it in a simple application.
You could remove it and configure your maven-war-plugin
to ignore the missing web.xml
file by setting failOnMissingWebXml
configuration property to false
in your pom.xml
file:
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
...
</plugins>
Application
subclassChange your Application
subclass to be like:
@ApplicationPath("btlservice")
public class MyRestWS extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>();
set.add(UserManagementController.class);
return set;
}
}
The getClasses()
method returns a set of root resource, provider and feature classes. The default life-cycle for resource class instances is per-request. The default life-cycle for providers (registered directly or via a feature) is singleton.
The @ApplicationPath
annotation can be used to annotate the custom Application
subclass and define the base application URI for all JAX-RS resources configured in the application. With it you don't need to declare a servlet in the web.xml
deployment descriptor.
For more details on the Application
class, this answer can be insightful.
Finnally, request your endpoint that should be available in the following URL:
http://[server]:[port]/[context]/btlservice/UserManagement/[path-parameter]
Upvotes: 2