MEECROWAVE-228 ensure proxy dont fail on cookies with a null domain
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java
index eb4fbc1..c18b5b4 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java
@@ -82,24 +82,15 @@
final AsyncContext asyncContext = req.startAsync();
asyncContext.setTimeout(route.clientConfiguration.timeouts.execution);
- return doRequest(route, req, resp, prefix).handle((response, error) -> {
- try {
- if (error != null) {
- onError(route, req, resp, error);
- } else {
+ return doRequest(route, req, resp, prefix)
+ .thenAccept(response -> {
try {
forwardResponse(route, response, req, resp, identity());
} catch (final IOException e) {
onError(route, req, resp, e);
}
- }
- } catch (final IOException ioe) {
- getServletContext().log("Error Proxying " + req.getMethod() + " " + req.getRequestURI() + ": " + ioe.getMessage(), ioe);
- } finally {
- asyncContext.complete();
- }
- return resp;
- });
+ }).exceptionally(error -> onError(route, req, resp, error)).whenComplete((a, b) -> asyncContext.complete())
+ .thenApply(i -> resp);
}
protected CompletionStage<Response> doRequest(final Routes.Route route,
@@ -168,17 +159,23 @@
return !HttpMethod.HEAD.equalsIgnoreCase(req.getMethod()) && !HttpMethod.GET.equalsIgnoreCase(req.getMethod());
}
- protected void onError(final Routes.Route route,
+ protected Void onError(final Routes.Route route,
final HttpServletRequest request, final HttpServletResponse resp,
- final Throwable error) throws IOException {
- if (WebApplicationException.class.isInstance(error)) {
- final WebApplicationException wae = WebApplicationException.class.cast(error);
- if (wae.getResponse() != null) {
- forwardResponse(route, wae.getResponse(), request, resp, identity());
- return;
+ final Throwable error) {
+ try {
+ if (WebApplicationException.class.isInstance(error)) {
+ final WebApplicationException wae = WebApplicationException.class.cast(error);
+ if (wae.getResponse() != null) {
+ forwardResponse(route, wae.getResponse(), request, resp, identity());
+ return null;
+ }
}
+ onDefaultError(resp, error);
+ } catch (final IOException ioe) {
+ getServletContext().log(ioe.getMessage(), ioe);
+ throw new IllegalStateException(ioe);
}
- onDefaultError(resp, error);
+ return null;
}
protected void onDefaultError(HttpServletResponse resp, Throwable error) throws IOException {
@@ -209,7 +206,9 @@
final NewCookie nc = cookie.getValue();
final Cookie servletCookie = new Cookie(cookie.getKey(), nc.getValue());
servletCookie.setComment(nc.getComment());
- servletCookie.setDomain(nc.getDomain());
+ if (nc.getDomain() != null) {
+ servletCookie.setDomain(nc.getDomain());
+ }
servletCookie.setHttpOnly(nc.isHttpOnly());
servletCookie.setSecure(nc.isSecure());
servletCookie.setMaxAge(nc.getMaxAge());