On Sun, Mar 6, 2016 at 12:48 PM, Sean Dawson <[email protected]>
wrote:
>
> Tomcat 8_32
> Windows 7
> Java 8_51
> RestEasy 3.0.11.Final
> GWT 2.7.0 (Jetty jetty-9.3.5.v20151012)
>
> Servlet code makes a RestEasy call to another servlet (same container) -
> second servlet sets the 'Warning' HTTP header on response. Would like to
> access that in first servlet but when running in Tomcat, that header is not
> included.
>
> Code to get header in first servlet:
>
> Object headers = ((ClientResponseFailure)
> e).getResponse().getResponseHeaders().get("Warning");
>
> Also tried: getHeaders(), getStringHeaders(), and getHeaderString().
>
> When running GWT in superdev mode in IntelliJ (15.0.4) using Jetty, the
> above returns a List with one item that contains the warning string. When
> remote debugging Tomcat, that call returns null.
>
> Added this to web app xml, and also tried Tomcat conf/web.xml...
>
> <filter>
> <filter-name>CorsFilter</filter-name>
> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
> <init-param>
> <param-name>cors.exposed.headers</param-name>
> <param-value>Warning</param-value>
> </init-param>
> </filter>
> <filter-mapping>
> <filter-name>CorsFilter</filter-name>
> <url-pattern>/*</url-pattern>
> </filter-mapping>
>
> Also tried cors.allowed.headers.
>
> Any pointers?
>
>
Alright, lets try this again. Simple reproducible testcase...
- download latest Tomcat 8 for Windows 64-bit zip
http://mirrors.ocf.berkeley.edu/apache/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32-windows-x64.zip
- extract somewhere
- delete everything in webapps folder
- build project below, put in webapps folder
- go to: http://localhost:8080/one
- check response headers... no Warning header
** pom.xml **
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>tcTest</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>tcTest Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.11.Final</version>
</dependency>
</dependencies>
<build>
<finalName>ROOT</finalName>
</build>
</project>
** web.xml **
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>One</servlet-name>
<servlet-class>pkg.ServletOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>One</servlet-name>
<url-pattern>/one/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Two</servlet-name>
<servlet-class>pkg.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Two</servlet-name>
<url-pattern>/two/*</url-pattern>
</servlet-mapping>
</web-app>
** index.html **
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
** Caller interface **
package pkg;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
public interface Caller
{
@GET
@Path("two")
String makeCall();
}
** Servlet one **
package pkg;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.MediaType;
import org.jboss.resteasy.client.ProxyBuilder;
public class ServletOne extends HttpServlet
{
Caller caller;
@Override
public void init() throws ServletException
{
caller = ProxyBuilder.build(Caller.class,
"http://localhost:8080").now();
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
String result = caller.makeCall();
response.getWriter().println(result);
}
}
** Servlet two **
package pkg;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletTwo extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
addHeader(response);
response.getWriter().println("Ok");
}
void addHeader(HttpServletResponse response)
{
response.setHeader("Warning", "This is a warning"); // also
tried addHeader()
}
}