Uploaded image for project: 'RESTEasy'
  1. RESTEasy
  2. RESTEASY-710

HttpHeaders missing headers from GET with beans.xml present

    XMLWordPrintable

Details

    Description

      I am having an issue getting RESTEasy to implement a conditional GET when deployed to JBoss with a WEB-INF/beans.xml present in the WAR. If I run it within a local Jetty/JUnit/Maven/Spring environment it works. If I deploy the application to JBoss AS 7.1.1 without a WEB-INF/beans.xml file – it works. If I include a skeletal beans.xml file the conditional GET always fails and I have noticed key headers missing within the header processing.

      Here is an example POST

      GET /jaxrs-scale-dmv-war6/caching/conditional HTTP/1.1
      Accept: application/xml
      Via: 1.1 localhost (Apache-HttpClient/4.1.3 (cache))
      If-Modified-Since: Sun, 20 May 2012 17:08:26 GMT
      foo: bar
      Via: 1.1 localhost (Apache-HttpClient/4.1.3 (cache))
      Host: 127.0.0.1:8080
      Connection: Keep-Alive
      User-Agent: Apache-HttpClient/4.1.3 (java 1.5)
      

      Here is a snippet of debug code that is present in the resource method

      @Path("caching")
      @Singleton
      public class CachingRS {
          private @Context Request request;
          private @Context HttpHeaders headers;
          private @Context HttpServletRequest httpRequest;
      ...
          @GET
          @Path("conditional")
          @Produces(MediaType.APPLICATION_XML)
          @Formatted
          public Response getConditional()  {
              log.info("called: {} {}", request.getMethod(), uriInfo.getRequestUri());
              
              for (String key : headers.getRequestHeaders().keySet()) {
                  List<String> value = headers.getRequestHeader(key);
                  log.info("jaxrs.header {} = {}", key, value);
              }
              
              for (Enumeration<String> e=httpRequest.getHeaderNames(); e.hasMoreElements();) {
                  String key = e.nextElement();
                  String value = httpRequest.getHeader(key);
                  log.info("httpRequest.header {} = {}", key, value);
              }
              ResponseBuilder response = request.evaluatePreconditions(valueDate);
      

      The jaxrs HttpHeaders is missing the if-modified-since and dummy foo header

      13:08:26,774 called: GET http://127.0.0.1:8080/jaxrs-scale-dmv-war6/caching/conditional
      13:08:26,775 jaxrs.header connection = [Keep-Alive]
      13:08:26,776 jaxrs.header host = [127.0.0.1:8080]
      13:08:26,776 jaxrs.header via = [1.1 localhost (Apache-HttpClient/4.1.3 (cache))]
      13:08:26,777 jaxrs.header accept = [application/xml]
      13:08:26,778 jaxrs.header user-agent = [Apache-HttpClient/4.1.3 (java 1.5)]
      

      The HttpServletRequest has the missing headers

      13:08:26,778 httpRequest.header accept = application/xml
      13:08:26,779 httpRequest.header via = 1.1 localhost (Apache-HttpClient/4.1.3 (cache))
      13:08:26,779 httpRequest.header if-modified-since = Sun, 20 May 2012 17:08:26 GMT
      13:08:26,780 httpRequest.header foo = bar
      13:08:26,780 httpRequest.header host = 127.0.0.1:8080
      13:08:26,781 httpRequest.header connection = Keep-Alive
      13:08:26,781 httpRequest.header user-agent = Apache-HttpClient/4.1.3 (java 1.5)
      

      If I remove the WEB-INF/beans.xml file ...

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="
              http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
      </beans>
      

      The jaxrs HttpHeader object gets populated with the missing headers and my conditional GET works deployed to JBoss 7.1.1

      13:16:44,064 called: GET http://127.0.0.1:8080/jaxrs-scale-dmv-war6/caching/conditional
      13:16:44,065 jaxrs.header connection = [Keep-Alive]
      13:16:44,066 jaxrs.header if-modified-since = [Sun, 20 May 2012 17:16:43 GMT]
      13:16:44,066 jaxrs.header host = [127.0.0.1:8080]
      13:16:44,067 jaxrs.header via = [1.1 localhost (Apache-HttpClient/4.1.3 (cache)), 1.1 localhost (Apache-HttpClient/4.1.3 (cache))]
      13:16:44,068 jaxrs.header accept = [application/xml]
      13:16:44,069 jaxrs.header user-agent = [Apache-HttpClient/4.1.3 (java 1.5)]
      13:16:44,069 jaxrs.header foo = [bar]
      

      Attachments

        Activity

          People

            patriot1burke@gmail.com Bill Burke (Inactive)
            jcstaff_jira jim stafford (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: