Не клиентский интерфейс REST: интерфейс MyClient. Аннотации @Path не найдены в классе или каких-либо методах .... [Quarkus]

У меня есть проект, который использует API, и я изо всех сил пытаюсь внедрить Rest Client в свой сервис. (отметим, что я в основном делаю то, что делал в другом экземпляре, который работает, однако я не могу точно определить, что здесь не так, чтобы сделать этот неудачным)

Мой клиентский интерфейс:


@org.eclipse.microprofile.rest.client.inject.RegisterRestClient(
  configKey = "my.feature-service.baseUrl"
)
@org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders(MyCustomHeadersFactory.class)
@javax.ws.rs.Consumes({"application/vnd.cust.my-service-config+json;version=1.0;charset=UTF-8"})
@javax.ws.rs.Produces({"application/vnd.cust.my-service-config+json;version=1.0;charset=UTF-8"})
public interface FeatureServiceClient {
  @javax.ws.rs.GET
  @javax.ws.rs.Path("/v1/my/feature")
  Uni<List<MyDto>> getPossibleFeatures();
  //and several other methods
}

на моей потребительской стороне у меня есть:


@javax.enterprise.context.ApplicationScoped
public class MyService {

  @org.eclipse.microprofile.rest.client.inject.RestClient
  FeatureServiceClient serviceClient;

}

однако, когда он пытается инициализироваться, я получаю:


Caused by: java.lang.IllegalArgumentException: Not a REST client interface: interface my.feature.FeatureServiceClient. No @Path annotation found on the class or any methods of the interface and no HTTP method annotations (@POST, @PUT, @GET, @HEAD, @DELETE, etc) found on any of the methods
    at org.jboss.resteasy.reactive.client.impl.ClientProxies.get(ClientProxies.java:26)
    at org.jboss.resteasy.reactive.client.impl.WebTargetImpl.proxy(WebTargetImpl.java:382)
    at io.quarkus.rest.client.reactive.runtime.RestClientBuilderImpl.build(RestClientBuilderImpl.java:273)
    at io.quarkus.rest.client.reactive.runtime.RestClientCDIDelegateBuilder.build(RestClientCDIDelegateBuilder.java:76)
    at io.quarkus.rest.client.reactive.runtime.RestClientCDIDelegateBuilder.createDelegate(RestClientCDIDelegateBuilder.java:57)
    at io.quarkus.rest.client.reactive.runtime.RestClientReactiveCDIWrapperBase.<init>(RestClientReactiveCDIWrapperBase.java:16)
    at my.feature.MyFeatureClient$$CDIWrapper.<init>(FeatureServiceClient$$CDIWrapper.zig:21)
    at my.feature.MyFeatureClient$$CDIWrapper_ClientProxy.<init>(MyFeatureClient$$CDIWrapper_ClientProxy.zig:28)
    at my.feature.MyFeatureClient$$CDIWrapper_Bean.proxy(FeatureServiceClient$$CDIWrapper_Bean.zig:40)
    at my.feature.MyFeatureClient$$CDIWrapper_Bean.get(FeatureServiceClient$$CDIWrapper_Bean.zig:243)
    at my.feature.MyFeatureClient$$CDIWrapper_Bean.get(FeatureServiceClient$$CDIWrapper_Bean.zig:259)
    at my.consumer.Myservice_Bean.create(MyService_Bean.zig:175)
    ... 67 more
    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
    <quarkus.platform.version>2.3.0.CR1</quarkus.platform.version>

Возможно ли, что импорт, объявленный в интерфейсе Rest Client, неверен? Вы можете показать их?

Felipe Windmoller 23.04.2022 01:38

На потребителе не стоит ставить @Inject @RestClient FeatureServiceClient serviceClient;. Я считаю, что вам также необходимо объявить область вашего клиентского интерфейса Rest, например, объявить quarkus.rest-client.my.feature-service.baseUrl.scope=javax.i‌​nject.Singleton в вашем application.properties.

Felipe Windmoller 23.04.2022 01:46

Я добавил пакеты для аннотаций в вопрос. Что касается необходимости области, у меня есть еще один пример, работающий без области. Если я объявлю область в клиентском интерфейсе, она также будет зарегистрирована как доступный путь в swagger, поэтому я предполагаю, что вместо этого она пытается зарегистрировать ее как контроллер. (в другом примере, который у меня работает, у меня есть RestClient на стороне потребителя, RegisterRestClient на интерфейсе, как указано выше, и он работает)

mangusbrother 23.04.2022 11:57

Я никогда не тестировал внедрение Rest Client Interface в вашем потребителе без @Inject, в руководстве Quarkus говорится, что нужно объявить как @Inject @RestClient FeatureServiceClient serviceClient; Я не знаю, имеет ли это какое-то значение.

Felipe Windmoller 23.04.2022 15:20
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
4
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, решение найдено.

Я добавил следующие плагины сборки в модуль, содержащий мой клиентский интерфейс.


  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${compiler-plugin.version}</version>
        <configuration>
          <parameters>${maven.compiler.parameters}</parameters>
          <annotationProcessorPaths>
            <path>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>${org.projectlombok.version}</version>
            </path>
          </annotationProcessorPaths>
          <!-- the parameters=true option is critical so that RESTEasy works fine -->
          <parameters>true</parameters>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.jboss.jandex</groupId>
        <artifactId>jandex-maven-plugin</artifactId>
        <version>1.1.0</version>
        <executions>
          <execution>
            <id>make-index</id>
            <goals>
              <goal>jandex</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

не совсем уверен, какая из них действительно привела к устранению ошибки, и я бы не ожидал такой ошибки для любого из отсутствующих.

Другие вопросы по теме