diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java
index b9031cdb276..98327caea2d 100644
--- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java
+++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpFields.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
@@ -48,17 +49,19 @@ import org.eclipse.jetty.util.log.Logger;
*
The cookie handling provided by this class is guided by the Servlet specification and RFC6265.
*
*/
-public class HttpFields extends ArrayList
+public class HttpFields implements Iterable
{
- private static final long serialVersionUID = 1L;
private static final Logger LOG = Log.getLogger(HttpFields.class);
public final static String __separators = ", \t";
+ final List _fields;
+
/**
* Constructor.
*/
public HttpFields()
{
+ _fields=new ArrayList<>();
}
/**
@@ -66,7 +69,18 @@ public class HttpFields extends ArrayList
*/
public HttpFields(int capacity)
{
- super(capacity);
+ _fields=new ArrayList<>(capacity);
+ }
+
+ public int size()
+ {
+ return _fields.size();
+ }
+
+ @Override
+ public Iterator iterator()
+ {
+ return _fields.iterator();
}
/**
@@ -74,7 +88,7 @@ public class HttpFields extends ArrayList
*/
public Collection getFieldNamesCollection()
{
- final Set list = new HashSet<>(size());
+ final Set list = new HashSet<>(_fields.size());
for (HttpField f : this)
{
if (f!=null)
@@ -99,14 +113,14 @@ public class HttpFields extends ArrayList
*/
public HttpField getField(int i)
{
- return get(i);
+ return _fields.get(i);
}
public HttpField getField(HttpHeader header)
{
- for (int i=0;i
public HttpField getField(String name)
{
- for (int i=0;i0;)
+ {
+ if (_fields.get(i).equals(field))
+ return true;
+ }
+ return false;
+ }
+
public boolean contains(HttpHeader header, String value)
{
- for (int i=0;i0;)
{
- HttpField f=get(i);
+ HttpField f=_fields.get(i);
if (f.getHeader()==header && f.contains(value))
return true;
}
@@ -137,9 +161,9 @@ public class HttpFields extends ArrayList
public boolean contains(String name, String value)
{
- for (int i=0;i0;)
{
- HttpField f=get(i);
+ HttpField f=_fields.get(i);
if (f.getName().equalsIgnoreCase(name) && f.contains(value))
return true;
}
@@ -149,9 +173,9 @@ public class HttpFields extends ArrayList
public boolean containsKey(String name)
{
- for (int i=0;i0;)
{
- HttpField f=get(i);
+ HttpField f=_fields.get(i);
if (f.getName().equalsIgnoreCase(name))
return true;
}
@@ -207,9 +231,9 @@ public class HttpFields extends ArrayList
*/
public Enumeration getValues(final String name)
{
- for (int i=0;i
{
if (field==null)
{
- while (i
public void put(HttpField field)
{
boolean put=false;
- for (int i=size();i-->0;)
+ for (int i=_fields.size();i-->0;)
{
- HttpField f=get(i);
+ HttpField f=_fields.get(i);
if (f.isSameName(field))
{
if (put)
- remove(i);
+ _fields.remove(i);
else
{
- set(i,field);
+ _fields.set(i,field);
put=true;
}
}
}
if (!put)
- add(field);
+ _fields.add(field);
}
/**
@@ -385,7 +409,7 @@ public class HttpFields extends ArrayList
return;
HttpField field = new HttpField(name, value);
- add(field);
+ _fields.add(field);
}
public void add(HttpHeader header, HttpHeaderValue value) throws IllegalArgumentException
@@ -406,7 +430,7 @@ public class HttpFields extends ArrayList
if (value == null) throw new IllegalArgumentException("null value");
HttpField field = new HttpField(header, value);
- add(field);
+ _fields.add(field);
}
/**
@@ -416,11 +440,11 @@ public class HttpFields extends ArrayList
*/
public HttpField remove(HttpHeader name)
{
- for (int i=size();i-->0;)
+ for (int i=_fields.size();i-->0;)
{
- HttpField f=get(i);
+ HttpField f=_fields.get(i);
if (f.getHeader()==name)
- return remove(i);
+ return _fields.remove(i);
}
return null;
}
@@ -432,11 +456,11 @@ public class HttpFields extends ArrayList
*/
public HttpField remove(String name)
{
- for (int i=size();i-->0;)
+ for (int i=_fields.size();i-->0;)
{
- HttpField f=get(i);
+ HttpField f=_fields.get(i);
if (f.getName().equalsIgnoreCase(name))
- return remove(i);
+ return _fields.remove(i);
}
return null;
}
@@ -566,6 +590,16 @@ public class HttpFields extends ArrayList
return e.toString();
}
}
+
+ public void clear()
+ {
+ _fields.clear();
+ }
+
+ public void add(HttpField field)
+ {
+ _fields.add(field);
+ }
/**
* Add fields from another HttpFields instance. Single valued fields are replaced, while all
diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java
index 1006d3a9740..be41545a11a 100644
--- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java
+++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaData.java
@@ -67,7 +67,7 @@ public class MetaData implements Iterable
return false;
MetaData m = (MetaData)o;
- List lm=m.getFields();
+ HttpFields lm=m.getFields();
int s=0;
for (HttpField field: this)
{
diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java
index bd23ace1fd6..9e74e4b6345 100644
--- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java
+++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java
@@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
import java.util.List;
import org.eclipse.jetty.http.HttpField;
+import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpScheme;
import org.eclipse.jetty.http.HttpURI;
import org.eclipse.jetty.http.HttpVersion;
@@ -77,10 +78,10 @@ public class HttpChannelOverHTTP2 extends HttpChannel
parsedHostHeader(requestMetaData.getHost(), requestMetaData.getPort());
- List fields = requestMetaData.getFields();
+ HttpFields fields = requestMetaData.getFields();
for (int i = 0; i < fields.size(); ++i)
{
- HttpField field = fields.get(i);
+ HttpField field = fields.getField(i);
parsedHeader(field);
}