У меня есть простое приложение Spring Boot Function с двумя конечными точками. Оба выдают Exception: IllegalStateException: No function defined error
со следующей трассировкой стека:
[23/03/2020 14:16:57] 2020-03-23 11:16:57.455 WARN 4788 --- [pool-2-thread-5] c.f.c.c.BeanFactoryAwareFunctionRegistry : !!! Failed to discover function 'UserPublish' in function catalog. Function available in catalog are: [userGet, userPublish, functionRouter]
[23/03/2020 14:16:57] at com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:10)
[23/03/2020 14:16:57] at com.microsoft.azure.functions.worker.handler.MessageHandler.handle(MessageHandler.java:45)
[23/03/2020 14:16:57] at com.microsoft.azure.functions.worker.JavaWorkerClient$StreamingMessagePeer.lambda$onNext$0(JavaWorkerClient.java:92)
[23/03/2020 14:16:57] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[23/03/2020 14:16:57] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[23/03/2020 14:16:57] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[23/03/2020 14:16:57] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[23/03/2020 14:16:57] at java.lang.Thread.run(Thread.java:748)
[23/03/2020 14:16:57] Caused by: java.lang.IllegalStateException: No function defined
[23/03/2020 14:16:57] at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.apply(AbstractSpringFunctionAdapterInitializer.java:184)
[23/03/2020 14:16:57] at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.handleRequest(AzureSpringBootRequestHandler.java:83)
[23/03/2020 14:16:57] at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.handleRequest(AzureSpringBootRequestHandler.java:79)
[23/03/2020 14:16:57] at com.mrlima.app.handler.azure.UserHandler.publish(UserHandler.java:42)
Как видите, единственная разница между тем, что он пытается обнаружить, и тем, что находится в каталоге, - это случай первой буквы. Не уверен, что это действительно причина root, но мне интересно, почему это происходит, поскольку я определил свой обработчик следующим образом:
public class UserHandler extends AzureSpringBootRequestHandler<User, User> {
@FunctionName("UserGet")
public User get(@HttpTrigger(name = "request", methods = { HttpMethod.GET,
HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS, route = "users") HttpRequestMessage<Optional<User>> request,
ExecutionContext context) {
// implementation
return handleRequest(user, context);
}
@FunctionName("UserPublish")
public User publish(@HttpTrigger(name = "request", methods = {
HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS, route = "users/pub") HttpRequestMessage<User> request,
ExecutionContext context) {
context.getLogger().info(String.format("Request to publish user with data %s", request.getBody()));
return handleRequest(request.getBody(), context);
}
И мои действительные функции
public class UserGet implements Function<User, User> {
@Override
public User apply(User user) {
return new User(String.format("Hello %s", user.getName()));
}
}
public class UserPublish implements Function<User, User> {
@Override
public User apply(User user) {
return new User(String.format("Published user record %s", user.getName()));
}
}
Чтобы сделать вещи немного более странными, это работало, когда у меня была только функция UserGet
. После того, как я добавил UserPublish
, он начал показывать эту ошибку ...
Я получил этот проект в этом репо .
Любое понимание здесь очень ценится.