【问题标题】:REST Client Sub-resources return AbstractMethodError when invokedREST 客户端子资源在调用时返回 AbstractMethodError
【发布时间】:2021-10-02 21:20:05
【问题描述】:

编辑:问题是quarkus-rest-client-reactive,请参阅我的回答。

根据我对 Quarkus 中可用的 MicroProfile REST 客户端的理解,我应该能够在我的 REST 客户端界面中定义子资源,这将允许我像这样将资源嵌套在彼此之下。

package org.acme.example

import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@RegisterRestClient
@Path("/api/foo")
public interface FoosService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    Uni<List<Foo>> getAll();

    @Path("/{id}")
    FooService foo(@PathParam("id") String id);
}

public interface FooService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    Uni<Foo> toRepresentation();
}

但是,当我在代码中注入和调用客户端接口时,它会在 client.foo("bar").toRepresentation() 调用上引发 AbstractMethodError

@Path("/bar")
public class BarResource {
    @RestClient
    FoosResource client;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Foo getBar() {
        return client.foo("bar").toRepresentation();
    }
}

我对此的所有研究似乎都表明这是可能的,但 Quarkus 没有显示客户端子资源的具体示例。

【问题讨论】:

  • @LucaBassoRicci Keycloak Admin API Client 是使用包含子资源的客户端代理框架的 RESTEasy 客户端的一个很好的示例(该客户端中的 RESTEasy 版本是 3.13.2,而最新的 Quarkus 版本使用4.6.1,但没有任何 RESTEasy 更改日志提及相关行为的任何更改。)
  • 我假设你有复制粘贴错误,但两个接口都命名为 FooService
  • 你弄明白了吗?

标签: java resteasy quarkus quarkus-rest-client


【解决方案1】:

我在原始帖子中没有提到的一点是,我正在为 REST 客户端使用 Reactive 扩展,这似乎是导致问题的原因。

使用同步扩展允许代理正确构建子资源代理。可能需要为响应式版本设置更多配置才能使用子资源。

【讨论】:

    【解决方案2】:

    子资源通常与 Quarkus Rest Client Reactive 一起使用。 您可以查看我们在 Quarkus 代码库中的测试作为示例(一个问题是它很可能使用了比您需要的更多的功能):https://github.com/quarkusio/quarkus/blob/2.1.0.Final/extensions/resteasy-reactive/rest-client-reactive/deployment/src/test/java/io/quarkus/rest/client/reactive/subresource/SubResourceTest.java#L28

    我看不出您的代码示例有什么特别的问题。如果您可以在 https://github.com/quarkusio/quarkus/issues 中创建一个 GitHub 问题,并使用最少的问题复制者,那么无论是修复它还是帮助您,都会​​对我有很大帮助。

    【讨论】:

    • 在此处获得了与子子资源相同的问题的复制者:github.com/lordvlad/quarkus/compare/…;我还尝试用@Path("/")@RegisterRestClient 注释SubClient,这两者都没有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多