Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public final class HttpHeaderHelper { public static final String ACCEPT_ENCODING = "Accept-Encoding"; public static final String CONTENT_TYPE = "Content-Type"; public static final String CONTENT_ID = "Content-ID"; public static final String CONTENT_ENCODING = "Content-Encoding"; public static final String CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding"; public static final String COOKIE = "Cookie"; public static final String TRANSFER_ENCODING = "Transfer-Encoding"; public static final String CHUNKED = "chunked"; public static final String CONNECTION = "Connection"; public static final String CLOSE = "close"; public static final String AUTHORIZATION = "Authorization"; private static final Charset UTF8 = Charset.forName("utf-8"); private static Map<String, String> internalHeaders = new HashMap<String, String>(); private static Map<String, String> encodings = new ConcurrentHashMap<String, String>(); static { internalHeaders.put("Accept-Encoding", "accept-encoding"); internalHeaders.put("Content-Encoding", "content-encoding"); internalHeaders.put("Content-Type", "content-type"); internalHeaders.put("Content-ID", "content-id"); internalHeaders.put("Content-Transfer-Encoding", "content-transfer-encoding"); internalHeaders.put("Transfer-Encoding", "transfer-encoding"); internalHeaders.put("Connection", "connection"); internalHeaders.put("authorization", "Authorization"); internalHeaders.put("soapaction", "SOAPAction"); internalHeaders.put("accept", "Accept"); } private HttpHeaderHelper() { } public static List getHeader(Map<String, List<String>> headerMap, String key) { return headerMap.get(getHeaderKey(key)); } public static String getHeaderKey(String key) { if (internalHeaders.containsKey(key)) { return internalHeaders.get(key); } else { return key; } } //helper to map the charsets that various things send in the http Content-Type header //into something that is actually supported by Java and the Stax parsers and such. public static String mapCharset(String enc) { if (enc == null) { return UTF8.name(); } //older versions of tomcat don't properly parse ContentType headers with stuff //after charset="UTF-8" int idx = enc.indexOf(";"); if (idx != -1) { enc = enc.substring(0, idx); } // Charsets can be quoted. But it's quite certain that they can't have escaped quoted or // anything like that. enc = enc.replace("\"", "").trim(); enc = enc.replace("'", ""); if ("".equals(enc)) { return UTF8.name(); } String newenc = encodings.get(enc); if (newenc == null) { try { newenc = Charset.forName(enc).name(); } catch (IllegalCharsetNameException icne) { return null; } catch (UnsupportedCharsetException uce) { return null; } encodings.put(enc, newenc); } return newenc; } }