RMorrisey
RMorrisey

Reputation: 7739

Micronaut declarative REST client throws an error - @Introduction method interceptor missing

When I autowire the client interface for my Micronaut declarative client, I get this error:

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)

What's the proper way to fix it?

Details

I have an established Grails application that I recently upgraded from 3.x to 4.0.1.

This app has a service which does several REST calls in parallel, and I am trying to add a new REST call that uses the new Micronaut HTTP declarative client.

I added the client library to dependencies in build.gradle:

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

My client interface looks like this (in 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> {
}

I configured the URL in application.yml:

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

The message about @Introduction makes me think that Micronaut is not doing the process of compiling the declarative client. Is there some

What else am I missing?

Update:

I tried changing the build.gradle dependency to implementation as shown in the Micronaut docs, insteadl of compile, as shown in the Grails docs. No dice.

Update 2:

I found that the constructor for HttpClientIntroductionAdvice is never invoked during startup. I don't know why it's not being included in my project. IntelliJ shows micronaut-http-client:1.1.4 in external libraries, and it's set to compile scope.

Upvotes: 1

Views: 2732

Answers (1)

RMorrisey
RMorrisey

Reputation: 7739

A gradlew clean seems to have fixed the issue.

I tried to work backwards and duplicate the problem for posterity's sake, but so far I have not been able to.

Upvotes: 4

Related Questions