Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit 3ab55c2

Browse files
Adam Lindenthalpavelbucek
authored andcommitted
#3609: JettyConnector sends two User-Agent headers
Change-Id: I2bca05067dc8f64b48cd56b5cf10c3cbe1d4ec98
1 parent ee2ba2a commit 3ab55c2

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
import org.eclipse.jetty.client.util.OutputStreamContentProvider;
9393
import org.eclipse.jetty.http.HttpField;
9494
import org.eclipse.jetty.http.HttpFields;
95+
import org.eclipse.jetty.http.HttpHeader;
9596
import org.eclipse.jetty.util.HttpCookieStore;
9697
import org.eclipse.jetty.util.Jetty;
9798
import org.eclipse.jetty.util.ssl.SslContextFactory;
@@ -313,6 +314,8 @@ private Request translateRequest(final ClientRequest clientRequest) {
313314
private static Map<String, String> writeOutBoundHeaders(final MultivaluedMap<String, Object> headers, final Request request) {
314315
final Map<String, String> stringHeaders = HeaderUtils.asStringHeadersSingleValue(headers);
315316

317+
// remove User-agent header set by Jetty; Jersey already sets this in its request (incl. Jetty version)
318+
request.getHeaders().remove(HttpHeader.USER_AGENT);
316319
for (final Map.Entry<String, String> e : stringHeaders.entrySet()) {
317320
request.getHeaders().add(e.getKey(), e.getValue());
318321
}

connectors/jetty-connector/src/test/java/org/glassfish/jersey/jetty/connector/HttpHeadersTest.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
33
*
4-
* Copyright (c) 2010-2016 Oracle and/or its affiliates. All rights reserved.
4+
* Copyright (c) 2010-2017 Oracle and/or its affiliates. All rights reserved.
55
*
66
* The contents of this file are subject to the terms of either the GNU
77
* General Public License Version 2 only ("GPL") or the Common Development
@@ -40,12 +40,16 @@
4040

4141
package org.glassfish.jersey.jetty.connector;
4242

43+
import java.util.List;
4344
import java.util.logging.Logger;
4445

46+
import javax.ws.rs.GET;
4547
import javax.ws.rs.HeaderParam;
4648
import javax.ws.rs.POST;
4749
import javax.ws.rs.Path;
4850
import javax.ws.rs.core.Application;
51+
import javax.ws.rs.core.Context;
52+
import javax.ws.rs.core.HttpHeaders;
4953
import javax.ws.rs.core.Response;
5054

5155
import org.glassfish.jersey.client.ClientConfig;
@@ -54,6 +58,7 @@
5458
import org.glassfish.jersey.test.JerseyTest;
5559

5660
import org.junit.Test;
61+
5762
import static org.junit.Assert.assertEquals;
5863
import static org.junit.Assert.assertTrue;
5964

@@ -78,6 +83,15 @@ public String post(
7883
assertEquals("client", xClient);
7984
return "POST";
8085
}
86+
87+
@GET
88+
public String testUserAgent(@Context HttpHeaders httpHeaders) {
89+
final List<String> requestHeader = httpHeaders.getRequestHeader(HttpHeaders.USER_AGENT);
90+
if (requestHeader.size() != 1) {
91+
return "FAIL";
92+
}
93+
return requestHeader.get(0);
94+
}
8195
}
8296

8397
@Override
@@ -99,4 +113,13 @@ public void testPost() {
99113
assertEquals(200, response.getStatus());
100114
assertTrue(response.hasEntity());
101115
}
116+
117+
/**
118+
* Test, that {@code User-agent} header is as set by Jersey, not by underlying Jetty client.
119+
*/
120+
@Test
121+
public void testUserAgent() {
122+
String response = target().path("test").request().get(String.class);
123+
assertTrue("User-agent header should start with 'Jersey', but was " + response, response.startsWith("Jersey"));
124+
}
102125
}

0 commit comments

Comments
 (0)