@@ -113,6 +113,8 @@ public Response call(String uri, ConnectorContext context, HttpServletRequest re
113
113
Response resp = null ;
114
114
boolean newlyLoaded = false ;
115
115
116
+ context .setCommitResponseOnAuthenticationError (false );
117
+
116
118
try
117
119
{
118
120
if (!hasAccessToken ())
@@ -127,7 +129,8 @@ public Response call(String uri, ConnectorContext context, HttpServletRequest re
127
129
// First call
128
130
if (logger .isDebugEnabled ())
129
131
logger .debug ("Loading resource " + uri + " - first attempt" );
130
-
132
+
133
+ wrappedRes .reset ();
131
134
resp = callInternal (uri , context , req , wrappedRes );
132
135
133
136
if (logger .isDebugEnabled ())
@@ -151,6 +154,7 @@ public Response call(String uri, ConnectorContext context, HttpServletRequest re
151
154
{
152
155
if (logger .isDebugEnabled ())
153
156
logger .debug ("Token has been updated, retrying request for " + uri );
157
+ wrappedRes .reset ();
154
158
resp = callInternal (uri , context , req , wrappedRes );
155
159
if (logger .isDebugEnabled ())
156
160
logger .debug ("Response status " + resp .getStatus ().getCode () + " " + resp .getStatus ().getCodeName ());
@@ -197,6 +201,7 @@ public Response call(String uri, ConnectorContext context, HttpServletRequest re
197
201
logger .debug ("Got new access token " + newToken + " - retrying request for " + uri );
198
202
connectorSession .setParameter (OAuth2Authenticator .CS_PARAM_ACCESS_TOKEN , newToken );
199
203
saveTokens (endpointId , req );
204
+ wrappedRes .reset ();
200
205
resp = callInternal (uri , context , req , wrappedRes );
201
206
}
202
207
else
@@ -213,7 +218,7 @@ public Response call(String uri, ConnectorContext context, HttpServletRequest re
213
218
}
214
219
}
215
220
216
- copyResponseContent (wrappedRes , res , true );
221
+ copyResponseContent (resp , wrappedRes , res , true );
217
222
}
218
223
catch (CredentialVaultProviderException e )
219
224
{
@@ -332,16 +337,31 @@ protected void saveTokens(String endpointId, HttpServletRequest request) throws
332
337
}
333
338
}
334
339
335
- private void copyResponseContent (FakeHttpServletResponse source , HttpServletResponse dest , boolean flush ) throws IOException
340
+ private void copyResponseContent (Response resp , FakeHttpServletResponse source , HttpServletResponse dest , boolean flush ) throws IOException
336
341
{
337
- dest .setStatus (source .getStatus ());
342
+ byte [] bytes = source .getContentAsByteArray ();
343
+ source .flushBuffer ();
344
+ if (logger .isDebugEnabled ())
345
+ {
346
+ logger .debug ("Setting status " + resp .getStatus ().getCode ());
347
+ logger .debug ("Setting encoding " + source .getCharacterEncoding ());
348
+ }
349
+ dest .setStatus (resp .getStatus ().getCode ());
338
350
dest .setCharacterEncoding (source .getCharacterEncoding ());
339
351
// Copy headers over
340
- for (Object hdrname : source .getHeaderNames ())
352
+ for (Map .Entry <String , String > header : resp .getStatus ().getHeaders ().entrySet ())
353
+ {
354
+ dest .setHeader (header .getKey (), header .getValue ());
355
+ if (logger .isDebugEnabled ())
356
+ {
357
+ logger .debug ("Add header " + header .getKey () + ": " + header .getValue ());
358
+ }
359
+ }
360
+ if (logger .isDebugEnabled ())
341
361
{
342
- dest . setHeader (( String ) hdrname , ( String ) source . getHeader (( String ) hdrname ) );
362
+ logger . debug ( "Add bytes " + bytes . length );
343
363
}
344
- dest .getOutputStream ().write (source . getContentAsByteArray () );
364
+ dest .getOutputStream ().write (bytes );
345
365
if (flush )
346
366
{
347
367
dest .flushBuffer ();
0 commit comments