/** * Processes a request for a non-standard operation. * <p> * Subclasses should override this method in order to support additional, custom * operations that are not defined by Hono's Tenant API. * <p> * This default implementation simply returns a future that is failed with a * {@link ClientErrorException} with an error code <em>400 Bad Request</em>. * * @param request The request to process. * @return A future indicating the outcome of the service invocation. */ protected Future<EventBusMessage> processCustomTenantMessage(final EventBusMessage request) { log.debug("invalid operation in request message [{}]", request.getOperation()); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); }
/** * Processes a request for a non-standard operation. * <p> * Subclasses should override this method in order to support additional, custom * operations that are not defined by Hono's Tenant API. * <p> * This default implementation simply returns a future that is failed with a * {@link ClientErrorException} with an error code <em>400 Bad Request</em>. * * @param request The request to process. * @return A future indicating the outcome of the service invocation. */ protected Future<EventBusMessage> processCustomTenantMessage(final EventBusMessage request) { log.debug("invalid operation in request message [{}]", request.getOperation()); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); }
/** * Processes a request for a non-standard operation. * <p> * Subclasses should override this method in order to support additional, custom * operations that are not defined by Hono's Credentials API. * <p> * This default implementation simply returns a future that is failed with a * {@link ClientErrorException} with an error code <em>400 Bad Request</em>. * * @param request The request to process. * @return A future indicating the outcome of the service invocation. */ protected Future<EventBusMessage> processCustomCredentialsMessage(final EventBusMessage request) { log.debug("invalid operation in request message [{}]", request.getOperation()); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); }
/** * Processes a request for a non-standard operation. * <p> * Subclasses should override this method in order to support additional, custom * operations that are not defined by Hono's Credentials API. * <p> * This default implementation simply returns a future that is failed with a * {@link ClientErrorException} with an error code <em>400 Bad Request</em>. * * @param request The request to process. * @return A future indicating the outcome of the service invocation. */ protected Future<EventBusMessage> processCustomCredentialsMessage(final EventBusMessage request) { log.debug("invalid operation in request message [{}]", request.getOperation()); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); };
/** * Processes a request for a non-standard operation. * <p> * Subclasses should override this method in order to support additional, custom * operations that are not defined by Hono's Device Registration API. * <p> * This default implementation simply returns a future that is failed with a * {@link ClientErrorException} with an error code <em>400 Bad Request</em>. * * @param request The request to process. * @return A future indicating the outcome of the service invocation. */ protected Future<EventBusMessage> processCustomRegistrationMessage(final EventBusMessage request) { log.debug("invalid operation in request message [{}]", request.getOperation()); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); }
/** * Processes a request for a non-standard operation. * <p> * Subclasses should override this method in order to support additional, custom * operations that are not defined by Hono's Device Registration API. * <p> * This default implementation simply returns a future that is failed with a * {@link ClientErrorException} with an error code <em>400 Bad Request</em>. * * @param request The request to process. * @return A future indicating the outcome of the service invocation. */ protected Future<EventBusMessage> processCustomRegistrationMessage(final EventBusMessage request) { log.debug("invalid operation in request message [{}]", request.getOperation()); return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); }
/** * Checks if this (response) message has all properties required * for successful delivery to the client. * * @return {@code true} if this message has {@code non-null} values for * properties <em>operation</em>, <em>replyToAddress</em> and * <em>correlationId</em>. */ public boolean hasResponseProperties() { return getOperation() != null && getReplyToAddress() != null && getProperty(MessageHelper.SYS_PROPERTY_CORRELATION_ID) != null; }
/** * Checks if this (response) message has all properties required * for successful delivery to the client. * * @return {@code true} if this message has {@code non-null} values for * properties <em>operation</em>, <em>replyToAddress</em> and * <em>correlationId</em>. */ public boolean hasResponseProperties() { return getOperation() != null && getReplyToAddress() != null && getProperty(MessageHelper.SYS_PROPERTY_CORRELATION_ID) != null; }
/** * Processes a device registration API request received via the vert.x event bus. * <p> * This method validates the request parameters against the Device Registration API * specification before invoking the corresponding {@code RegistrationService} methods. * * @param requestMessage The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public Future<EventBusMessage> processRequest(final EventBusMessage requestMessage) { Objects.requireNonNull(requestMessage); switch (requestMessage.getOperation()) { case RegistrationConstants.ACTION_ASSERT: return processAssertRequest(requestMessage); default: return processCustomRegistrationMessage(requestMessage); } }
/** * Processes a device registration API request received via the vert.x event bus. * <p> * This method validates the request parameters against the Device Registration API * specification before invoking the corresponding {@code RegistrationService} methods. * * @param requestMessage The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public Future<EventBusMessage> processRequest(final EventBusMessage requestMessage) { Objects.requireNonNull(requestMessage); switch (requestMessage.getOperation()) { case RegistrationConstants.ACTION_ASSERT: return processAssertRequest(requestMessage); default: return processCustomRegistrationMessage(requestMessage); } }
/** * Processes a Tenant API request message received via the vert.x event bus. * <p> * This method validates the request payload against the Tenant API specification * before invoking the corresponding {@code TenantService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); switch (TenantConstants.TenantAction.from(request.getOperation())) { case get: return processGetRequest(request); default: return processCustomTenantMessage(request); } }
/** * Processes a Credentials API request received via the vert.x event bus. * <p> * This method validates the request parameters against the Credentials API * specification before invoking the corresponding {@code CredentialsService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); final String operation = request.getOperation(); switch (CredentialsConstants.CredentialsAction.from(operation)) { case get: return processGetRequest(request); default: return processCustomCredentialsMessage(request); } }
/** * Processes a Tenant API request message received via the vert.x event bus. * <p> * This method validates the request payload against the Tenant API specification * before invoking the corresponding {@code TenantService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); switch (TenantConstants.TenantAction.from(request.getOperation())) { case get: return processGetRequest(request); default: return processCustomTenantMessage(request); } }
/** * Processes a Credentials API request received via the vert.x event bus. * <p> * This method validates the request parameters against the Credentials API * specification before invoking the corresponding {@code CredentialsService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); final String operation = request.getOperation(); switch (CredentialsConstants.CredentialsAction.from(operation)) { case get: return processGetRequest(request); default: return processCustomCredentialsMessage(request); } }
private void processRequestMessage(final Message<JsonObject> msg) { if (log.isTraceEnabled()) { log.trace("received request message: {}", msg.body().encodePrettily()); } final EventBusMessage request = EventBusMessage.fromJson(msg.body()); processRequest(request).recover(t -> { log.debug("cannot process request [operation: {}]: {}", request.getOperation(), t.getMessage()); final int status = ServiceInvocationException.extractStatusCode(t); return Future.succeededFuture(request.getResponse(status)); }).map(response -> { if (response.getReplyToAddress() == null) { log.debug("sending response as direct reply to request [operation: {}]", request.getOperation()); msg.reply(response.toJson()); } else if (response.hasResponseProperties()) { log.debug("sending response [operation: {}, reply-to: {}]", request.getOperation(), request.getReplyToAddress()); vertx.eventBus().send(request.getReplyToAddress(), response.toJson()); } else { log.warn("discarding response lacking correlation ID or operation"); } return null; }); }
private void processRequestMessage(final Message<JsonObject> msg) { if (log.isTraceEnabled()) { log.trace("received request message: {}", msg.body().encodePrettily()); } final EventBusMessage request = EventBusMessage.fromJson(msg.body()); final SpanContext spanContext = tracer.extract(Format.Builtin.TEXT_MAP, new MultiMapExtractAdapter(msg.headers())); request.setSpanContext(spanContext); processRequest(request).recover(t -> { log.debug("cannot process request [operation: {}]: {}", request.getOperation(), t.getMessage()); final int status = ServiceInvocationException.extractStatusCode(t); return Future.succeededFuture(request.getResponse(status)); }).map(response -> { if (response.getReplyToAddress() == null) { log.debug("sending response as direct reply to request [operation: {}]", request.getOperation()); msg.reply(response.toJson()); } else if (response.hasResponseProperties()) { log.debug("sending response [operation: {}, reply-to: {}]", request.getOperation(), request.getReplyToAddress()); vertx.eventBus().send(request.getReplyToAddress(), response.toJson()); } else { log.warn("discarding response lacking correlation ID or operation"); } return null; }); }
/** * Processes a Tenant API request message received via the vert.x event bus. * <p> * This method validates the request payload against the Tenant API specification * before invoking the corresponding {@code TenantService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public final Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); switch (TenantConstants.TenantAction.from(request.getOperation())) { case add: return processAddRequest(request); case get: return processGetRequest(request); case update: return processUpdateRequest(request); case remove: return processRemoveRequest(request); default: return processCustomTenantMessage(request); } }
/** * Processes a Tenant API request message received via the vert.x event bus. * <p> * This method validates the request payload against the Tenant API specification * before invoking the corresponding {@code TenantService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public final Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); switch (TenantConstants.TenantAction.from(request.getOperation())) { case add: return processAddRequest(request); case get: return processGetRequest(request); case update: return processUpdateRequest(request); case remove: return processRemoveRequest(request); default: return processCustomTenantMessage(request); } }
/** * Processes a Credentials API request received via the vert.x event bus. * <p> * This method validates the request parameters against the Credentials API * specification before invoking the corresponding {@code CredentialsService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public final Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); final String operation = request.getOperation(); switch (CredentialsConstants.CredentialsAction.from(operation)) { case get: return processGetRequest(request); case add: return processAddRequest(request); case update: return processUpdateRequest(request); case remove: return processRemoveRequest(request); default: return processCustomCredentialsMessage(request); } }
/** * Processes a Credentials API request received via the vert.x event bus. * <p> * This method validates the request parameters against the Credentials API * specification before invoking the corresponding {@code CredentialsService} methods. * * @param request The request message. * @return A future indicating the outcome of the service invocation. * @throws NullPointerException If the request message is {@code null}. */ @Override public final Future<EventBusMessage> processRequest(final EventBusMessage request) { Objects.requireNonNull(request); final String operation = request.getOperation(); switch (CredentialsConstants.CredentialsAction.from(operation)) { case get: return processGetRequest(request); case add: return processAddRequest(request); case update: return processUpdateRequest(request); case remove: return processRemoveRequest(request); default: return processCustomCredentialsMessage(request); } }