1313 limitations under the License. */
1414package com .predic8 .membrane .core .interceptor .flow ;
1515
16- import com .predic8 .membrane .annot .MCAttribute ;
17- import com .predic8 .membrane .annot .MCElement ;
18- import com .predic8 .membrane .annot .Required ;
19- import com .predic8 .membrane .core .exchange .Exchange ;
20- import com .predic8 .membrane .core .http .Header ;
21- import com .predic8 .membrane .core .http .HeaderField ;
22- import com .predic8 .membrane .core .http .Request ;
23- import com .predic8 .membrane .core .interceptor .Outcome ;
24- import com .predic8 .membrane .core .interceptor .lang .AbstractExchangeExpressionInterceptor ;
25- import com .predic8 .membrane .core .transport .http .HttpClient ;
26- import org .slf4j .Logger ;
27- import org .slf4j .LoggerFactory ;
28-
29- import java .io .IOException ;
30- import java .util .Arrays ;
31- import java .util .List ;
16+ import com .predic8 .membrane .annot .*;
17+ import com .predic8 .membrane .core .exceptions .*;
18+ import com .predic8 .membrane .core .exchange .*;
19+ import com .predic8 .membrane .core .http .*;
20+ import com .predic8 .membrane .core .interceptor .*;
21+ import com .predic8 .membrane .core .interceptor .lang .*;
22+ import com .predic8 .membrane .core .transport .http .*;
23+ import org .slf4j .*;
24+
25+ import java .io .*;
26+ import java .net .*;
27+ import java .util .*;
3228
3329import static com .google .api .client .http .HttpMethods .*;
34- import static com .predic8 .membrane .core .exceptions .ProblemDetails .internal ;
30+ import static com .predic8 .membrane .core .exceptions .ProblemDetails .* ;
3531import static com .predic8 .membrane .core .http .Header .*;
36- import static com .predic8 .membrane .core .interceptor .Interceptor .Flow .REQUEST ;
32+ import static com .predic8 .membrane .core .interceptor .Interceptor .Flow .*;
33+ import static com .predic8 .membrane .core .interceptor .Outcome .*;
3734import static com .predic8 .membrane .core .interceptor .Outcome .ABORT ;
38- import static com .predic8 .membrane .core .interceptor .Outcome .CONTINUE ;
39- import static java .util .Collections .singletonList ;
35+ import static java .util .Collections .*;
4036
4137/**
4238 * @description Calls an external endpoint
43- *
4439 * @topic 1. Proxies and Flow
4540 */
4641@ MCElement (name = "call" )
@@ -81,8 +76,15 @@ private Outcome handleInternal(Exchange exc) {
8176
8277 try (HttpClient client = new HttpClient ()) {
8378 client .call (newExc );
79+ } catch (UnknownHostException e ) {
80+ log .error ("Error calling: {} Unknown host: {}" , dest , e .getMessage ());
81+ createProblemDetails (dest )
82+ .detail ("Unknown host " + e .getMessage ())
83+ .buildAndSetResponse (exc );
84+ return ABORT ;
8485 } catch (Exception e ) {
8586 log .error ("Error during HTTP call to {}: {}" , dest , e .getMessage (), e );
87+ createProblemDetails (dest ).buildAndSetResponse (exc );
8688 return ABORT ;
8789 }
8890
@@ -105,6 +107,13 @@ private Outcome handleInternal(Exchange exc) {
105107 }
106108 }
107109
110+ private ProblemDetails createProblemDetails (String dest ) {
111+ return internal (router .getConfiguration ().isProduction (), "call" )
112+ .title ("Error performing callout." )
113+ .internal ("expression" , exchangeExpression .getExpression ())
114+ .internal ("destination" , dest );
115+ }
116+
108117 private Request getNewRequest (Exchange exchange ) {
109118 Request .Builder builder = new Request .Builder ()
110119 .method (method )
@@ -145,7 +154,7 @@ Header getFilteredRequestHeader(Exchange exc) {
145154 requestHeader .add (field .getHeaderName ().getName (), field .getValue ());
146155 }
147156 // Removes body-related headers when no body is present
148- if (!methodShouldHaveBody (method )) {
157+ if (!methodShouldHaveBody (method )) {
149158 requestHeader .removeFields (CONTENT_TYPE );
150159 requestHeader .removeFields (CONTENT_LENGTH );
151160 requestHeader .removeFields (TRANSFER_ENCODING );
@@ -161,7 +170,7 @@ static void copyHeadersFromResponseToRequest(Exchange responseExc, Exchange orig
161170 if (headerField .getHeaderName ().getName ().equalsIgnoreCase (rmHeader ))
162171 return ;
163172 }
164- originalExc .getRequest ().getHeader ().setValue (headerField .getHeaderName ().getName (),headerField .getValue ());
173+ originalExc .getRequest ().getHeader ().setValue (headerField .getHeaderName ().getName (), headerField .getValue ());
165174 });
166175 }
167176
0 commit comments