Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * http://glassfish.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  */
 
 package com.sun.xml.ws.transport.httpspi.servlet;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;

HTTP request and response headers are represented by this class which implements the interface java.util.Map< java.lang.String,java.util.List<java.lang.String>>. The keys are case-insensitive Strings representing the header names and the value associated with each key is a java.util.List<java.lang.String> with one element for each occurence of the header name in the request or response.

For example, if a response header instance contains one key "HeaderName" with two values "value1 and value2" then this object is output as two header lines:

 HeaderName: value1
 HeaderName: value2
 

All the normal java.util.Map methods are provided, but the following additional convenience methods are most likely to be used:

All methods in this class accept null values for keys and values. However, null keys will never will be present in HTTP request headers, and will not be output/sent in response headers. Null values can be represented as either a null entry for the key (i.e. the list is null) or where the key has a list, but one (or more) of the list's values is null. Null values are output as a header line containing the key but no associated value.

Since:
1.6
 
 public class Headers implements Map<String,List<String>> {
 
 
     public Headers() {
          = new HashMap<String,List<String>>(32);
     }
 
     /* Normalize the key by converting to following form.
      * First char upper case, rest lower case.
      * key is presumed to be ASCII
      */
     private String normalize (String key) {
         if (key == null) {
             return null;
         }
         int len = key.length();
         if (len == 0) {
             return key;
        }
        char[] b;
        String s;
        b = key.toCharArray();
        if (b[0] >= 'a' && b[0] <= 'z') {
            b[0] = (char) (b[0] - ('a' - 'A'));
        }
        for (int i = 1; i < leni++) {
            if (b[i] >= 'A' && b[i] <= 'Z') {
                b[i] = (char) (b[i] + ('a' - 'A'));
            }
        }
        s = new String(b);
        return s;
    }
    @Override
    public int size() {
        return .size();
    }
    @Override
    public boolean isEmpty() {
        return .isEmpty();
    }
    @Override
    public boolean containsKey(Object key) {
        if (key == null) {
            return false;
        }
        if (!(key instanceof String)) {
            return false;
        }
        return .containsKey (normalize((String)key));
    }
    @Override
    public boolean containsValue(Object value) {
        return .containsValue(value);
    }
    @Override
    public List<Stringget(Object key) {
        return .get(normalize((String)key));
    }

    
returns the first value from the List of String values for the given key (if at least one exists).

Parameters:
key the key to search for
Returns:
the first string value associated with the key
    public String getFirst (String key) {
        List<Stringl = .get(normalize((String)key));
        if (l == null) {
            return null;
        }
        return l.get(0);
    }
    @Override
    public List<Stringput(String keyList<Stringvalue) {
        return .put (normalize(key), value);
    }

    
adds the given value to the list of headers for the given key. If the mapping does not already exist, then it is created

Parameters:
key the header name
value the header value to add to the header
    public void add (String keyString value) {
        String k = normalize(key);
        List<Stringl = .get(k);
        if (l == null) {
            l = new LinkedList<String>();
            .put(k,l);
        }
        l.add (value);
    }

    
sets the given value as the sole header value for the given key. If the mapping does not already exist, then it is created

Parameters:
key the header name
value the header value to set.
    public void set (String keyString value) {
        LinkedList<Stringl = new LinkedList<String>();
        l.add (value);
        put (keyl);
    }
    @Override
    public List<Stringremove(Object key) {
        return .remove(normalize((String)key));
    }
    @Override
    public void putAll(Map<? extends String,? extends List<String>> t)  {
        for(Entry<? extends String, ? extends List<String>> entry : t.entrySet()) {
            put(entry.getKey(), entry.getValue());
        }
    }
    @Override
    public void clear() {
        .clear();
    }
    @Override
    public Set<StringkeySet() {
        return .keySet();
    }
    @Override
    public Collection<List<String>> values() {
        return .values();
    }
    @Override
    public Set<Entry<StringList<String>>> entrySet() {
        return .entrySet();
    }
    @Override
    public boolean equals(Object o) {
        return .equals(o);
    }
    @Override
    public int hashCode() {
        return .hashCode();
    }
    @Override
    public String toString() {
        return .toString();
    }
New to GrepCode? Check out our FAQ X