Skip to content

Commit 82a85a1

Browse files
authored
Allow for using HeaderDelegateProvider service (#4276)
* Allow for using HeaderDelegateProvider service if CommonProperties#METAINF_SERVICES_LOOKUP_DISABLE is not true Signed-off-by: Jan Supol <jan.supol@oracle.com>
1 parent a7ea89b commit 82a85a1

File tree

51 files changed

+829
-233
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+829
-233
lines changed

connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ private static URI getProxyUri(final Object proxy) {
456456
@Override
457457
public ClientResponse apply(final ClientRequest clientRequest) throws ProcessingException {
458458
final HttpUriRequest request = getUriHttpRequest(clientRequest);
459-
final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(clientRequest.getHeaders(), request);
459+
final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(clientRequest, request);
460460

461461
try {
462462
final CloseableHttpResponse response;
@@ -476,7 +476,8 @@ public ClientResponse apply(final ClientRequest clientRequest) throws Processing
476476
}
477477

478478
response = client.execute(getHost(request), request, context);
479-
HeaderUtils.checkHeaderChanges(clientHeadersSnapshot, clientRequest.getHeaders(), this.getClass().getName());
479+
HeaderUtils.checkHeaderChanges(clientHeadersSnapshot, clientRequest.getHeaders(),
480+
this.getClass().getName(), clientRequest.getConfiguration());
480481

481482
final Response.StatusType status = response.getStatusLine().getReasonPhrase() == null
482483
? Statuses.from(response.getStatusLine().getStatusCode())
@@ -643,9 +644,10 @@ public boolean isStreaming() {
643644
}
644645
}
645646

646-
private static Map<String, String> writeOutBoundHeaders(final MultivaluedMap<String, Object> headers,
647+
private static Map<String, String> writeOutBoundHeaders(final ClientRequest clientRequest,
647648
final HttpUriRequest request) {
648-
final Map<String, String> stringHeaders = HeaderUtils.asStringHeadersSingleValue(headers);
649+
final Map<String, String> stringHeaders =
650+
HeaderUtils.asStringHeadersSingleValue(clientRequest.getHeaders(), clientRequest.getConfiguration());
649651

650652
for (final Map.Entry<String, String> e : stringHeaders.entrySet()) {
651653
request.addHeader(e.getKey(), e.getValue());

connectors/grizzly-connector/src/main/java/org/glassfish/jersey/grizzly/connector/GrizzlyConnector.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import javax.ws.rs.ProcessingException;
3434
import javax.ws.rs.client.Client;
3535
import javax.ws.rs.core.Configuration;
36-
import javax.ws.rs.core.MultivaluedMap;
3736
import javax.ws.rs.core.Response;
3837

3938
import org.glassfish.jersey.client.ClientProperties;
@@ -178,7 +177,7 @@ public AsyncHttpClient getGrizzlyClient() {
178177
@Override
179178
public ClientResponse apply(final ClientRequest request) {
180179
final Request connectorRequest = translate(request);
181-
final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(request.getHeaders(), connectorRequest);
180+
final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(request, connectorRequest);
182181

183182
final CompletableFuture<ClientResponse> responseFuture = new CompletableFuture<>();
184183
final ByteBufferInputStream entityStream = new ByteBufferInputStream();
@@ -201,7 +200,8 @@ public STATE onHeadersReceived(HttpResponseHeaders headers) throws Exception {
201200
}
202201

203202
HeaderUtils.checkHeaderChanges(clientHeadersSnapshot, request.getHeaders(),
204-
GrizzlyConnector.this.getClass().getName());
203+
GrizzlyConnector.this.getClass().getName(),
204+
request.getConfiguration());
205205

206206
responseFuture.complete(translate(request, this.status, headers, entityStream));
207207
return STATE.CONTINUE;
@@ -242,7 +242,7 @@ public void onThrowable(Throwable t) {
242242
@Override
243243
public Future<?> apply(final ClientRequest request, final AsyncConnectorCallback callback) {
244244
final Request connectorRequest = translate(request);
245-
final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(request.getHeaders(), connectorRequest);
245+
final Map<String, String> clientHeadersSnapshot = writeOutBoundHeaders(request, connectorRequest);
246246
final ByteBufferInputStream entityStream = new ByteBufferInputStream();
247247
final AtomicBoolean callbackInvoked = new AtomicBoolean(false);
248248

@@ -264,7 +264,7 @@ public STATE onHeadersReceived(HttpResponseHeaders headers) throws Exception {
264264
}
265265

266266
HeaderUtils.checkHeaderChanges(clientHeadersSnapshot, request.getHeaders(),
267-
GrizzlyConnector.this.getClass().getName());
267+
GrizzlyConnector.this.getClass().getName(), request.getConfiguration());
268268
// hand-off to grizzly's application thread pool for response processing
269269
processResponse(new Runnable() {
270270
@Override
@@ -462,9 +462,10 @@ public OutputStream getOutputStream(int contentLength) throws IOException {
462462
return baos.toByteArray();
463463
}
464464

465-
private static Map<String, String> writeOutBoundHeaders(final MultivaluedMap<String, Object> headers,
465+
private static Map<String, String> writeOutBoundHeaders(final ClientRequest clientRequest,
466466
final com.ning.http.client.Request request) {
467-
Map<String, String> stringHeaders = HeaderUtils.asStringHeadersSingleValue(headers);
467+
Map<String, String> stringHeaders =
468+
HeaderUtils.asStringHeadersSingleValue(clientRequest.getHeaders(), clientRequest.getConfiguration());
468469

469470
for (Map.Entry<String, String> e : stringHeaders.entrySet()) {
470471
request.getHeaders().add(e.getKey(), e.getValue());

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

+6-4
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ class JettyConnector implements Connector {
129129

130130
private final HttpClient client;
131131
private final CookieStore cookieStore;
132+
private final Configuration configuration;
132133

133134
/**
134135
* Create the new Jetty client connector.
@@ -137,6 +138,7 @@ class JettyConnector implements Connector {
137138
* @param config client configuration.
138139
*/
139140
JettyConnector(final Client jaxrsClient, final Configuration config) {
141+
this.configuration = config;
140142
HttpClient httpClient = null;
141143
if (config.isRegistered(JettyHttpClientSupplier.class)) {
142144
Optional<Object> contract = config.getInstances().stream()
@@ -248,7 +250,7 @@ public ClientResponse apply(final ClientRequest jerseyRequest) throws Processing
248250
try {
249251
final ContentResponse jettyResponse = jettyRequest.send();
250252
HeaderUtils.checkHeaderChanges(clientHeadersSnapshot, jerseyRequest.getHeaders(),
251-
JettyConnector.this.getClass().getName());
253+
JettyConnector.this.getClass().getName(), jerseyRequest.getConfiguration());
252254

253255
final javax.ws.rs.core.Response.StatusType status = jettyResponse.getReason() == null
254256
? Statuses.from(jettyResponse.getStatus())
@@ -306,8 +308,8 @@ private Request translateRequest(final ClientRequest clientRequest) {
306308
return request;
307309
}
308310

309-
private static Map<String, String> writeOutBoundHeaders(final MultivaluedMap<String, Object> headers, final Request request) {
310-
final Map<String, String> stringHeaders = HeaderUtils.asStringHeadersSingleValue(headers);
311+
private Map<String, String> writeOutBoundHeaders(final MultivaluedMap<String, Object> headers, final Request request) {
312+
final Map<String, String> stringHeaders = HeaderUtils.asStringHeadersSingleValue(headers, configuration);
311313

312314
// remove User-agent header set by Jetty; Jersey already sets this in its request (incl. Jetty version)
313315
request.getHeaders().remove(HttpHeader.USER_AGENT);
@@ -396,7 +398,7 @@ public Future<?> apply(final ClientRequest jerseyRequest, final AsyncConnectorCa
396398
@Override
397399
public void onHeaders(final Response jettyResponse) {
398400
HeaderUtils.checkHeaderChanges(clientHeadersSnapshot, jerseyRequest.getHeaders(),
399-
JettyConnector.this.getClass().getName());
401+
JettyConnector.this.getClass().getName(), jerseyRequest.getConfiguration());
400402

401403
if (responseFuture.isDone()) {
402404
if (!callbackInvoked.compareAndSet(false, true)) {

containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,11 @@ public void service(final Request request, final Response response) {
338338
URI baseUri = getBaseUri(request);
339339
URI requestUri = getRequestUri(request);
340340
final ContainerRequest requestContext = new ContainerRequest(baseUri,
341-
requestUri, request.getMethod().getMethodString(),
342-
getSecurityContext(request), new GrizzlyRequestPropertiesDelegate(request));
341+
requestUri,
342+
request.getMethod().getMethodString(),
343+
getSecurityContext(request),
344+
new GrizzlyRequestPropertiesDelegate(request),
345+
appHandler.getConfiguration());
343346
requestContext.setEntityStream(request.getInputStream());
344347
for (final String headerName : request.getHeaderNames()) {
345348
requestContext.headers(headerName, request.getHeaders(headerName));

containers/jdk-http/src/main/java/org/glassfish/jersey/jdkhttp/JdkHttpHandlerContainer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void handle(final HttpExchange exchange) throws IOException {
127127
final ResponseWriter responseWriter = new ResponseWriter(exchange);
128128
final ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri,
129129
exchange.getRequestMethod(), getSecurityContext(exchange.getPrincipal(), isSecure),
130-
new MapPropertiesDelegate());
130+
new MapPropertiesDelegate(), appHandler.getConfiguration());
131131
requestContext.setEntityStream(exchange.getRequestBody());
132132
requestContext.getHeaders().putAll(exchange.getRequestHeaders());
133133
requestContext.setWriter(responseWriter);

containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/WebComponent.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,9 @@ public Integer get() {
385385

386386
try {
387387
final ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri, servletRequest.getMethod(),
388-
getSecurityContext(servletRequest), new ServletPropertiesDelegate(servletRequest));
388+
getSecurityContext(servletRequest), new ServletPropertiesDelegate(servletRequest),
389+
appHandler.getConfiguration()
390+
);
389391

390392
initContainerRequest(requestContext, servletRequest, servletResponse, responseWriter);
391393

containers/jetty-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ public void handle(final String target, final Request request, final HttpServlet
151151
requestUri,
152152
request.getMethod(),
153153
getSecurityContext(request),
154-
new MapPropertiesDelegate());
154+
new MapPropertiesDelegate(),
155+
appHandler.getConfiguration());
155156
requestContext.setEntityStream(request.getInputStream());
156157
final Enumeration<String> headerNames = request.getHeaderNames();
157158
while (headerNames.hasMoreElements()) {

containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/HttpVersionChooser.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.netty.handler.ssl.ApplicationProtocolNames;
2525
import io.netty.handler.ssl.ApplicationProtocolNegotiationHandler;
2626
import io.netty.handler.stream.ChunkedWriteHandler;
27+
import org.glassfish.jersey.server.ResourceConfig;
2728

2829
/**
2930
* Choose the handler implementation based on Http protocol.
@@ -34,26 +35,28 @@ class HttpVersionChooser extends ApplicationProtocolNegotiationHandler {
3435

3536
private final URI baseUri;
3637
private final NettyHttpContainer container;
38+
private final ResourceConfig resourceConfig;
3739

38-
HttpVersionChooser(URI baseUri, NettyHttpContainer container) {
40+
HttpVersionChooser(URI baseUri, NettyHttpContainer container, ResourceConfig resourceConfig) {
3941
super(ApplicationProtocolNames.HTTP_1_1);
4042

4143
this.baseUri = baseUri;
4244
this.container = container;
45+
this.resourceConfig = resourceConfig;
4346
}
4447

4548
@Override
4649
protected void configurePipeline(ChannelHandlerContext ctx, String protocol) throws Exception {
4750
if (ApplicationProtocolNames.HTTP_2.equals(protocol)) {
4851
ctx.pipeline().addLast(Http2MultiplexCodecBuilder.forServer(
49-
new JerseyHttp2ServerHandler(baseUri, container)).build());
52+
new JerseyHttp2ServerHandler(baseUri, container, resourceConfig)).build());
5053
return;
5154
}
5255

5356
if (ApplicationProtocolNames.HTTP_1_1.equals(protocol)) {
5457
ctx.pipeline().addLast(new HttpServerCodec(),
5558
new ChunkedWriteHandler(),
56-
new JerseyServerHandler(baseUri, container));
59+
new JerseyServerHandler(baseUri, container, resourceConfig));
5760
return;
5861
}
5962

containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/JerseyHttp2ServerHandler.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.glassfish.jersey.internal.PropertiesDelegate;
4242
import org.glassfish.jersey.netty.connector.internal.NettyInputStream;
4343
import org.glassfish.jersey.server.ContainerRequest;
44+
import org.glassfish.jersey.server.ResourceConfig;
4445
import org.glassfish.jersey.server.internal.ContainerUtils;
4546

4647
/**
@@ -56,16 +57,19 @@ class JerseyHttp2ServerHandler extends ChannelDuplexHandler {
5657
private final URI baseUri;
5758
private final LinkedBlockingDeque<InputStream> isList = new LinkedBlockingDeque<>();
5859
private final NettyHttpContainer container;
60+
private final ResourceConfig resourceConfig;
5961

6062
/**
6163
* Constructor.
6264
*
63-
* @param baseUri base {@link URI} of the container (includes context path, if any).
64-
* @param container Netty container implementation.
65+
* @param baseUri base {@link URI} of the container (includes context path, if any).
66+
* @param container Netty container implementation.
67+
* @param resourceConfig the application {@link ResourceConfig}
6568
*/
66-
JerseyHttp2ServerHandler(URI baseUri, NettyHttpContainer container) {
69+
JerseyHttp2ServerHandler(URI baseUri, NettyHttpContainer container, ResourceConfig resourceConfig) {
6770
this.baseUri = baseUri;
6871
this.container = container;
72+
this.resourceConfig = resourceConfig;
6973
}
7074

7175
@Override
@@ -151,7 +155,7 @@ public void setProperty(String name, Object object) {
151155
public void removeProperty(String name) {
152156
properties.remove(name);
153157
}
154-
});
158+
}, resourceConfig);
155159

156160
// request entity handling.
157161
if (!http2Headers.isEndStream()) {

containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/JerseyServerHandler.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,11 @@
1919
import java.io.IOException;
2020
import java.io.InputStream;
2121
import java.net.URI;
22-
import java.security.Principal;
2322
import java.util.Collection;
2423
import java.util.HashMap;
2524
import java.util.Map;
2625
import java.util.concurrent.LinkedBlockingDeque;
2726

28-
import javax.ws.rs.core.SecurityContext;
29-
3027
import io.netty.buffer.ByteBuf;
3128
import io.netty.buffer.ByteBufInputStream;
3229
import io.netty.channel.ChannelHandlerContext;
@@ -43,8 +40,8 @@
4340
import io.netty.util.concurrent.GenericFutureListener;
4441
import org.glassfish.jersey.internal.PropertiesDelegate;
4542
import org.glassfish.jersey.netty.connector.internal.NettyInputStream;
46-
import org.glassfish.jersey.netty.httpserver.NettySecurityContext;
4743
import org.glassfish.jersey.server.ContainerRequest;
44+
import org.glassfish.jersey.server.ResourceConfig;
4845
import org.glassfish.jersey.server.internal.ContainerUtils;
4946

5047
/**
@@ -58,16 +55,19 @@ class JerseyServerHandler extends ChannelInboundHandlerAdapter {
5855
private final URI baseUri;
5956
private final LinkedBlockingDeque<InputStream> isList = new LinkedBlockingDeque<>();
6057
private final NettyHttpContainer container;
58+
private final ResourceConfig resourceConfig;
6159

6260
/**
6361
* Constructor.
6462
*
6563
* @param baseUri base {@link URI} of the container (includes context path, if any).
6664
* @param container Netty container implementation.
65+
* @param resourceConfig the application {@link ResourceConfig}
6766
*/
68-
public JerseyServerHandler(URI baseUri, NettyHttpContainer container) {
67+
public JerseyServerHandler(URI baseUri, NettyHttpContainer container, ResourceConfig resourceConfig) {
6968
this.baseUri = baseUri;
7069
this.container = container;
70+
this.resourceConfig = resourceConfig;
7171
}
7272

7373
@Override
@@ -146,7 +146,7 @@ public void setProperty(String name, Object object) {
146146
public void removeProperty(String name) {
147147
properties.remove(name);
148148
}
149-
});
149+
}, resourceConfig);
150150

151151
// request entity handling.
152152
if ((req.headers().contains(HttpHeaderNames.CONTENT_LENGTH) && HttpUtil.getContentLength(req) > 0)

0 commit comments

Comments
 (0)