users@jersey.java.net

Re: [Jersey] Error resolving locale.

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Tue, 24 Feb 2009 16:10:10 +0100

On Feb 24, 2009, at 3:42 PM, Erick Dovale wrote:

> Folks,
> Have any of you experienced this before?
>

What version of Jersey are you using? I suspect it is 1.0 from looking
at the package names.

The IllegalStateExeption is thrown when a method is called on
HttpContext for which there is no HTTP request, and thus no
HttpContext, in scope.

I looked at the 1.0 code for WebApplicationImpl [1] and i cannot see
how this can manifest itself since the thread local context value is
set to null after the ContainerResponse.write method is called.

Can you describe a bit more the function of
ErrorObjectToJSONMessageBodyWriter? is the "error object" returned
from a resource method?

Can you try using Jersey 1.0.1 or 1.0.2 and see if the same error
occurs?

Thanks,
Paul.

[1] https://jersey.dev.java.net/source/browse/*checkout*/jersey/tags/jersey-1.0/jersey/jersey-server/src/main/java/com/sun/jersey/impl/application/WebApplicationImpl.java?rev=1602

     public void handleRequest(ContainerRequest request,
ContainerResponse response) throws IOException {
         try {
             final WebApplicationContext localContext = new
                     WebApplicationContext(this, request, response);
             context.set(localContext);

             /**
              * The matching algorithm currently works from an
absolute path.
              * The path is required to be in encoded form.
              */
             StringBuilder path = new StringBuilder();
             path.append("/").append(localContext.getPath(false));

             if (!
resourceConfig.getFeature(ResourceConfig.FEATURE_MATCH_MATRIX_PARAMS)) {
                 path = stripMatrixParams(path);
             }

             // TODO convert to filter
             // If there are URI conneg extensions for media and
language
             if (!resourceConfig.getMediaTypeMappings().isEmpty() ||
                     !resourceConfig.getLanguageMappings().isEmpty()) {
                 uriConneg(path, request);
             }

             for (ContainerRequestFilter f : requestFilters)
                 request = f.filter(request);

             if (!rootsRule.accept(path, null, localContext)) {
                 throw new NotFoundException();
             }
         } catch (WebApplicationException e) {
             mapWebApplicationException(e, response);
         } catch (ContainerCheckedException e) {
             if (!mapException(e.getCause(), response)) {
                 context.set(null);
                 throw e;
             }
         } catch (RuntimeException e) {
             if (!mapException(e, response)) {
                 context.set(null);
                 throw e;
             }
         }

         try {
             for (ContainerResponseFilter f : responseFilters)
                 response = f.filter(request, response);
         } catch (WebApplicationException e) {
             mapWebApplicationException(e, response);
         } catch (RuntimeException e) {
             if (!mapException(e, response)) {
                 context.set(null);
                 throw e;
             }
         }

         try {
             response.write();
         } catch (WebApplicationException e) {
             if (response.isCommitted()) {
                 throw e;
             } else {
                 mapWebApplicationException(e, response);
                 response.write();
             }
         } finally {
             context.set(null);
         }
     }


> Thanks.
>
> java.lang.IllegalStateException
> at
> com
> .sun
> .jersey
> .impl.ThreadLocalHttpContext.getRequest(ThreadLocalHttpContext.java:
> 75)
> at com.sun.jersey.impl.application.WebApplicationImpl
> $1.invoke(WebApplicationImpl.java:179)
> at $Proxy195.getLanguage(Unknown Source)
> at
> com
> .bps
> .iproject
> .jersey
> .entityproviders
> .errors
> .ErrorObjectToJSONMessageBodyWriter
> .resolveMessage(ErrorObjectToJSONMessageBodyWriter.java:113)
> at
> com
> .bps
> .iproject
> .jersey
> .entityproviders
> .errors
> .ErrorObjectToJSONMessageBodyWriter
> .buildJSONEntity(ErrorObjectToJSONMessageBodyWriter.java:83)
> at
> com
> .bps
> .iproject
> .jersey
> .entityproviders
> .errors
> .ErrorObjectToJSONMessageBodyWriter
> .writeTo(ErrorObjectToJSONMessageBodyWriter.java:72)
> at
> com
> .bps
> .iproject
> .jersey
> .entityproviders
> .errors
> .ErrorObjectToJSONMessageBodyWriter
> .writeTo(ErrorObjectToJSONMessageBodyWriter.java:1)
> at
> com
> .sun
> .jersey.spi.container.ContainerResponse.write(ContainerResponse.java:
> 251)
> at
> com
> .sun
> .jersey
> .impl
> .application
> .WebApplicationImpl.handleRequest(WebApplicationImpl.java:752)
> at
> com
> .sun
> .jersey
> .impl
> .application
> .WebApplicationImpl.handleRequest(WebApplicationImpl.java:692)
> at
> com
> .sun
> .jersey
> .spi
> .container.servlet.ServletContainer.service(ServletContainer.java:344)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> at
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 269)
> at
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> at
> com
> .opensymphony
> .module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
> at
> com
> .opensymphony
> .module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
> at
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 215)
> at
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> at com.bps.iproject.web.filter.CleanupBPSThreadLocalFilter.doFilter
> (CleanupBPSThreadLocalFilter.java:47)
> at
> org
> .acegisecurity
> .util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
> at
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 215)
> at
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:265)
> at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke
> (FilterSecurityInterceptor.java:107)
> at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter
> (FilterSecurityInterceptor.java:72)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:275)
> at
> org
> .acegisecurity
> .ui
> .ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:
> 110)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:275)
> at
> org
> .acegisecurity
> .ui
> .basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:
> 175)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:275)
> at
> org
> .acegisecurity
> .ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:
> 229)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:275)
> at com.bps.iproject.web.security.TrustedSSOAuthenticationProcessingFilter.doFilter
> (TrustedSSOAuthenticationProcessingFilter.java:116)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:275)
> at
> org
> .acegisecurity
> .context
> .HttpSessionContextIntegrationFilter
> .doFilter(HttpSessionContextIntegrationFilter.java:286)
> at org.acegisecurity.util.FilterChainProxy
> $VirtualFilterChain.doFilter(FilterChainProxy.java:275)
> at
> org
> .acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:
> 149)
> at
> org
> .acegisecurity
> .util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
> at
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 215)
> at
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> at
> org
> .springframework
> .orm
> .hibernate3
> .support
> .OpenSessionInViewFilter
> .doFilterInternal(OpenSessionInViewFilter.java:198)
> at
> org
> .springframework
> .web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:
> 76)
> at
> org
> .apache
> .catalina
> .core
> .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
> 215)
> at
> org
> .apache
> .catalina
> .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> at
> org
> .apache
> .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
> 213)
> at
> org
> .apache
> .catalina.core.StandardContextValve.invoke(StandardContextValve.java:
> 174)
> at
> org
> .apache
> .catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> at
> org
> .apache
> .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
> at
> org
> .apache
> .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
> 108)
> at
> org
> .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
> 174)
> at
> org
> .apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 874)
> at org.apache.coyote.http11.Http11BaseProtocol
> $Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
> 665)
> at
> org
> .apache
> .tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
> 528)
> at
> org
> .apache
> .tomcat
> .util
> .net
> .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
> at org.apache.tomcat.util.threads.ThreadPool
> $ControlRunnable.run(ThreadPool.java:689)
> at java.lang.Thread.run(Unknown Source)
>