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

时间:2018-07-04 06:58:32

标签: java azure azure-functions azure-blob-storage

我创建了一个在创建或更新Blob存储时触发的函数。 我的Blob结构: container / 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'(原因='检测到新斑点:container / u-123 / c-123 / m-1-2-3-a50a-025592397574',ID = 6b9ae40c-f92b-46d4-8c1- 41791167c355)    无法使用给定的输入找到方法签名    System.Private.CoreLib:执行函数:Functions.blobtriggerfunction时发生异常。 System.Private.CoreLib:结果:失败    异常:无法使用给定的输入找到方法签名    堆栈:java.lang.NoSuchMethodException:无法找到具有给定输入的方法签名       在com.microsoft.azure.functions.worker.broker.JavaMethodExecutor.lambda $ execute $ 0(JavaMethodExecutor.java:49)       在java.util.Optional.orElseThrow(Optional.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)       在java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

我的方法签名有什么问题,我坚持下去。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

我们可以将Stringbyte[],POJO类用于Java blobtrigger内容绑定。参见Document

例如

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

请注意,如果要使用Blob名称,则应在路径后附加/{name},否则会出现相同的错误。

并且我建议您使注释参数name的值与传入的Blob名称相同(因为我将它们都设置为content)。不必使功能正常工作,而是为了更好地理解。