Функция Azure Не удается найти сигнатуру метода с заданным вводом - PullRequest
0 голосов
/ 04 июля 2018

Я создаю функцию, которая запускается при создании или обновлении хранилища BLOB-объектов. Моя структура BLOB-объектов: контейнер / a-123 / b-123 / c-1-2-3

, в то время как 123 является динамическим значением

А вот и моя функция

public class BlobTriggerFunction {
/**
 * This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
 */
@FunctionName("blobtriggerfunction")
@StorageAccount("connection")
public static void run(
        @BlobTrigger(name = "container", path = "container") CloudBlockBlob cloudBlockBlob,
        @BindingName("name") String name,
        final ExecutionContext context
) {
    context.getLogger().info(cloudBlockBlob.getUri().toString());
    context.getLogger().info(name);
}

}

И я всегда получаю ошибку

Выполнение 'Functions.blobtriggerfunction' (Причина = 'Обнаружен новый BLOB-объект: контейнер / u-123 / c-123 / m-1-2-3-a50a-025592397574', Id = 6b9ae40c-f92b-46d4-8c1- 41791167c355) Не удается найти сигнатуру метода с заданным вводом System.Private.CoreLib: исключение при выполнении функции: функция Functions.blobtrigger. System.Private.CoreLib: Результат: ошибка Исключение: не удается найти сигнатуру метода с заданным вводом Стек: java.lang.NoSuchMethodException: не удается найти сигнатуру метода с заданным вводом на com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.lambda $ execute $ 0 (JavaMethodExecutor.java:49) в java.util.Optional.orElseThrow (Необязательно.java:290) на com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.execute (JavaMethodExecutor.java:49) в com.microsoft.azure.functions.worker.broker.JavaFunctionBroker.invokeMethod (JavaFunctionBroker.java:47) на com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute (InvocationRequestHandler.java:33) на com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute (InvocationRequestHandler.java:10) на com.microsoft.azure.functions.worker.handler.MessageHandler.handle (MessageHandler.java:45) в com.microsoft.azure.functions.worker.JavaWorkerClient $ StreamingMessagePeer.lambda $ onNext $ 0 (JavaWorkerClient.java:91) в java.util.concurrent.ForkJoinTask $ AdaptedRunnableAction.exec (ForkJoinTask.java:1386) в java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:289) в java.util.concurrent.ForkJoinPool $ WorkQueue.runTask (ForkJoinPool.java:1056) в java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.java:1692) at java.util.concurrent.ForkJoinWorkerThread.run (ForkJoinWorkerThread.java:157)

Что не так с моей подписью метода, я застрял на этом. Я очень признателен за вашу помощь.

1 Ответ

0 голосов
/ 04 июля 2018

Тип данных CloudBlockBlob не поддерживается в триггере java blob. По этой причине вы не можете получить URL-адрес BLOB-объекта, если не используете Azure Storage SDK внутри своей функции.

Мы можем использовать String, byte[], класс POJO для привязки содержимого java blobtrigger. См. Документ .

Например

@BlobTrigger(name = "content", path = "container/{name}", dataType="Binary") byte[] content

Обратите внимание, что если вы хотите использовать имя BLOB-объекта, вы должны добавить путь с /{name}, иначе вы получите ту же ошибку.

И я рекомендую вам сохранить значение параметра аннотации name идентичным имени входящего большого двоичного объекта (так как я установил для них обоих значение content). Нет необходимости заставлять функцию работать, но для лучшего понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...