Декларативный клиент REST Micronaut выдает ошибку - отсутствует перехватчик метода @Introduction - PullRequest
0 голосов
/ 11 марта 2020

Когда я автоматически соединяю интерфейс клиента для моего декларативного клиента Micronaut, я получаю эту ошибку:

Caused by: java.lang.IllegalStateException: At least one @Introduction method interceptor required, but missing. Check if your @Introduction stereotype annotation is marked with @Retention(RUNTIME) and @Type(..) with the interceptor type. Otherwise do not load @Introduction beans if their interceptor definitions are missing!
    at io.micronaut.aop.chain.InterceptorChain.resolveIntroductionInterceptors(InterceptorChain.java:194)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1494)

Какой правильный способ исправить это?

Подробности

У меня установлено приложение Grails, которое я недавно обновил с 3.x до 4.0.1.

В этом приложении есть служба, которая выполняет несколько вызовов REST параллельно, и я пытаюсь добавить новый вызов REST, использующий новый декларативный клиент Micronaut HTTP.

Я добавил клиентскую библиотеку в dependencies в build.gradle:

    compile "io.micronaut:micronaut-http-client"

Мой клиентский интерфейс выглядит следующим образом (в src/main/groovy):

package com.mycompany.xyz.rest

import com.mycompany.xyz.rest.myendpoint.Results
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Header
import io.micronaut.http.client.annotation.Client

@Client('xyzRest')
@Header(name = 'myauthkey', value = '${myAuthKey}')
interface XyzRestClient {
    @Get('/myendpoint')
    Results myendpoint(String param1, String param2)
}
package com.mycompany.xyz.rest.myendpoint

import com.mycompany.xyz.rest.myendpoint.DataItem
import groovy.transform.CompileStatic

@CompileStatic
interface Results extends List<DataItem> {
}

Я настроил URL в application.yml:

environments:
    development:
        micronaut:
            http:
                services:
                    xyzRest:
                        urls:
                            - http://xyz.mycompany.com/rest/v1

Сообщение о @Introduction заставляет меня думать, что Micronaut не выполняет Процесс составления декларативного клиента. Есть ли

Что еще мне не хватает?

Обновление:

Я попытался изменить зависимость build.gradle на implementation, как показано на документы Micronaut вместо compile, как показано в документах Grails. Без кубиков.

Обновление 2:

Я обнаружил, что конструктор для HttpClientIntroductionAdvice никогда не вызывается при запуске. Я не знаю, почему это не включено в мой проект. IntelliJ показывает micronaut-http-client:1.1.4 во внешних библиотеках и имеет значение compile scope.

1 Ответ

1 голос
/ 12 марта 2020

A gradlew clean, похоже, исправил проблему.

Я пытался работать задом наперед и дублировать проблему ради потомков, но пока не смог.

...