Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6996110

URLConnection.setRequestProperty no longer sets Content-Transfer-Encoding

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P4 P4
    • None
    • 6u22
    • core-libs
    • x86
    • windows_xp

      FULL PRODUCT VERSION :
      java version "1.6.0_22"
      Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
      Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      A DESCRIPTION OF THE PROBLEM :
      A user upgrading his JRE to rev 22 broke our program. I have traced this to the loss of a Content-Transfer-Encoding header when the client program sends a POST request to a synchronization server. This works on rev 21.



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      I've created a simple servlet and client program which reproduces the problem.

      Run the Servlet in Tomcat or similar under the context testheader. Then run the client program under rev 21 and rev 22.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      System output should be "Encoding is gzip" in both cases.
      ACTUAL -
      System output in r22 case is "No encoding found".


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      Cleint program:

      /*
       * Copyright Costcutter Supermarkets Ltd.
       */

      package testsend;

      import java.io.BufferedReader;
      import java.io.InputStreamReader;
      import java.io.PrintWriter;
      import java.net.HttpURLConnection;
      import java.net.URL;

      /**
       * <p>Test header transmission.</p>
       * @author Malcolm McMahon
       */
      public class Main {

          /**
           * @param args the command line arguments
           */
          public static void main(String[] args) {
              try {
                  URL url = new URL("http://localhost:8080/testheader/test");
                  HttpURLConnection con = (HttpURLConnection) url.openConnection();
                  con.setDoInput(true);
                  con.setRequestProperty("Content-Transfer-Encoding", "gzip");
                  BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
                  String value = in.readLine();
                  in.close();
                  System.out.println(value);
              } catch(Exception ex) {
                  ex.printStackTrace();
              }
          }

      }


      ------Servlet:------

      /*
       * Copyright Costcutter Supermarkets Ltd.
       */

      package testreceive;

      import java.io.IOException;
      import java.io.PrintWriter;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;

      /**
       *
       * @author MalcolmM
       */
      public class TestServlet extends HttpServlet {
         
          /**
           * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
           * @param request servlet request
           * @param response servlet response
           * @throws ServletException if a servlet-specific error occurs
           * @throws IOException if an I/O error occurs
           */
          protected void processRequest(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
              response.setContentType("text/html;charset=UTF-8");
              String coding = request.getHeader("Content-Transfer-Encoding");
              PrintWriter out = null;
              try {
                  out = response.getWriter();
                  if(coding == null)
                      out.println("No encoding found");
                  else
                      out.println("Encoding is " + coding);
              } finally {
                  if(out != null)
                  out.close();
              }
          }

          // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
          /**
           * Handles the HTTP <code>GET</code> method.
           * @param request servlet request
           * @param response servlet response
           * @throws ServletException if a servlet-specific error occurs
           * @throws IOException if an I/O error occurs
           */
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
              processRequest(request, response);
          }

          /**
           * Handles the HTTP <code>POST</code> method.
           * @param request servlet request
           * @param response servlet response
           * @throws ServletException if a servlet-specific error occurs
           * @throws IOException if an I/O error occurs
           */
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
              processRequest(request, response);
          }

          /**
           * Returns a short description of the servlet.
           * @return a String containing servlet description
           */
          @Override
          public String getServletInfo() {
              return "Short description";
          }// </editor-fold>

      }

      ------web.xml-----
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="2.5" 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/web-app_2_5.xsd">
          <servlet>
              <servlet-name>TestServlet</servlet-name>
              <servlet-class>testreceive.TestServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>TestServlet</servlet-name>
              <url-pattern>/test</url-pattern>
          </servlet-mapping>
          <session-config>
              <session-timeout>
                  30
              </session-timeout>
          </session-config>
          <welcome-file-list>
              <welcome-file>index.jsp</welcome-file>
          </welcome-file-list>
      </web-app>

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Ignore header and assume that all transactions will be compressed (until one isn't).

            chegar Chris Hegarty
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: