On 3/7/2016 5:11 PM, Sean Dawson wrote:
On Sun, Mar 6, 2016 at 12:48 PM, Sean Dawson <seandawson2...@gmail.com>
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>

If you're adding Maven, Glassfish and JBoss, you're adding a LOT of complexity to your "simple" reproducible! I've never used any of them, so would have no hope of reproducing your issue. And there's a fair chance that it has nothing to do with Tomcat anyway, given all the other stuff around it...



     <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()
     }
}



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to