
org.swisspush.gateleen.routing.NullForwarder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gateleen-routing Show documentation
Show all versions of gateleen-routing Show documentation
Middleware library based on Vert.x to build advanced JSON/REST communication servers
The newest version!
package org.swisspush.gateleen.routing;
import io.vertx.core.Handler;
import io.vertx.core.MultiMap;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.CaseInsensitiveHeaders;
import io.vertx.ext.web.RoutingContext;
import org.slf4j.Logger;
import org.swisspush.gateleen.core.http.HttpRequest;
import org.swisspush.gateleen.core.http.RequestLoggerFactory;
import org.swisspush.gateleen.core.util.StatusCode;
import org.swisspush.gateleen.logging.LoggingHandler;
import org.swisspush.gateleen.logging.LoggingResourceManager;
import org.swisspush.gateleen.monitoring.MonitoringHandler;
import java.util.Map;
/**
* Consumes requests without forwarding them anywhere.
*
* @author https://github.com/ljucam [Mario Ljuca]
*/
public class NullForwarder implements Handler {
private LoggingResourceManager loggingResourceManager;
private MonitoringHandler monitoringHandler;
private Rule rule;
public NullForwarder(Rule rule, LoggingResourceManager loggingResourceManager, MonitoringHandler monitoringHandler){
this.rule = rule;
this.loggingResourceManager = loggingResourceManager;
this.monitoringHandler = monitoringHandler;
}
@Override
public void handle(final RoutingContext ctx) {
monitoringHandler.updateRequestPerRuleMonitoring(ctx.request(), rule.getName());
final LoggingHandler loggingHandler = new LoggingHandler(loggingResourceManager, ctx.request());
final Logger log = RequestLoggerFactory.getLogger(NullForwarder.class, ctx.request());
log.debug("Not forwarding request: " + ctx.request().uri() + " with rule " + rule.getRuleIdentifier());
final MultiMap requestHeaders = new CaseInsensitiveHeaders();
requestHeaders.addAll(ctx.request().headers());
if (rule.getStaticHeaders() != null) {
for (Map.Entry entry : rule.getStaticHeaders().entrySet()) {
requestHeaders.set(entry.getKey(), entry.getValue());
}
}
final Buffer header = Buffer.buffer(new HttpRequest(ctx.request().method(), ctx.request().uri(), requestHeaders, null).toJsonObject().encode());
final Buffer requestBuffer = Buffer.buffer();
requestBuffer.setInt(0, header.length()).appendBuffer(header);
int statusCode = StatusCode.OK.getStatusCode();
String statusMessage = StatusCode.OK.getStatusMessage();
/*
* We create a response for the client,
* but we discard the request and therefore
* do not forward it.
*/
ctx.response().setStatusCode(statusCode);
ctx.response().setStatusMessage(statusMessage);
ctx.response().headers().add("Content-Length", "0");
ctx.request().handler(buffer -> {
loggingHandler.appendRequestPayload(buffer, requestHeaders);
requestBuffer.appendBuffer(buffer);
MultiMap responseHeaders = ctx.response().headers();
loggingHandler.log(ctx.request().uri(), ctx.request().method(), statusCode, statusMessage, requestHeaders, responseHeaders != null ? responseHeaders : new CaseInsensitiveHeaders());
});
ctx.response().end();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy