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

Commit 50095dc

Browse files
committed
JERSEY-2855: Jersey part now does not require breaking change in Jersey internal SPI, introduced new ExtendedServletContainerProvider interface to accommodate the additional methods handling HTTP Servlet request/response binding, adjusted test code to compile and run
Change-Id: I38125fcf8a54d56c7c3896a29791c09a5adbad39 Signed-off-by: Jakub Podlesak <[email protected]>
1 parent 2950046 commit 50095dc

File tree

5 files changed

+96
-49
lines changed

5 files changed

+96
-49
lines changed

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
import org.glassfish.jersey.servlet.internal.ResponseWriter;
9898
import org.glassfish.jersey.servlet.internal.ServletContainerProviderFactory;
9999
import org.glassfish.jersey.servlet.internal.Utils;
100+
import org.glassfish.jersey.servlet.internal.spi.ExtendedServletContainerProvider;
100101
import org.glassfish.jersey.servlet.internal.spi.RequestContextProvider;
101102
import org.glassfish.jersey.servlet.internal.spi.RequestScopedInitializerProvider;
102103
import org.glassfish.jersey.servlet.internal.spi.ServletContainerProvider;
@@ -364,11 +365,16 @@ public WebComponent(final WebConfig webConfig, ResourceConfig resourceConfig) th
364365
RequestScopedInitializerProvider rsiProvider = null;
365366

366367
for (final ServletContainerProvider servletContainerProvider : allServletContainerProviders) {
367-
if (servletContainerProvider.bindsServletRequestResponse()) {
368-
rrbExternalized = true;
369-
}
370-
if (rsiProvider == null) { // try to take the first non-null provider
371-
rsiProvider = servletContainerProvider.getRequestScopedInitializerProvider();
368+
if (servletContainerProvider instanceof ExtendedServletContainerProvider) {
369+
final ExtendedServletContainerProvider extendedProvider =
370+
(ExtendedServletContainerProvider) servletContainerProvider;
371+
372+
if (extendedProvider.bindsServletRequestResponse()) {
373+
rrbExternalized = true;
374+
}
375+
if (rsiProvider == null) { // try to take the first non-null provider
376+
rsiProvider = extendedProvider.getRequestScopedInitializerProvider();
377+
}
372378
}
373379
}
374380

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3+
*
4+
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
5+
*
6+
* The contents of this file are subject to the terms of either the GNU
7+
* General Public License Version 2 only ("GPL") or the Common Development
8+
* and Distribution License("CDDL") (collectively, the "License"). You
9+
* may not use this file except in compliance with the License. You can
10+
* obtain a copy of the License at
11+
* http://glassfish.java.net/public/CDDL+GPL_1_1.html
12+
* or packager/legal/LICENSE.txt. See the License for the specific
13+
* language governing permissions and limitations under the License.
14+
*
15+
* When distributing the software, include this License Header Notice in each
16+
* file and include the License file at packager/legal/LICENSE.txt.
17+
*
18+
* GPL Classpath Exception:
19+
* Oracle designates this particular file as subject to the "Classpath"
20+
* exception as provided by Oracle in the GPL Version 2 section of the License
21+
* file that accompanied this code.
22+
*
23+
* Modifications:
24+
* If applicable, add the following below the License Header, with the fields
25+
* enclosed by brackets [] replaced by your own identifying information:
26+
* "Portions Copyright [year] [name of copyright owner]"
27+
*
28+
* Contributor(s):
29+
* If you wish your version of this file to be governed by only the CDDL or
30+
* only the GPL Version 2, indicate your decision by adding "[Contributor]
31+
* elects to include this software in this distribution under the [CDDL or GPL
32+
* Version 2] license." If you don't indicate a single choice of license, a
33+
* recipient has the option to distribute your version of this file under
34+
* either the CDDL, the GPL Version 2 or to extend the choice of license to
35+
* its licensees as provided above. However, if you add GPL Version 2 code
36+
* and therefore, elected the GPL Version 2 license, then the option applies
37+
* only if the new code is made subject to such option by the copyright
38+
* holder.
39+
*/
40+
package org.glassfish.jersey.servlet.internal.spi;
41+
42+
import javax.servlet.http.HttpServletRequest;
43+
import javax.servlet.http.HttpServletResponse;
44+
45+
import org.glassfish.jersey.server.ResourceConfig;
46+
import org.glassfish.jersey.server.spi.RequestScopedInitializer;
47+
48+
/**
49+
* Implementations could provide their own {@link HttpServletRequest} and {@link HttpServletResponse}
50+
* binding implementation in HK2 locator and also an implementation of {@link RequestScopedInitializer}
51+
* that is used to set actual request/response references in HK2 service locator within each request.
52+
*
53+
* @author Jakub Podlesak (jakub.podlesak at oracle.com)
54+
* @since 2.21
55+
*/
56+
public interface ExtendedServletContainerProvider extends ServletContainerProvider {
57+
58+
/**
59+
* Give me a {@link RequestScopedInitializerProvider} instance, that will be utilized
60+
* at runtime to set the actual HTTP Servlet request and response.
61+
*
62+
* The provider returned will be used at runtime for every and each incoming request
63+
* so that the actual request/response instances could be made accessible
64+
* from Jersey HK2 service locator.
65+
*
66+
* @return request scoped initializer provider.
67+
*/
68+
public RequestScopedInitializerProvider getRequestScopedInitializerProvider();
69+
70+
/**
71+
* Used by Jersey runtime to tell if the extension covers HTTP Servlet request response
72+
* handling with respect to underlying HK2 service locator.
73+
*
74+
* Return {@code true}, if your implementation configures HK2 bindings
75+
* for {@link HttpServletRequest} and {@link HttpServletResponse}
76+
* in {@link #configure(ResourceConfig)} method
77+
* and also provides a {@link RequestScopedInitializer} implementation
78+
* via {@link #getRequestScopedInitializerProvider()}.
79+
*
80+
* @return {@code true} if the extension fully covers HTTP request/response handling.
81+
*/
82+
public boolean bindsServletRequestResponse();
83+
}

containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/internal/spi/NoOpServletContainerProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@
5555
import org.glassfish.hk2.api.TypeLiteral;
5656

5757
/**
58-
* Basic {@link ServletContainerProvider} that provides
58+
* Basic {@link ExtendedServletContainerProvider} that provides
5959
* dummy no-op method implementation. It should be convenient to extend if you only need to implement
6060
* a subset of the original SPI methods.
6161
*
6262
* @author Jakub Podlesak (jakub.podlesak at oracle.com)
6363
*/
64-
public class NoOpServletContainerProvider implements ServletContainerProvider {
64+
public class NoOpServletContainerProvider implements ExtendedServletContainerProvider {
6565

6666
public final Type HTTP_SERVLET_REQUEST_TYPE = (new TypeLiteral<Ref<HttpServletRequest>>() {
6767
}).getType();

containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/internal/spi/ServletContainerProvider.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,8 @@
5555
* {@code org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer}.
5656
* The provider implementation class is registered via {@code META-INF/services}.
5757
*
58-
* Implementations could provide their own {@link HttpServletRequest} and {@link HttpServletResponse}
59-
* binding implementation in HK2 locator and also an implementation of {@link RequestScopedInitializer}
60-
* that is used to set actual request/response references in HK2 service locator within each request.
6158
*
6259
* @author Libor Kramolis (libor.kramolis at oracle.com)
63-
* @author Jakub Podlesak (jakub.podlesak at oracle.com)
6460
* @since 2.4.1
6561
*/
6662
public interface ServletContainerProvider {
@@ -135,32 +131,4 @@ public void postInit(ServletContext servletContext, Set<Class<?>> classes, final
135131
* is interrupted.
136132
*/
137133
public void configure(ResourceConfig resourceConfig) throws ServletException;
138-
139-
/**
140-
* Give me a {@link RequestScopedInitializerProvider} instance, that will be utilized
141-
* at runtime to set the actual HTTP Servlet request and response.
142-
*
143-
* The provider returned will be used at runtime for every and each incoming request
144-
* so that the actual request/response instances could be made accessible
145-
* from Jersey HK2 service locator.
146-
*
147-
* @return request scoped initializer provider.
148-
* @since 2.20
149-
*/
150-
public RequestScopedInitializerProvider getRequestScopedInitializerProvider();
151-
152-
/**
153-
* Used by Jersey runtime to tell if the extension covers HTTP Servlet request response
154-
* handling with respect to underlying HK2 service locator.
155-
*
156-
* Return {@code true}, if your implementation configures HK2 bindings
157-
* for {@link HttpServletRequest} and {@link HttpServletResponse}
158-
* in {@link #configure(ResourceConfig)} method
159-
* and also provides a {@link RequestScopedInitializer} implementation
160-
* via {@link #getRequestScopedInitializerProvider()}.
161-
*
162-
* @return {@code true} if the extension fully covers HTTP request/response handling.
163-
* @since 2.20
164-
*/
165-
public boolean bindsServletRequestResponse();
166134
}

tests/integration/servlet-3-init-provider/src/main/java/org/glassfish/jersey/tests/integration/servlet_3_init_provider/TestServletContainerProvider.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,6 @@ public void configure(final ResourceConfig resourceConfig) throws ServletExcepti
9393
}
9494
}
9595

96-
@Override
97-
public boolean bindsServletRequestResponse() {
98-
return false;
99-
}
100-
101-
@Override
102-
public RequestScopedInitializerProvider getRequestScopedInitializerProvider() {
103-
return null;
104-
}
105-
10696
public static Set<String> getServletNames() {
10797
return SERVLET_NAMES;
10898
}

0 commit comments

Comments
 (0)