Details
-
Bug
-
Resolution: Obsolete
-
Major
-
None
-
2.3.2.Final
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]