Исключение NullPointerException с адаптером SpringCloud Azure в тесте Junit - PullRequest
0 голосов
/ 23 сентября 2019

Я получаю довольно бесполезное исключение 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, и помечал вопрос как обман.

Так что для всех, кто столкнулся с той же проблемой, это был мой ответ.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

java.lang.NullPointerException происходит потому, что объект не был создан, но использовался.

Создание экземпляра - это назначение адреса экземпляра объекту, а NullPointerException часто вызывается, потому что экземпляр объектаполученный объект не существует, поэтому возвращаемый адрес является нулевым.Прямая ссылка на этот несуществующий адрес экземпляра без определения условия ошибки вызовет это исключение.

Выходное исключение вашего вопроса говорит о том, что экземпляр не был успешно создан.Не удалось создать экземпляр AzureSpringBootRequestHandler, поэтому вы получили исключение NullPointerException.Может что-то не так с Конфигурацией.

Это не должно быть вызвано тем, что вы передаете нулевое значение. Официальный файл также был передан в виде нуля.Возникшее исключение указывает, что вы даже не успешно создали экземпляр.Вы пытаетесь расширить AzureSpringBootRequestHandler, и возникает NullPointException, проблема должна заключаться в том, что ваша версия AzureSpringBootRequestHandler не содержит важных вещей, которые необходимы для функции Azure.

Эти два документа могут вам помочь:

Функция Spring Cloud в Azure

версии AzureSpringBootRequestHandler.java (нажмите на «ветку» в верхнем левом углу и выберите версию)

0 голосов
/ 23 сентября 2019

В примере, который вы основываете на классе HelloFunctionTest, первый оператор без объявления типа в скобках <>:

AzureSpringBootRequestHandler<User, Greeting> handler = new AzureSpringBootRequestHandler<>(HelloFunction.class);

Тем не менее, ваш эквивалент (AzureSpringBootRequestHandler, насколько я могу)сказать) делает, и имеет (см. ниже).Я бы начал здесь лично, но без ссылки на код, чтобы осмотреться, сложно сказать наверняка.

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

Довольно сложно проследить ваш вопрос в сравнении с данным базовым примером, поскольку вы ушлина свой собственный касательный, прежде чем понять пример.Я бы порекомендовал следовать примеру, чтобы вы действительно поняли его, а затем переходите к собственной реализации, в противном случае вы запутаетесь и очень запутаетесь!

...