use of io.vertx.mutiny.core.buffer.Buffer in project kogito-runtimes by kiegroup.
the class RestWorkItemHandler method executeWorkItem.
@Override
public void executeWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manager) {
Class<?> targetInfo = getTargetInfo(workItem);
logger.debug("Using target {}", targetInfo);
// retrieving parameters
Map<String, Object> parameters = new HashMap<>(workItem.getParameters());
// removing unnecessary parameter
parameters.remove("TaskName");
String endPoint = getParam(parameters, URL, String.class, null);
if (endPoint == null) {
throw new IllegalArgumentException("Missing required parameter " + URL);
}
HttpMethod method = HttpMethod.valueOf(getParam(parameters, METHOD, String.class, "GET").toUpperCase());
Object inputModel = getParam(parameters, CONTENT_DATA, Object.class, null);
String user = getParam(parameters, USER, String.class, null);
String password = getParam(parameters, PASSWORD, String.class, null);
String hostProp = getParam(parameters, HOST, String.class, "localhost");
int portProp = getParam(parameters, PORT, Integer.class, 8080);
RestWorkItemHandlerResult resultHandler = getParam(parameters, RESULT_HANDLER, RestWorkItemHandlerResult.class, DEFAULT_RESULT_HANDLER);
RestWorkItemHandlerBodyBuilder bodyBuilder = getBodyBuilder(parameters);
logger.debug("Filtered parameters are {}", parameters);
// create request
endPoint = resolvePathParams(endPoint, parameters);
Optional<URL> url = getUrl(endPoint);
String host = url.map(java.net.URL::getHost).orElse(hostProp);
int port = url.map(java.net.URL::getPort).orElse(portProp);
// fix issue with spaces in the path
String path = url.map(java.net.URL::getPath).orElse(endPoint).replace(" ", "%20");
HttpRequest<Buffer> request = client.request(method, port, host, path);
if (user != null && !user.trim().isEmpty() && password != null && !password.trim().isEmpty()) {
request.basicAuthentication(user, password);
}
HttpResponse<Buffer> response = method == HttpMethod.POST || method == HttpMethod.PUT ? request.sendJsonAndAwait(bodyBuilder.apply(inputModel, parameters)) : request.sendAndAwait();
manager.completeWorkItem(workItem.getStringId(), Collections.singletonMap(RESULT, resultHandler.apply(response, targetInfo)));
}
use of io.vertx.mutiny.core.buffer.Buffer in project smallrye-reactive-messaging by smallrye.
the class AmqpMessageConverter method convertToAmqpMessage.
static io.vertx.mutiny.amqp.AmqpMessage convertToAmqpMessage(Message<?> message, boolean durable, long ttl) {
Object payload = message.getPayload();
OutgoingAmqpMetadata metadata = message.getMetadata(OutgoingAmqpMetadata.class).orElse(new OutgoingAmqpMetadata());
org.apache.qpid.proton.message.Message output = org.apache.qpid.proton.message.Message.Factory.create();
// Header
if (metadata.isDurable()) {
output.setDurable(true);
} else {
output.setDurable(durable);
}
output.setPriority(metadata.getPriority());
if (metadata.getTtl() > 0) {
output.setTtl(metadata.getTtl());
} else if (ttl > 0) {
output.setTtl(ttl);
}
// Annotations
DeliveryAnnotations deliveryAnnotations = metadata.getDeliveryAnnotations();
MessageAnnotations messageAnnotations = metadata.getMessageAnnotations();
if (!deliveryAnnotations.getValue().isEmpty()) {
output.setDeliveryAnnotations(deliveryAnnotations);
}
if (!messageAnnotations.getValue().isEmpty()) {
output.setMessageAnnotations(messageAnnotations);
}
// Properties
output.setMessageId(metadata.getMessageId());
output.setUserId(metadata.getUserId() != null ? metadata.getUserId().getBytes() : null);
output.setAddress(metadata.getAddress());
output.setSubject(metadata.getSubject());
output.setReplyTo(metadata.getReplyTo());
output.setCorrelationId(metadata.getCorrelationId());
output.setContentType(metadata.getContentType());
output.setContentEncoding(metadata.getContentEncoding());
output.setExpiryTime(metadata.getExpiryTime());
output.setCreationTime(metadata.getCreationTime());
output.setGroupId(metadata.getGroupId());
output.setGroupSequence(metadata.getGroupSequence());
output.setReplyToGroupId(metadata.getReplyToGroupId());
if (!metadata.getProperties().isEmpty()) {
output.setApplicationProperties(new ApplicationProperties(metadata.getProperties().getMap()));
}
// Application data section:
if (payload instanceof String || isPrimitive(payload.getClass()) || payload instanceof UUID) {
output.setBody(new AmqpValue(payload));
} else if (payload instanceof Buffer) {
output.setBody(new Data(new Binary(((Buffer) payload).getBytes())));
if (output.getContentType() == null) {
output.setContentType(BINARY_CONTENT_TYPE);
}
} else if (payload instanceof io.vertx.core.buffer.Buffer) {
output.setBody(new Data(new Binary(((io.vertx.core.buffer.Buffer) payload).getBytes())));
if (output.getContentType() == null) {
output.setContentType(BINARY_CONTENT_TYPE);
}
} else if (payload instanceof Instant) {
output.setBody(new AmqpValue(Date.from((Instant) payload)));
} else if (payload instanceof JsonArray) {
byte[] bytes = ((JsonArray) payload).toBuffer().getBytes();
output.setBody(new Data(new Binary(bytes)));
if (output.getContentType() == null) {
output.setContentType(JSON_CONTENT_TYPE);
}
} else if (payload instanceof JsonObject) {
byte[] bytes = ((JsonObject) payload).toBuffer().getBytes();
output.setBody(new Data(new Binary(bytes)));
if (output.getContentType() == null) {
output.setContentType(JSON_CONTENT_TYPE);
}
} else if (payload instanceof byte[]) {
output.setBody(new Data(new Binary(((byte[]) payload))));
if (output.getContentType() == null) {
output.setContentType(BINARY_CONTENT_TYPE);
}
} else if (payload instanceof Map || payload instanceof List) {
// This branch must be after the JSON Object and JSON Array checks
output.setBody(new AmqpValue(payload));
} else {
byte[] bytes = Json.encodeToBuffer(payload).getBytes();
output.setBody(new Data(new Binary(bytes)));
if (output.getContentType() == null) {
output.setContentType(JSON_CONTENT_TYPE);
}
}
// Footer
Footer footer = metadata.getFooter();
if (!footer.getValue().isEmpty()) {
output.setFooter(footer);
}
return new AmqpMessage(new AmqpMessageImpl(output));
}
use of io.vertx.mutiny.core.buffer.Buffer in project smallrye-reactive-messaging by smallrye.
the class KafkaCloudEventHelper method createFromStructuredCloudEvent.
public static <T, K> IncomingKafkaCloudEventMetadata<K, T> createFromStructuredCloudEvent(ConsumerRecord<K, T> record) {
DefaultCloudEventMetadataBuilder<T> builder = new DefaultCloudEventMetadataBuilder<>();
JsonObject content;
if (record.value() instanceof JsonObject) {
content = (JsonObject) record.value();
} else if (record.value() instanceof String) {
content = new JsonObject((String) record.value());
} else if (record.value() instanceof byte[]) {
byte[] bytes = (byte[]) record.value();
Buffer buffer = Buffer.buffer(bytes);
content = buffer.toJsonObject();
} else {
throw new IllegalArgumentException("Invalid value type. Structured Cloud Event can only be created from String, JsonObject and byte[], found: " + record.value().getClass());
}
// Required
builder.withSpecVersion(content.getString(CloudEventMetadata.CE_ATTRIBUTE_SPEC_VERSION));
builder.withId(content.getString(CloudEventMetadata.CE_ATTRIBUTE_ID));
String source = content.getString(CloudEventMetadata.CE_ATTRIBUTE_SOURCE);
if (source == null) {
throw new IllegalArgumentException("The JSON value must contain the " + CloudEventMetadata.CE_ATTRIBUTE_SOURCE + " attribute");
}
builder.withSource(URI.create(source));
builder.withType(content.getString(CloudEventMetadata.CE_ATTRIBUTE_TYPE));
// Optional
String ct = content.getString(CloudEventMetadata.CE_ATTRIBUTE_DATA_CONTENT_TYPE);
if (ct != null) {
builder.withDataContentType(ct);
}
String schema = content.getString(CloudEventMetadata.CE_ATTRIBUTE_DATA_SCHEMA);
if (schema != null) {
builder.withDataSchema(URI.create(schema));
}
String subject = content.getString(CloudEventMetadata.CE_ATTRIBUTE_SUBJECT);
if (subject != null) {
builder.withSubject(subject);
}
String time = content.getString(CloudEventMetadata.CE_ATTRIBUTE_TIME);
if (time != null) {
builder.withTimestamp(ZonedDateTime.parse(time, RFC3339_DATE_FORMAT));
}
// Extensions
if (record.key() != null) {
builder.withExtension(CE_KAFKA_KEY, record.key());
}
builder.withExtension(CE_KAFKA_TOPIC, record.topic());
// Data
Object data = content.getValue("data");
// noinspection unchecked
builder.withData((T) data);
BaseCloudEventMetadata<T> cloudEventMetadata = builder.build();
cloudEventMetadata.validate();
return new DefaultIncomingKafkaCloudEventMetadata<>(new DefaultIncomingCloudEventMetadata<>(cloudEventMetadata));
}
use of io.vertx.mutiny.core.buffer.Buffer in project kogito-runtimes by kiegroup.
the class RestWorkItemHandlerTest method testEmptyInputModel.
@Test
public void testEmptyInputModel() {
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode = objectMapper.createObjectNode().put("id", 26).put("name", "pepe");
RestWorkItemHandlerResult resultHandler = new DefaultRestWorkItemHandlerResult();
HttpResponse<Buffer> response = mock(HttpResponse.class);
when(response.bodyAsJson(ObjectNode.class)).thenReturn(objectNode);
assertSame(objectNode, resultHandler.apply(response, ObjectNode.class));
}
use of io.vertx.mutiny.core.buffer.Buffer in project sandbox by 5733d9e2be6485d52ffa08870cabdee0.
the class WebhookInvoker method onEvent.
@Override
public void onEvent(String event) {
HttpRequest<Buffer> request = client.postAbs(endpoint);
if (token != null && !"".equals(token)) {
request = request.bearerTokenAuthentication(token);
}
request.sendJsonObjectAndForget(new JsonObject(event));
}
Aggregations