All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javaVertXServer.VerticleHelper.mustache Maven / Gradle / Ivy

The newest version!
package {{invokerPackage}}.util;

import com.fasterxml.jackson.core.type.TypeReference;
import com.github.phiz71.vertx.swagger.router.SwaggerRouter;
import {{invokerPackage}}.MainApiException;
import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.Json;
import io.vertx.core.json.JsonObject;
import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;

{{#rxInterface}}
import rx.functions.Action1;
{{/rxInterface}}
{{^rxInterface}}
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
{{/rxInterface}}

public class VerticleHelper {

    private Logger logger;

    public VerticleHelper(Logger logger) {
        this.logger = logger;
    }

    public VerticleHelper(Class clazz) {
        this.logger = LoggerFactory.getLogger(clazz);
    }

{{#rxInterface}}
    public Action1 getErrorAction(Message message, String serviceName) {
        return error -> {
            manageError(message, error, serviceName);
        };
    }

    public  Action1> getRxResultHandler(Message message, boolean withJsonEncode, TypeReference type) {
        return result -> {
            DeliveryOptions deliveryOptions = new DeliveryOptions();
            deliveryOptions.setHeaders(result.getHeaders());
            if (withJsonEncode) {
                message.reply(Json.encode(result.getResponse()), deliveryOptions);
            } else {
                message.reply(result.getResponse(), deliveryOptions);
            }
        };
    }
{{/rxInterface}}
{{^rxInterface}}
    public  Handler>> getAsyncResultHandler(Message message, String serviceName, boolean withJsonEncode, TypeReference type) {
        return result -> {
            if (result.succeeded()) {
                DeliveryOptions deliveryOptions = new DeliveryOptions();
                deliveryOptions.setHeaders(result.result().getHeaders());
                if(withJsonEncode) {
                    message.reply(Json.encode(result.result().getResponse()), deliveryOptions);
                } else {
                    message.reply(result.result().getResponse(), deliveryOptions);
                }
            } else {
                Throwable cause = result.cause();
                manageError(message, cause, serviceName);
            }
        };
    }
{{/rxInterface}}

    public void manageError(Message message, Throwable cause, String serviceName) {
        int code = MainApiException.INTERNAL_SERVER_ERROR.getStatusCode();
        String statusMessage = MainApiException.INTERNAL_SERVER_ERROR.getStatusMessage();
        DeliveryOptions deliveryOptions = new DeliveryOptions();
        if (cause instanceof MainApiException) {
            code = ((MainApiException)cause).getStatusCode();
            statusMessage = ((MainApiException)cause).getStatusMessage();
            deliveryOptions.setHeaders(((MainApiException)cause).getHeaders());
        } else {
            logUnexpectedError(serviceName, cause);
        }
        deliveryOptions.addHeader(SwaggerRouter.CUSTOM_STATUS_CODE_HEADER_KEY, String.valueOf(code));
        deliveryOptions.addHeader(SwaggerRouter.CUSTOM_STATUS_MESSAGE_HEADER_KEY, statusMessage);

        message.reply(null, deliveryOptions);
    }

    private void logUnexpectedError(String serviceName, Throwable cause) {
        logger.error("Unexpected error in "+ serviceName, cause);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy