2828
2929import javax .ws .rs .core .Response ;
3030
31- import org .glassfish .jersey .client .ClientProperties ;
3231import org .glassfish .jersey .client .ClientRequest ;
3332import org .glassfish .jersey .client .ClientResponse ;
3433import org .glassfish .jersey .http .HttpHeaders ;
5352 */
5453class JerseyClientHandler extends SimpleChannelInboundHandler <HttpObject > {
5554
56- private static final int DEFAULT_MAX_REDIRECTS = 5 ;
57-
5855 // Modified only by the same thread. No need to synchronize it.
5956 private final Set <URI > redirectUriHistory ;
6057 private final ClientRequest jerseyRequest ;
6158 private final CompletableFuture <ClientResponse > responseAvailable ;
6259 private final CompletableFuture <?> responseDone ;
63- private final boolean followRedirects ;
64- private final int maxRedirects ;
6560 private final NettyConnector connector ;
6661 private final NettyHttpRedirectController redirectController ;
62+ private final NettyConnectorProvider .Config .RW requestConfiguration ;
6763
6864 private NettyInputStream nis ;
6965 private ClientResponse jerseyResponse ;
7066
7167 private boolean readTimedOut ;
7268
7369 JerseyClientHandler (ClientRequest request , CompletableFuture <ClientResponse > responseAvailable ,
74- CompletableFuture <?> responseDone , Set <URI > redirectUriHistory , NettyConnector connector ) {
70+ CompletableFuture <?> responseDone , Set <URI > redirectUriHistory , NettyConnector connector ,
71+ NettyConnectorProvider .Config .RW requestConfiguration ) {
7572 this .redirectUriHistory = redirectUriHistory ;
7673 this .jerseyRequest = request ;
7774 this .responseAvailable = responseAvailable ;
7875 this .responseDone = responseDone ;
79- // Follow redirects by default
80- this .followRedirects = jerseyRequest .resolveProperty (ClientProperties .FOLLOW_REDIRECTS , true );
81- this .maxRedirects = jerseyRequest .resolveProperty (NettyClientProperties .MAX_REDIRECTS , DEFAULT_MAX_REDIRECTS );
76+ this .requestConfiguration = requestConfiguration ;
8277 this .connector = connector ;
78+ // Follow redirects by default
79+ requestConfiguration .followRedirects (jerseyRequest );
80+ requestConfiguration .maxRedirects (jerseyRequest );
8381
84- final NettyHttpRedirectController customRedirectController = jerseyRequest
85- .resolveProperty (NettyClientProperties .HTTP_REDIRECT_CONTROLLER , NettyHttpRedirectController .class );
86- this .redirectController = customRedirectController == null ? new NettyHttpRedirectController () : customRedirectController ;
82+ this .redirectController = requestConfiguration .redirectController (jerseyRequest );
83+ this .redirectController .init (requestConfiguration );
8784 }
8885
8986 @ Override
@@ -109,7 +106,7 @@ protected void notifyResponse(ChannelHandlerContext ctx) {
109106 ClientResponse cr = jerseyResponse ;
110107 jerseyResponse = null ;
111108 int responseStatus = cr .getStatus ();
112- if (followRedirects
109+ if (Boolean . TRUE . equals ( requestConfiguration . followRedirects ())
113110 && (responseStatus == ResponseStatus .Redirect3xx .MOVED_PERMANENTLY_301 .getStatusCode ()
114111 || responseStatus == ResponseStatus .Redirect3xx .FOUND_302 .getStatusCode ()
115112 || responseStatus == ResponseStatus .Redirect3xx .SEE_OTHER_303 .getStatusCode ()
@@ -136,16 +133,17 @@ protected void notifyResponse(ChannelHandlerContext ctx) {
136133 // infinite loop detection
137134 responseAvailable .completeExceptionally (
138135 new RedirectException (LocalizationMessages .REDIRECT_INFINITE_LOOP ()));
139- } else if (redirectUriHistory .size () > maxRedirects ) {
136+ } else if (redirectUriHistory .size () > requestConfiguration . maxRedirects . get () ) {
140137 // maximal number of redirection
141- responseAvailable .completeExceptionally (
142- new RedirectException ( LocalizationMessages .REDIRECT_LIMIT_REACHED (maxRedirects )));
138+ responseAvailable .completeExceptionally (new RedirectException (
139+ LocalizationMessages .REDIRECT_LIMIT_REACHED (requestConfiguration . maxRedirects . get () )));
143140 } else {
144141 ClientRequest newReq = new ClientRequest (jerseyRequest );
145142 newReq .setUri (newUri );
146143 ctx .close ();
147144 if (redirectController .prepareRedirect (newReq , cr )) {
148- final NettyConnector newConnector = new NettyConnector (newReq .getClient ());
145+ final NettyConnector newConnector =
146+ new NettyConnector (newReq .getClient (), connector .connectorConfiguration );
149147 newConnector .execute (newReq , redirectUriHistory , new CompletableFuture <ClientResponse >() {
150148 @ Override
151149 public boolean complete (ClientResponse value ) {
0 commit comments