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>

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

Reply via email to