From 50591972284a8f5fcde93a3d584ca019bdfe4e91 Mon Sep 17 00:00:00 2001 From: Walter Medvedeo Date: Thu, 28 Sep 2023 17:41:26 +0200 Subject: [PATCH] KOGITO-9849 DataIndex is not processing well the http cloud events - Ensures that the kogito-addons-quarkus-events-process addon produces the proper content type header when http cloud events are used. - Ensure the data index dev services produce the proper content type header. --- .../addons/common/reactive-messaging/pom.xml | 21 ++++++++++++++++ .../CloudEventHttpOutgoingDecorator.java | 2 +- .../CloudEventHttpOutgoingDecoratorTest.java | 24 ++----------------- .../addons/events/process/deployment/pom.xml | 4 ++++ .../KogitoAddOnEventProcessProcessor.java | 13 ++++++++++ quarkus/addons/events/process/runtime/pom.xml | 4 ++++ .../quarkus/KnativeEventingJobsService.java | 2 +- .../KnativeEventingJobsServiceTest.java | 2 +- .../KogitoAddOnMessagingProcessor.java | 2 +- .../devservices/DataIndexEventPublisher.java | 4 ++++ 10 files changed, 52 insertions(+), 26 deletions(-) rename quarkus/addons/{messaging/common/src/main/java/org/kie/kogito/addon/quarkus/messaging/common/message => common/reactive-messaging/src/main/java/org/kie/kogito/addon/quarkus/common/reactive/messaging/http}/CloudEventHttpOutgoingDecorator.java (96%) rename quarkus/addons/{messaging/common/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message => common/reactive-messaging/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/http}/CloudEventHttpOutgoingDecoratorTest.java (79%) diff --git a/quarkus/addons/common/reactive-messaging/pom.xml b/quarkus/addons/common/reactive-messaging/pom.xml index 798a42c46d6..9d48f6df6de 100644 --- a/quarkus/addons/common/reactive-messaging/pom.xml +++ b/quarkus/addons/common/reactive-messaging/pom.xml @@ -37,6 +37,27 @@ io.smallrye.reactive smallrye-reactive-messaging-api + + + io.quarkiverse.reactivemessaging.http + quarkus-reactive-messaging-http + true + + + jakarta.ws.rs + jakarta.ws.rs-api + true + + + io.quarkus + quarkus-junit5 + test + + + org.assertj + assertj-core + test + \ No newline at end of file diff --git a/quarkus/addons/messaging/common/src/main/java/org/kie/kogito/addon/quarkus/messaging/common/message/CloudEventHttpOutgoingDecorator.java b/quarkus/addons/common/reactive-messaging/src/main/java/org/kie/kogito/addon/quarkus/common/reactive/messaging/http/CloudEventHttpOutgoingDecorator.java similarity index 96% rename from quarkus/addons/messaging/common/src/main/java/org/kie/kogito/addon/quarkus/messaging/common/message/CloudEventHttpOutgoingDecorator.java rename to quarkus/addons/common/reactive-messaging/src/main/java/org/kie/kogito/addon/quarkus/common/reactive/messaging/http/CloudEventHttpOutgoingDecorator.java index 93dc4b8786a..4ff805195c2 100644 --- a/quarkus/addons/messaging/common/src/main/java/org/kie/kogito/addon/quarkus/messaging/common/message/CloudEventHttpOutgoingDecorator.java +++ b/quarkus/addons/common/reactive-messaging/src/main/java/org/kie/kogito/addon/quarkus/common/reactive/messaging/http/CloudEventHttpOutgoingDecorator.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.kie.kogito.addon.quarkus.messaging.common.message; +package org.kie.kogito.addon.quarkus.common.reactive.messaging.http; import javax.ws.rs.core.HttpHeaders; diff --git a/quarkus/addons/messaging/common/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/CloudEventHttpOutgoingDecoratorTest.java b/quarkus/addons/common/reactive-messaging/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/http/CloudEventHttpOutgoingDecoratorTest.java similarity index 79% rename from quarkus/addons/messaging/common/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/CloudEventHttpOutgoingDecoratorTest.java rename to quarkus/addons/common/reactive-messaging/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/http/CloudEventHttpOutgoingDecoratorTest.java index 4c8e16dd17c..72b4d3200a6 100644 --- a/quarkus/addons/messaging/common/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/CloudEventHttpOutgoingDecoratorTest.java +++ b/quarkus/addons/common/reactive-messaging/src/test/java/org/kie/kogito/addon/quarkus/messaging/common/message/http/CloudEventHttpOutgoingDecoratorTest.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.kie.kogito.addon.quarkus.messaging.common.message; +package org.kie.kogito.addon.quarkus.messaging.common.message.http; import java.util.Collections; import java.util.Optional; @@ -26,9 +26,8 @@ import org.eclipse.microprofile.reactive.messaging.Message; import org.junit.jupiter.api.Test; -import org.kie.kogito.KogitoGAV; import org.kie.kogito.addon.quarkus.common.reactive.messaging.MessageDecoratorProvider; -import org.kie.kogito.config.ConfigBean; +import org.kie.kogito.addon.quarkus.common.reactive.messaging.http.CloudEventHttpOutgoingDecorator; import io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata; import io.quarkus.test.junit.QuarkusTest; @@ -44,25 +43,6 @@ class CloudEventHttpOutgoingDecoratorTest { @Produces CloudEventHttpOutgoingDecorator decorator = new CloudEventHttpOutgoingDecorator(); - @Produces - ConfigBean configBean = new ConfigBean() { - - @Override - public boolean useCloudEvents() { - return true; - } - - @Override - public String getServiceUrl() { - return null; - } - - @Override - public Optional getGav() { - return Optional.empty(); - } - }; - @Test void verifyOutgoingHttpMetadataIsSet() { Message message = provider.decorate(Message.of("pepe")); diff --git a/quarkus/addons/events/process/deployment/pom.xml b/quarkus/addons/events/process/deployment/pom.xml index c39e5c7852f..d09dcf06787 100644 --- a/quarkus/addons/events/process/deployment/pom.xml +++ b/quarkus/addons/events/process/deployment/pom.xml @@ -42,6 +42,10 @@ org.kie.kogito kogito-addons-quarkus-common-deployment + + org.kie.kogito + kogito-quarkus-common-deployment + diff --git a/quarkus/addons/events/process/deployment/src/main/java/org/kie/kogito/events/process/deployment/KogitoAddOnEventProcessProcessor.java b/quarkus/addons/events/process/deployment/src/main/java/org/kie/kogito/events/process/deployment/KogitoAddOnEventProcessProcessor.java index 33b2a87ae41..4f2fd414e3d 100644 --- a/quarkus/addons/events/process/deployment/src/main/java/org/kie/kogito/events/process/deployment/KogitoAddOnEventProcessProcessor.java +++ b/quarkus/addons/events/process/deployment/src/main/java/org/kie/kogito/events/process/deployment/KogitoAddOnEventProcessProcessor.java @@ -18,9 +18,15 @@ */ package org.kie.kogito.events.process.deployment; +import org.kie.kogito.addon.quarkus.common.reactive.messaging.http.CloudEventHttpOutgoingDecorator; import org.kie.kogito.quarkus.addons.common.deployment.KogitoCapability; import org.kie.kogito.quarkus.addons.common.deployment.OneOfCapabilityKogitoAddOnProcessor; +import org.kie.kogito.quarkus.common.deployment.KogitoBuildContextBuildItem; +import org.kie.kogito.quarkus.config.KogitoBuildTimeConfig; +import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.arc.processor.DotNames; +import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.FeatureBuildItem; @@ -37,4 +43,11 @@ FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } + @BuildStep + void httpMessageDecorator(BuildProducer beanBuildItem, KogitoBuildTimeConfig buildTimeConfig, KogitoBuildContextBuildItem kogitoContext) { + if (buildTimeConfig.useCloudEvents && kogitoContext.getKogitoBuildContext().hasClassAvailable("io.quarkus.reactivemessaging.http.runtime.OutgoingHttpMetadata")) { + beanBuildItem.produce(AdditionalBeanBuildItem.builder().addBeanClass(CloudEventHttpOutgoingDecorator.class).setDefaultScope(DotNames.APPLICATION_SCOPED).build()); + } + } + } diff --git a/quarkus/addons/events/process/runtime/pom.xml b/quarkus/addons/events/process/runtime/pom.xml index d6db8478b7b..6f566021afd 100644 --- a/quarkus/addons/events/process/runtime/pom.xml +++ b/quarkus/addons/events/process/runtime/pom.xml @@ -65,6 +65,10 @@ io.quarkus quarkus-arc + + org.kie.kogito + kogito-quarkus-common + org.slf4j diff --git a/quarkus/addons/jobs/knative-eventing/runtime/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsService.java b/quarkus/addons/jobs/knative-eventing/runtime/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsService.java index 6c603f3b5ca..d11d0b35c70 100644 --- a/quarkus/addons/jobs/knative-eventing/runtime/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsService.java +++ b/quarkus/addons/jobs/knative-eventing/runtime/src/main/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsService.java @@ -27,7 +27,7 @@ import org.eclipse.microprofile.reactive.messaging.Channel; import org.eclipse.microprofile.reactive.messaging.Emitter; import org.eclipse.microprofile.reactive.messaging.Message; -import org.kie.kogito.addon.quarkus.messaging.common.message.CloudEventHttpOutgoingDecorator; +import org.kie.kogito.addon.quarkus.common.reactive.messaging.http.CloudEventHttpOutgoingDecorator; import org.kie.kogito.jobs.messaging.quarkus.AbstractReactiveMessagingJobsService; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/quarkus/addons/jobs/knative-eventing/runtime/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsServiceTest.java b/quarkus/addons/jobs/knative-eventing/runtime/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsServiceTest.java index ecfd25301ff..74bd0c9b920 100644 --- a/quarkus/addons/jobs/knative-eventing/runtime/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsServiceTest.java +++ b/quarkus/addons/jobs/knative-eventing/runtime/src/test/java/org/kie/kogito/jobs/knative/eventing/quarkus/KnativeEventingJobsServiceTest.java @@ -34,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; -import static org.kie.kogito.addon.quarkus.messaging.common.message.CloudEventHttpOutgoingDecorator.CLOUD_EVENTS_CONTENT_TYPE; +import static org.kie.kogito.addon.quarkus.common.reactive.messaging.http.CloudEventHttpOutgoingDecorator.CLOUD_EVENTS_CONTENT_TYPE; class KnativeEventingJobsServiceTest extends AbstractReactiveMessagingJobsServiceTest { diff --git a/quarkus/addons/messaging/deployment/src/main/java/org/kie/kogito/addon/cloudevents/quarkus/deployment/KogitoAddOnMessagingProcessor.java b/quarkus/addons/messaging/deployment/src/main/java/org/kie/kogito/addon/cloudevents/quarkus/deployment/KogitoAddOnMessagingProcessor.java index f6b17ffd31f..ef95b1ffd02 100644 --- a/quarkus/addons/messaging/deployment/src/main/java/org/kie/kogito/addon/cloudevents/quarkus/deployment/KogitoAddOnMessagingProcessor.java +++ b/quarkus/addons/messaging/deployment/src/main/java/org/kie/kogito/addon/cloudevents/quarkus/deployment/KogitoAddOnMessagingProcessor.java @@ -31,7 +31,7 @@ import org.drools.codegen.common.GeneratedFileType; import org.jboss.jandex.DotName; import org.jbpm.compiler.canonical.ProcessMetaData; -import org.kie.kogito.addon.quarkus.messaging.common.message.CloudEventHttpOutgoingDecorator; +import org.kie.kogito.addon.quarkus.common.reactive.messaging.http.CloudEventHttpOutgoingDecorator; import org.kie.kogito.codegen.api.context.KogitoBuildContext; import org.kie.kogito.codegen.process.ProcessGenerator; import org.kie.kogito.quarkus.addons.common.deployment.AnyEngineKogitoAddOnProcessor; diff --git a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java index 7406838b84b..0d4c0388356 100644 --- a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java +++ b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/devservices/DataIndexEventPublisher.java @@ -38,6 +38,8 @@ public class DataIndexEventPublisher implements EventPublisher { public static final String KOGITO_DATA_INDEX = "kogito.data-index.url"; private static final Logger LOGGER = LoggerFactory.getLogger(DataIndexEventPublisher.class); + private static final String CLOUD_EVENTS_CONTENT_TYPE = "application/cloudevents+json"; + private static final String CONTENT_TYPE = "content-type"; @ConfigProperty(name = KOGITO_DATA_INDEX) Optional dataIndexUrl; @@ -62,6 +64,7 @@ public void publish(DataEvent event) { switch (event.getType()) { case "ProcessInstanceEvent": webClient.postAbs(dataIndexUrl.get() + "/processes") + .putHeader(CONTENT_TYPE, CLOUD_EVENTS_CONTENT_TYPE) .expect(ResponsePredicate.SC_ACCEPTED) .sendJson(event, result -> { if (result.failed()) { @@ -73,6 +76,7 @@ public void publish(DataEvent event) { break; case "UserTaskInstanceEvent": webClient.postAbs(dataIndexUrl.get() + "/tasks") + .putHeader(CONTENT_TYPE, CLOUD_EVENTS_CONTENT_TYPE) .expect(ResponsePredicate.SC_ACCEPTED) .sendJson(event, result -> { if (result.failed()) {