Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit测试中SpringCloud Azure适配器的NullPointerException_Java_Azure_Azure Functions_Spring Cloud_Spring Cloud Function - Fatal编程技术网

Java Junit测试中SpringCloud Azure适配器的NullPointerException

Java Junit测试中SpringCloud Azure适配器的NullPointerException,java,azure,azure-functions,spring-cloud,spring-cloud-function,Java,Azure,Azure Functions,Spring Cloud,Spring Cloud Function,我在使用SpringCloud对Azure函数测试服务进行junit测试时,收到了一个毫无帮助的NullPointerException。我在这方面完全是新手,所以如果这看起来很明显,我很抱歉 堆栈跟踪: java.lang.NullPointerException at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.doResolveName(AzureSpringBootRe

我在使用SpringCloud对Azure函数测试服务进行junit测试时,收到了一个毫无帮助的NullPointerException。我在这方面完全是新手,所以如果这看起来很明显,我很抱歉

堆栈跟踪:

java.lang.NullPointerException   
at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.doResolveName(AzureSpringBootRequestHandler.java:86) 
at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.initFunctionConsumerOrSupplierFromCatalog(AbstractSpringFunctionAdapterInitializer.java:387) 
at org.springframework.cloud.function.context.AbstractSpringFunctionAdapterInitializer.initialize(AbstractSpringFunctionAdapterInitializer.java:124) 
at org.springframework.cloud.function.adapter.azure.AzureSpringBootRequestHandler.handleRequest(AzureSpringBootRequestHandler.java:58) 
at test.TestCloud.start(TestCloud.java:42)
我认为NPE可能是由于我将null传递给HandlerRequest的第二个参数引起的,但这就是我所看到的示例所做的。我试过使用注释行或下面的行,使用我制作的具体扩展或通用版本。两者的行为相同,并且控件永远不会到达execute方法。这个例子使用了泛型类,但具体的实现对我来说似乎更有意义(否则我看不出连接是如何建立的)

@测试
public void start()引发异常{
//AzureSpringBootRequestHandler=新的AzureSpringBootRequestHandler(CloudFunctionApplication.class);
AzureReverseAdapter处理程序=新的AzureReverseAdapter(CloudFunctionApplication.class);
字符串结果=handler.handleRequest(“Hello World”,null);
handler.close();
Assert.assertEquals(结果,“dlroW olleH”);
}
测试类现在只有一个函数,如下所示

@FunctionName("reverseString")
public String execute(@HttpTrigger(name = "request", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request, ExecutionContext context) {

    context.getLogger().info("Input: " + request.getBody().get());
    return handleRequest(request.getBody().get(), context);
}
@FunctionName(“反向限制”)
公共字符串execute(@HttpTrigger(name=“request”,methods={HttpMethod.GET,HttpMethod.POST},authLevel=AuthorizationLevel.ANONYMOUS)HttpRequestMessage请求,ExecutionContext上下文){
context.getLogger().info(“输入:+request.getBody().get());
返回handleRequest(request.getBody().get(),context);
}
CloudFunctionApplication类有一个如下所示的方法。奇怪的是,我不知道是怎么做到的,但控制确实实现了这个功能。我以为execute方法应该充当重定向,但它似乎找到了reservesting。我猜是因为它是唯一的@FunctionName

这就是方法。返回(value)->{line上的断点会被断点击中,但是异常会在调用内部函数之前发生

@Bean
public Function<String, String> reverseString() {
    return (value) -> {
        return new StringBuilder(value).reverse().toString();
    };
}
@Bean
公共职能反向限制(){
返回(值)->{
返回新的StringBuilder(值).reverse().toString();
};
}
更新:链接问题绝对不是此问题的重复。是的,所有NullPointerException都是因为您尝试取消引用时某个内容为null。该链接是对该内容的一般处理。这是一个关于我为什么从第三方库获取该内容的特定问题。因此它们绝对不同

但是,我发现了评论中建议的问题。我将null作为第二个参数传入。这似乎是允许的,因为我正在处理的示例也这样做。我的解决方案是模拟制作一个返回基本值的ExecutionContext对象。不幸的是,我无法将其记录为答案,因为有人认为我只是在问什么是NullPointerException,并将这个问题标记为dupe


因此,对于其他遇到相同问题的人,这就是我的答案。

在您基于HelloFunctionTest类的示例中,第一个语句在括号之间没有类型声明:

AzureSpringBootRequestHandler<User, Greeting> handler = new AzureSpringBootRequestHandler<>(HelloFunction.class);
AzureSpringBootRequestHandler=新的AzureSpringBootRequestHandler(HelloFunction.class);
然而,您的等价物(据我所知,AzureSpringBootRequestHandler)有,也有(见下文)。我将亲自从这里开始,但没有代码链接,很难确定

AzureSpringBootRequestHandler<String, String> handler = new AzureSpringBootRequestHandler<String, String>(CloudFunctionApplication.class);
AzureSpringBootRequestHandler=新的AzureSpringBootRequestHandler(CloudFunctionApplication.class);

在理解示例之前,很难按照给定的基本示例来回答您的问题,因为您已经偏离了自己的方向。我建议您按照示例进行操作,以便真正理解它,然后继续自己的实现,否则您将陷入混乱和非常困惑的境地!

java.lang.NullPointerException发生的原因是该对象未实例化,但已被使用

实例化是将实例的地址分配给对象,由于获取对象的实例不存在,所以返回的地址为空,经常会导致
NullPointerException
,直接引用这个不存在的实例地址而不判断错误情况会引发此异常

问题的输出异常告诉您该实例未成功创建。您创建AzureSpringBootRequestHandler的实例失败,因此您得到了NullPointerException。配置可能有问题

这不应该是由您传入的null值引起的。正式文件也是以null值传入的。引发的异常表明您甚至还没有成功创建实例。您尝试扩展AzureSpringBootRequestHandler,但出现了NullPointException,问题应该是您的AzureSpringBootRequestHandler版本没有没有Azure功能所需的重要内容

这两个文档可能会给您一些帮助:


(单击左上角的“分支”并选择版本)

您正在调用
handler.handleRequest()
使用第二个参数
null
–你认为这有关系吗?@kaan-我有,但我正在使用的示例也有关系。我正在使用的示例:我构建了自己的ExecutionContext,它返回基本值,看起来很满意。请提供您现在使用的测试类。TestCloud.java。
AzureSpringBootRequestHandler<String, String> handler = new AzureSpringBootRequestHandler<String, String>(CloudFunctionApplication.class);