Skip to content

Commit

Permalink
Handle void return type from Function clients (#6771)
Browse files Browse the repository at this point in the history
  • Loading branch information
timyates authored and yawkat committed Jan 21, 2022
1 parent 699c5d9 commit 944db35
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
Expand Up @@ -88,6 +88,9 @@ public O invoke(FunctionDefinition definition, I input, Argument<O> outputType)
return ConversionService.SHARED.convert(publisher, outputType).orElseThrow(() ->
new FunctionExecutionException("Unsupported Reactive type: " + outputJavaType)
);
} else if (outputType.isVoid()) {
httpClient.toBlocking().exchange(request);
return null;
} else {
return (O) httpClient.toBlocking().retrieve(request, outputType);
}
Expand Down
@@ -0,0 +1,47 @@
package io.micronaut.function.web

import io.micronaut.context.ApplicationContext
import io.micronaut.context.annotation.Requires
import io.micronaut.context.env.Environment
import io.micronaut.function.FunctionBean
import io.micronaut.function.client.FunctionClient
import io.micronaut.runtime.server.EmbeddedServer
import jakarta.inject.Named
import spock.lang.Issue
import spock.lang.Specification

import java.util.function.Consumer

class NullReturningConsumerFunctionSpec extends Specification {

@Issue("https://github.com/micronaut-projects/micronaut-core/issues/2024")
def "test a client with a void return type"() {
given:
def embeddedServer = ApplicationContext.run(EmbeddedServer)
def client = embeddedServer.applicationContext.getBean(MicronautFunctionProblemsClient)

when:
client.sendVoid("woo")

then:
PojoConsumer.LAST_VALUE == "woo"
}

@FunctionClient
static interface MicronautFunctionProblemsClient {

@Named("consumer/void")
void sendVoid(String message)
}

@FunctionBean("consumer/void")
static class PojoConsumer implements Consumer<String> {

static String LAST_VALUE

@Override
void accept(String book) {
LAST_VALUE = book
}
}
}

0 comments on commit 944db35

Please sign in to comment.