diff --git a/tracing/src/main/java/org/axonframework/extensions/tracing/TracingQueryGateway.java b/tracing/src/main/java/org/axonframework/extensions/tracing/TracingQueryGateway.java index 38f38f8..8b22da7 100644 --- a/tracing/src/main/java/org/axonframework/extensions/tracing/TracingQueryGateway.java +++ b/tracing/src/main/java/org/axonframework/extensions/tracing/TracingQueryGateway.java @@ -39,6 +39,7 @@ import java.util.stream.Stream; import static org.axonframework.common.BuilderUtils.assertNonNull; +import static org.axonframework.common.ObjectUtils.nullSafeTypeOf; import static org.axonframework.messaging.GenericMessage.asMessage; /** @@ -56,6 +57,21 @@ public class TracingQueryGateway implements QueryGateway { private final QueryGateway delegate; private final MessageTagBuilderService messageTagBuilderService; + /** + * Instantiate a {@link TracingQueryGateway} based on the fields contained in the {@link Builder}. + *
+ * Will assert that the {@link Tracer} and delegate {@link QueryGateway} are not {@code null}, and will throw an + * {@link AxonConfigurationException} if they are. + * + * @param builder the {@link Builder} used to instantiate a {@link TracingQueryGateway} instance + */ + protected TracingQueryGateway(Builder builder) { + builder.validate(); + this.tracer = builder.tracer; + this.delegate = builder.buildDelegateQueryGateway(); + this.messageTagBuilderService = builder.messageTagBuilderService; + } + /** * Instantiate a Builder to be able to create a {@link TracingQueryGateway}. *
@@ -72,26 +88,11 @@ public static Builder builder() { return new Builder(); } - /** - * Instantiate a {@link TracingQueryGateway} based on the fields contained in the {@link Builder}. - *
- * Will assert that the {@link Tracer} and delegate {@link QueryGateway} are not {@code null}, and will throw an
- * {@link AxonConfigurationException} if they are.
- *
- * @param builder the {@link Builder} used to instantiate a {@link TracingQueryGateway} instance
- */
- protected TracingQueryGateway(Builder builder) {
- builder.validate();
- this.tracer = builder.tracer;
- this.delegate = builder.buildDelegateQueryGateway();
- this.messageTagBuilderService = builder.messageTagBuilderService;
- }
-
@Override
public SubscriptionQueryResult subscriptionQuery(String queryNam
asMessage(query), queryName, initialResponseType, updateResponseType
);
return getWithSpan(
- "subscriptionQuery_" + SpanUtils.messageName(query.getClass(), queryName),
+ "subscriptionQuery_" + SpanUtils.messageName(nullSafeTypeOf(query), queryName),
queryMessage,
(childSpan) -> {
SubscriptionQueryResult subscriptionQueryResult = delegate.subscriptionQuery(
diff --git a/tracing/src/test/java/org/axonframework/extensions/tracing/TracingQueryGatewayTest.java b/tracing/src/test/java/org/axonframework/extensions/tracing/TracingQueryGatewayTest.java
index dbbbe40..76b6fb4 100644
--- a/tracing/src/test/java/org/axonframework/extensions/tracing/TracingQueryGatewayTest.java
+++ b/tracing/src/test/java/org/axonframework/extensions/tracing/TracingQueryGatewayTest.java
@@ -127,6 +127,14 @@ void testQuery_query() throws ExecutionException, InterruptedException {
assertNull(scopeManager.activeSpan(), "There should be no activeSpan");
}
+ @Test
+ void testQuery_nullQuery() {
+ //noinspection unchecked
+ when(mockQueryBus.query(any(QueryMessage.class)))
+ .thenReturn(CompletableFuture.completedFuture(answer1));
+ assertDoesNotThrow(() -> testSubject.query("query", null, String.class));
+ }
+
@Test
void testScatterGather() {
//noinspection unchecked
@@ -162,6 +170,15 @@ void testScatterGather() {
assertNull(scopeManager.activeSpan(), "There should be no activeSpan");
}
+ @Test
+ void testScatterGather_nullQuery() {
+ assertDoesNotThrow(() -> testSubject.scatterGather("query",
+ null,
+ ResponseTypes.instanceOf(String.class),
+ 1L,
+ TimeUnit.MILLISECONDS));
+ }
+
@Test
void testSubscriptionQuery() {
String initial = "initial";
@@ -237,6 +254,16 @@ void testSubscriptionQueryResults() {
assertNull(scopeManager.activeSpan(), "There should be no activeSpan");
}
+ @Test
+ void testSubscriptionQuery_nullQuery() {
+ when(mockQueryBus.subscriptionQuery(any(), anyInt()))
+ .thenReturn(createSubscriptionQueryResult("initial", "update"));
+ assertDoesNotThrow(() -> testSubject.subscriptionQuery("query",
+ null,
+ instanceOf(String.class),
+ instanceOf(String.class)));
+ }
+
private SubscriptionQueryResult createSubscriptionQueryResult(I initial, U... updates) {
return new DefaultSubscriptionQueryResult<>(
Mono.just(GenericQueryResponseMessage.asResponseMessage(initial)),