users@jersey.java.net

Problem with injected HttpServletRequest proxy

From: Ian Carr <icarr_at_focus-solutions.co.uk>
Date: Mon, 7 Dec 2009 15:11:13 +0000

Hi, I am working with glassfish v3 build 74 and trying to experiment
with the new Servlet 3.0 login and logout methods from jersey.

I am injecting the HttpServletRequest into one of my Jersey methods and
invoking the login method, if the user id and password map then all
is OK. However if the login method throws it's ServletException as
documented (bad username/password or other issue) I get a stack trace
which seems to indicate that the, presumably generated, injected proxy
($Proxy153) is not expecting the ServletException
(java.lang.reflect.UndeclaredThrowableException)

Not sure if this is relevant but the class is also using the JCDI
injection mechanism and is annotated as an @ManagedBean.

Method:

@POST
@Path("login")
@Consumes( { MediaType.APPLICATION_JSON })
public void loginUser(@Context HttpServletRequest req, UIdent ident) {
        try {
                // does the login work?
                String uname = ident.getUname();
                String pword = ident.getPword();
                req.login(uname, pword);
        } catch (ServletException ex) {
                __log.info("Failed login attempt", ex);
                throw new WebApplicationException(Status.UNAUTHORIZED);
        }
}

Stack trace:

[#|2009-12-07T14:58:37.252+0000|WARNING|glassfishv3.0|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=24;_ThreadName=http-thread-pool-8080-(1);|StandardWrapperValve[default]:
PWC1406: Servlet.service() for servlet default threw exception
java.lang.reflect.UndeclaredThrowableException
        at $Proxy153.login(Unknown Source)
        at imc.test.resource.MainResource.loginUser(MainResource.java:121)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$VoidOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:139)
        at
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
        at
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:208)
        at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
        at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:75)
        at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:115)
        at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:67)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:775)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:740)
        at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:731)
        at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:372)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:780)
        at
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:732)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at imc.test.util.AcceptFilter.doFilter(AcceptFilter.java:65)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at
com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at
org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
        at
com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
com.sun.jersey.server.impl.container.servlet.ThreadLocalInvoker.invoke(ThreadLocalInvoker.java:90)
        ... 48 more
Caused by: javax.servlet.ServletException: Exception thrown while
attempting to authenticate for user: test
        at org.apache.catalina.connector.Request.login(Request.java:1921)
        at
org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1145)
        ... 53 more
Caused by: javax.servlet.ServletException: Failed login while attempting
to authenticate user: test
        at org.apache.catalina.connector.Request.login(Request.java:1913)
        ... 54 more

Any ideas?

Many thanks

Ian