Ошибка при запуске примера Spring Cloud Functions для функций Azure

Я экспериментирую с облачными функциями Spring поверх функций Azure, и пока я пытался запустить образец проекта для функций Azure, я обнаружил следующую ошибку.

 Executed 'Functions.uppercase' (Failed, Id=4fd6ef4c-209c-45cb-bf65-ce38e90b6620)
 System.Private.CoreLib: Exception while executing function: Functions.uppercase. System.Private.CoreLib: Result: Failure
 Exception: ClassCastException: com.microsoft.azure.functions.worker.binding.RpcHttpRequestDataSource cannot be cast to java.lang.String
 Stack: java.lang.ClassCastException: com.microsoft.azure.functions.worker.binding.RpcHttpRequestDataSource cannot be cast to java.lang.String
   at com.microsoft.azure.functions.worker.binding.DataOperations.apply(DataOperations.java:91)
   at com.microsoft.azure.functions.worker.binding.DataSource.computeByType(DataSource.java:56)
   at com.microsoft.azure.functions.worker.binding.RpcHttpRequestDataSource.computeByType(RpcHttpRequestDataSource.java:20)
   at com.microsoft.azure.functions.worker.binding.DataSource.computeByName(DataSource.java:42)
   at com.microsoft.azure.functions.worker.binding.RpcHttpRequestDataSource.computeByName(RpcHttpRequestDataSource.java:20)
   at com.microsoft.azure.functions.worker.binding.BindingDataStore.getDataByName(BindingDataStore.java:50)
   at com.microsoft.azure.functions.worker.broker.ParameterResolver.resolve(ParameterResolver.java:59)
   at com.microsoft.azure.functions.worker.broker.ParameterResolver.resolve(ParameterResolver.java:42)
   at com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.execute(JavaMethodExecutor.java:52)
   at com.microsoft.azure.functions.worker.broker.JavaFunctionBroker.invokeMethod(JavaFunctionBroker.java:51)
   at com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:33)
   at com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:10)
   at com.microsoft.azure.functions.worker.handler.MessageHandler.handle(MessageHandler.java:45)
   at com.microsoft.azure.functions.worker.JavaWorkerClient$StreamingMessagePeer.lambda$onNext$0(JavaWorkerClient.java:92)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   at java.lang.Thread.run(Thread.java:748)
 .

Ссылка на образец проекта на github https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-samples/function-sample-azure

public class FooHandler extends AzureSpringBootRequestHandler<Foo, Bar> {
    @FunctionName("uppercase")
    public Bar execute(
            @HttpTrigger(name = "req", methods = { HttpMethod.GET,
                    HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) Foo foo,
            ExecutionContext context) {
        return handleRequest(foo, context);
    }  
}

Локальная среда выполнения Azure версии 2 (также не работает в Azure)

Azure Functions Core Tools (2.3.199 Commit hash: fdf734b09806be822e7d946fe17928b419d8a289)
Function Runtime Version: 2.0.12246.0

Поскольку в трассировке стека нет ничего, связанного со Spring Cloud, я полагаю, что это связано с Azure. Был бы признателен за любую помощь.


person Tharanga Hewavithana    schedule 04.01.2019    source источник
comment
В ошибке довольно четко указано, что com.microsoft.azure.functions.worker.binding.RpcHttpRequestDataSource cannot be cast to java.lang.String.   -  person rickvdbosch    schedule 04.01.2019


Ответы (2)


Взгляните на эту проблему на GitHub: вход байта [] поврежден .

Спасибо за сообщение. Это регресс. В качестве обходного пути используйте java.lang.Byte[] вместо byte[]

Похоже, что исправили:

pragnagopa закрыл это в # 241, 14 ноября 2018 г.

person rickvdbosch    schedule 04.01.2019
comment
Спасибо, rickvdbosch, но у меня есть ошибка github.com/Azure / azure-functions-java-worker / issues / 255. Я использую HttpTrigger. - person Tharanga Hewavithana; 04.01.2019
comment
pragnagopa также исправила проблему с HttpTrigger. github.com/Azure/azure-functions-java- работник / вопросы / - person Tharanga Hewavithana; 04.01.2019

Пример кода, приведенный по адресу https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-samples/function-sample-azure имеет некоторые проблемы.

Тип первого параметра должен быть HttpRequestMessage<Optional<Foo>>, а не Foo.

@FunctionName("uppercase")
    public Bar execute(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET,
            HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<Foo>> fooHttp,
        ExecutionContext context) {
        Foo foo = fooHttp.getBody().get();
        return handleRequest(foo, context);
    }

Также версию spring-cloud-function-dependencies пришлось изменить на 2.0.1.RELEASE.

mvn clean package azure-functions:run тогда правильно запускал код для меня.

person Dandy    schedule 12.08.2019