[ 
https://issues.apache.org/jira/browse/SLING-3175?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13796860#comment-13796860
 ] 

Julian Reschke commented on SLING-3175:
---------------------------------------

Here's a test that demonstrates the Java problem:

{code}
package com.greenbytes.httptests;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.URL;
import java.net.URLConnection;

import sun.net.www.protocol.http.HttpURLConnection;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class JavaAcceptHeader {

    public static void main(String[] args) throws IOException {
        InetSocketAddress address = new InetSocketAddress(8000);
        HttpServer httpServer = HttpServer.create(address, 0);

        HttpHandler echoAccept = new HttpHandler() {

            public void handle(HttpExchange exchange) throws IOException {
                byte[] response = 
exchange.getRequestHeaders().get("Accept").toString().getBytes();
                exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 
response.length);
                exchange.getResponseBody().write(response);
                exchange.close();
            }
        };
        httpServer.createContext("/", echoAccept);
        httpServer.start();

        URL url = new URL("http://localhost:8000/";);
        URLConnection conn = url.openConnection();
        BufferedReader in = new BufferedReader(new 
InputStreamReader(conn.getInputStream()));
        System.out.println(in.readLine());
        httpServer.stop(0);
    }
}
{code}

I have submitted a bug report to Oracle, let's see what happens.

> Make MediaRange parser linient to accept invalid Accept header generated by 
> Oracle JDK HttpUrlConnection
> --------------------------------------------------------------------------------------------------------
>
>                 Key: SLING-3175
>                 URL: https://issues.apache.org/jira/browse/SLING-3175
>             Project: Sling
>          Issue Type: Improvement
>          Components: Servlets
>    Affects Versions: Servlets Post 2.3.2
>            Reporter: Chetan Mehrotra
>            Priority: Minor
>         Attachments: SLING-3175.patch
>
>
> While making a call to Sling using Java URLConnection we get following 
> exception [1]. The root cause is due to parsing of invalid {{Accept}} header 
> being sent as part of request
> {noformat}
> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
> {noformat}
> The problem here is that this header is added by JDK itself [0] and at times 
> its not possible to change the request property of URLConnection created by 
> third party library. Would be helpful to make Sling MediaRange parser more 
> linient
> [0] 
> http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/tip/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java
> [1] 15.10.2013 16:51:01.646 *WARN* [10.40.247.115 [1381836061645] POST 
> /rpc/protocol/model/rf HTTP/1.1] 
> org.apache.sling.servlets.post.impl.helper.MediaRangeList Error registering 
> media type  *; q=.2 java.lang.ArrayIndexOutOfBoundsException: 1
>   at 
> org.apache.sling.servlets.post.impl.helper.MediaRangeList$MediaRange.setType(MediaRangeList.java:237)
>   at 
> org.apache.sling.servlets.post.impl.helper.MediaRangeList$MediaRange.<init>(MediaRangeList.java:191)
>   at 
> org.apache.sling.servlets.post.impl.helper.MediaRangeList.init(MediaRangeList.java:90)
>   at 
> org.apache.sling.servlets.post.impl.helper.MediaRangeList.<init>(MediaRangeList.java:56)
>   at 
> org.apache.sling.servlets.post.impl.SlingPostServlet.createPostResponse(SlingPostServlet.java:279)
>   at 
> org.apache.sling.servlets.post.impl.SlingPostServlet.doPost(SlingPostServlet.java:185)



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to