Я получаю довольно бесполезное исключение NullPointerException из своего теста junit моей службы тестирования функций Azure с SpringCloud.Я новичок в этом, поэтому я прошу прощения, если это кажется очевидным.
Трассировка стека:
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 был вызван тем, что я передал ноль во 2-йпараметр handleRequest, но это то, что делал пример, который я рассмотрел.Я пробовал как с закомментированной строкой, так и с строкой под ней, используя конкретное расширение, которое я сделал, или общую версию.Оба вели себя одинаково, и управление никогда не попадает в метод execute.В примере используется универсальный класс, но мне кажется, что конкретная реализация имеет больше смысла (в противном случае я не вижу, как устанавливается соединение).
@Test
public void start() throws Exception {
// AzureSpringBootRequestHandler<String, String> handler = new AzureSpringBootRequestHandler<String, String>(CloudFunctionApplication.class);
AzureReverseAdapter handler = new AzureReverseAdapter(CloudFunctionApplication.class);
String result = handler.handleRequest("Hello World", null);
handler.close();
Assert.assertEquals(result, "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);
}
В классе CloudFunctionApplication есть метод, который выглядит следующим образом.Как ни странно, и я не знаю как, но управление ДОЛЖНО достигать этой функции.Я думал, что метод execute должен был действовать как перенаправление, но в любом случае, похоже, обнаружил ReserveString.Я думаю, потому что это единственное @FunctionName?
Это метод.Точка останова в строке return (value) -> {попадает в точку останова, но затем происходит исключение до вызова внутренних.
@Bean
public Function<String, String> reverseString() {
return (value) -> {
return new StringBuilder(value).reverse().toString();
};
}
ОБНОВЛЕНИЕ: связанный вопрос абсолютно НЕ является дубликатом этого вопроса.Да, все исключения NullPointerException связаны с тем, что что-то было нулевым, когда вы пытались разыменовать его.Эта ссылка была общим подходом к этому.Это был конкретный вопрос о том, почему я получал это из сторонней библиотеки.Так что они абсолютно НЕ одинаковы.
Однако я обнаружил проблему, как предложено в комментариях.Это было то, что я передавал нуль в качестве второго параметра.Это казалось разрешенным из-за примера, над которым я работал, который сделал то же самое.Моим решением было создать поддельный объект ExecutionContext, который возвращал базовые значения.К сожалению, я не могу записать это как ответ, потому что кто-то думает, что я просто спрашивал, что такое NullPointerException, и помечал вопрос как обман.
Так что для всех, кто столкнулся с той же проблемой, это был мой ответ.