Skip to content

Commit

Permalink
Reactive Messaging: check if @Blocking is used with one of (Outgoing,…
Browse files Browse the repository at this point in the history
… Incoming)

fixes quarkusio#8567
  • Loading branch information
michalszynkiewicz committed Apr 14, 2020
1 parent 7894a22 commit 729ace8
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ void validateBeanDeployment(
ReactiveMessagingDotNames.INCOMING);
AnnotationInstance outgoing = annotationStore.getAnnotation(method,
ReactiveMessagingDotNames.OUTGOING);
AnnotationInstance blocking = annotationStore.getAnnotation(method,
ReactiveMessagingDotNames.BLOCKING);
if (incoming != null || outgoing != null) {
if (incoming != null && incoming.value().asString().isEmpty()) {
validationPhase.getContext().addDeploymentProblem(
Expand All @@ -149,6 +151,10 @@ void validateBeanDeployment(
// TODO: validate method params and return type?
mediatorMethods.produce(new MediatorBuildItem(bean, method));
LOGGER.debugf("Found mediator business method %s declared on %s", method, bean);
} else if (blocking != null) {
validationPhase.getContext().addDeploymentProblem(
new DeploymentException(
"@Blocking used on " + method + " which has no @Incoming or @Outgoing annotation"));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.quarkus.smallrye.reactivemessaging.blocking;

import static org.junit.jupiter.api.Assertions.fail;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.spi.DeploymentException;
import javax.inject.Inject;

import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.QuarkusUnitTest;
import io.smallrye.reactive.messaging.annotations.Blocking;

public class BlockingWithoutOutgoingOnIncomingErrorTest {

@Inject
BeanWithBlocking referenceToForceArcToUseTheBean;

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(BeanWithBlocking.class))
.setExpectedException(DeploymentException.class);

@Test
public void runTest() {
fail("The expected DeploymentException was not thrown");
}

@ApplicationScoped
public static class BeanWithBlocking {
@Blocking
public String blockingMethod(String foo) {
return foo + "1";
}
}
}

0 comments on commit 729ace8

Please sign in to comment.