/** * Clear the request out of the context * * @param methodCall methodCall * @param response response * @return always true */ @Override public boolean after(final MethodCall methodCall, final Response response) { RequestContext.clear(); return true; }
/** * Intercept the call before it gets sent to the service queue. * * @param methodBuilder methodBuilder */ @Override public void beforeMethodSent(final MethodCallBuilder methodBuilder) { if (methodBuilder.getOriginatingRequest() == null) { final Optional<Request<Object>> request = requestContext.getRequest(); if (request.isPresent()) { methodBuilder.setOriginatingRequest(request.get()); } } } }
/** * Captures the current method call and if originating as an HttpRequest, * then we pass the HttpRequest into the the RequestContext. * * @param methodCall methodCall * @return always true which means continue. */ @Override public boolean before(final MethodCall methodCall) { RequestContext.setRequest(methodCall); return true; }
/** * Configure a list of common interceptors. * * @return interceptors. */ private Interceptors configureInterceptors() { Interceptors interceptors = new Interceptors(); SetupMdcForHttpRequestInterceptor setupMdcForHttpRequestInterceptor; if (enableLoggingMappedDiagnosticContext) { enableRequestChain = true; if (requestHeadersToTrackForMappedDiagnosticContext != null && requestHeadersToTrackForMappedDiagnosticContext.size() > 0) { setupMdcForHttpRequestInterceptor = new SetupMdcForHttpRequestInterceptor(requestHeadersToTrackForMappedDiagnosticContext); } else { setupMdcForHttpRequestInterceptor = new SetupMdcForHttpRequestInterceptor(Collections.emptySet()); } interceptors.before.add(setupMdcForHttpRequestInterceptor); interceptors.after.add(setupMdcForHttpRequestInterceptor); } if (enableRequestChain) { final CaptureRequestInterceptor captureRequestInterceptor = new CaptureRequestInterceptor(); interceptors.before.add(captureRequestInterceptor); interceptors.after.add(captureRequestInterceptor); interceptors.beforeSent.add(new ForwardCallMethodInterceptor(new RequestContext())); } return interceptors; }
@Test public void testNoOriginatingRequest() throws Exception { MethodCallBuilder methodCallBuilder = new MethodCallBuilder(); methodCallBuilder.setName("Method 1"); captureRequestInterceptor.before(methodCallBuilder.build()); assertEquals("Method 1", requestContext.getMethodCall().get().name()); captureRequestInterceptor.after(methodCallBuilder.build(), null); assertFalse(requestContext.getMethodCall().isPresent()); }
@Before public void setup() throws Exception { captureRequestInterceptor = new CaptureRequestInterceptor(); requestContext = new RequestContext(); httpContext = new HttpContext(); }
@Test public void testOriginatingMethod() throws Exception { HttpRequestBuilder httpRequestBuilder = HttpRequestBuilder.httpRequestBuilder(); httpRequestBuilder.setUri("/foo"); MethodCallBuilder methodCallBuilder = MethodCallBuilder.methodCallBuilder(); methodCallBuilder.setName("Method 1"); methodCallBuilder.setOriginatingRequest(httpRequestBuilder.build()); methodCallBuilder.setOriginatingRequest(methodCallBuilder.build()); methodCallBuilder.setName("Method 2"); captureRequestInterceptor.before(methodCallBuilder.build()); assertEquals("Method 2", requestContext.getMethodCall().get().name()); assertTrue(httpContext.getHttpRequest().isPresent()); captureRequestInterceptor.after(methodCallBuilder.build(), null); assertFalse(requestContext.getMethodCall().isPresent()); }
/** * Captures the current method call and if originating as an HttpRequest, * then we pass the HttpRequest into the the RequestContext. * * @param methodCall methodCall * @return always true which means continue. */ @Override public boolean before(final MethodCall methodCall) { RequestContext.setRequest(methodCall); return true; }
/** * Clear the request out of the context * * @param methodCall methodCall * @param response response * @return always true */ @Override public boolean after(final MethodCall methodCall, final Response response) { RequestContext.clear(); return true; }
/** * Intercept the call before it gets sent to the service queue. * @param methodBuilder methodBuilder */ @Override public void beforeMethodSent(final MethodCallBuilder methodBuilder) { if (methodBuilder.getOriginatingRequest() == null) { final Optional<Request<Object>> request = requestContext.getRequest(); if (request.isPresent()) { methodBuilder.setOriginatingRequest(request.get()); } } } }
@Before public void setup() { captureRequestInterceptor = new CaptureRequestInterceptor(); requestContext = new RequestContext(); forwardCallMethodInterceptor = new ForwardCallMethodInterceptor(requestContext); HttpRequestBuilder httpRequestBuilder = HttpRequestBuilder.httpRequestBuilder(); httpRequestBuilder.setUri("/foo"); MethodCallBuilder methodCallBuilder = MethodCallBuilder.methodCallBuilder(); methodCallBuilder.setName("Method 1"); methodCallBuilder.setOriginatingRequest(httpRequestBuilder.build()); methodCallBuilder.setOriginatingRequest(methodCallBuilder.build()); methodCallBuilder.setName("Method 2"); captureRequestInterceptor.before(methodCallBuilder.build()); this.methodCallBuilder = MethodCallBuilder.methodCallBuilder(); }
/** Captures the current method call and if originating as an HttpRequest, * then we pass the HttpRequest into the the RequestContext. * @param methodCall methodCall * @return always true which means continue. */ @Override public boolean before(final MethodCall methodCall) { RequestContext.setRequest(methodCall); return true; }
/** * Clear the request out of the context * @param methodCall methodCall * @param response response * @return always true */ @Override public boolean after(final MethodCall methodCall, final Response response) { RequestContext.clear(); return true; }
/** * Intercept the call before it gets sent to the service queue. * * @param methodBuilder methodBuilder */ @Override public void beforeMethodSent(final MethodCallBuilder methodBuilder) { if (methodBuilder.getOriginatingRequest() == null) { final Optional<Request<Object>> request = requestContext.getRequest(); if (request.isPresent()) { methodBuilder.setOriginatingRequest(request.get()); } } } }
@Test public void testIntegrationWithServiceBundle() throws Exception { mdcForHttpRequestInterceptor = new SetupMdcForHttpRequestInterceptor(Sets.set("foo")); final CaptureRequestInterceptor captureRequestInterceptor = new CaptureRequestInterceptor(); captureRequestInterceptor.before(methodCallBuilder.setName("restMethod").setOriginatingRequest(httpRequest).build()); final ServiceBundle serviceBundle = ServiceBundleBuilder.serviceBundleBuilder() .setBeforeMethodCallOnServiceQueue(BeforeMethodCallChain.beforeMethodCallChain(captureRequestInterceptor, mdcForHttpRequestInterceptor)) .setAfterMethodCallOnServiceQueue(AfterMethodCallChain.afterMethodCallChain(captureRequestInterceptor, mdcForHttpRequestInterceptor)) .setBeforeMethodSent(new ForwardCallMethodInterceptor(new RequestContext())).build().startServiceBundle(); serviceBundle.addServiceObject("my", new MyServiceImpl()); final MyService localProxy = serviceBundle.createLocalProxy(MyService.class, "my"); final AsyncFutureCallback<String> callback = AsyncFutureBuilder.asyncFutureBuilder().build(String.class); localProxy.getRequestURI(callback); localProxy.clientProxyFlush(); assertEquals("/foo", callback.get()); final AsyncFutureCallback<Map<String, String>> callbackMap = AsyncFutureBuilder.asyncFutureBuilder() .buildMap(String.class, String.class); localProxy.getMDC(callbackMap); localProxy.clientProxyFlush(); validate(callbackMap.get()); captureRequestInterceptor.after(null, null); serviceBundle.stop(); }