Azure函数无法使用给定输入找到方法签名

Sop*_*Men 5 java azure azure-blob-storage azure-functions

我创建了一个在创建或更新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);
}
Run Code Online (Sandbox Code Playgroud)

}

我总是得到错误

执行'Functions.blobtriggerfunction'(Reason ='检测到新blob:容器/ u-123/c-123/m-1-2-3-a50a-025592397574',Id = 6b9ae40c-f92b-46d4-8c1-41791167c355)不能使用给定的输入System.Private.CoreLib找到方法签名:执行函数时出现异常:Functions.blobtriggerfunction.System.Private.CoreLib:Result:Failure Exception:无法使用给定的输入堆栈找到方法签名:java.lang.NoSuchMethodException:无法使用com.microsoft.azure.functions.worker.broker中的给定输入找到方法签名. JavaMethodExecutor.lambda $在java.util.Optional.orElseThrow(Optional.java:290)的com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.execute执行$ 0(JavaMethodExecutor.java:49)(JavaMethodExecutor.java:49 )com.microsoft.azure.functions.worker.broker.JavaFunctionBroker.invokeMethod(JavaFunctionBroker.java:47)at com.microsoft.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:33)at com. micros.com.azure.functions.worker.handler.InvocationRequestHandler.execute(InvocationRequestHandler.java:10)位于com.microsoft.azure的com.microsoft.azure.functions.worker.handler.MessageHandler.handle(MessageHandler.java:45). functions.worker.JavaWorkerClient $ StreamingMessagePeer.lambda $ onNext $ 0(JavaWo rkerClient.java:91)java.util.concurrent.ForkJoinPool上的java.util.concurrent.ForkJoinTask $ AdaptedRunnableAction.exec(ForkJoinTask.java:1386)java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)java.util.concurrent.ForkJoinPool java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)中的$ WorkQueue.runTask(ForkJoinPool.java:1056)java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

我的方法签名有什么问题,我坚持这个.我非常感谢你的帮助.

Jer*_*Liu 3

CloudBlockBlobjava blob 触发器不支持数据类型。因此,除非您在函数中使用 azure storage sdk,否则您无法获取 blob url。

我们可以使用String, byte[], POJO 类进行 java blobtrigger 内容绑定。请参阅文档

例如

@BlobTrigger(name = "content", path = "container/{name}", dataType="Binary") byte[] content
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想使用 blob 名称,则应该在路径后附加/{name},否则您将得到相同的错误。

我建议您保持注释参数的值name与传入的 blob 名称相同(因为我已将它们都设置为content)。不一定要让函数发挥作用,而是为了更好地理解。