UnsatisfiedResolutionException - 来自 Quarkus 扩展的 CDI bean

问题描述

我正在开发 Quarkus 扩展。但是我在注入 CDI Beans 时遇到了一些问题。

在运行时模块中我有这个类:

@ApplicationScoped
public class CustomrestClientBuilder{

    //@Produces - Removed
    //@ApplicationScoped - Removed
    public RestClientBuilder newBuilder(String url) throws MalformedURLException {
         return RestClientBuilder.newBuilder().baseUrl(new URL(url));               
    }
}

在部署模块中,我有这个类:

class RestClientExtensionProcessor {

    private static final String FEATURE = "rest-client-extension";

    @BuildStep
    FeatureBuildItem feature() {
        return new FeatureBuildItem(FEATURE);
    }
    
    @BuildStep
    public AdditionalBeanBuildItem producer() {
        return new AdditionalBeanBuildItem(CustomrestClientBuilder.class);
    }

}

问题出现在测试类中。我将测试放在部署模块中,但它失败了(但是,在运行时模块中它可以工作)。

public class CustomrestClientBuilderTest {

      @Inject
      private CustomrestClientBuilder customrest;
      
      @RegisterExtension
      static final QuarkusUnitTest config = new QuarkusUnittest()
        .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)); 
    
      @Test
      public void testGreeting() {
            IDummyRestClient restClient = customrest.newBuilder("url")
                .build(IDummyRestClient.class);
      }
}

错误是:

Build Failed due to errors
[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: 
javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: 
Unsatisfied dependency for type CustomrestClientBuilder and qualifiers [@Default]

我之前看过这篇文章

Exposing CDI beans from Quarkus extensions

更新

这种方式有效(添加我需要测试的类)。 有意义吗?

@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnittest()
   .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
   .addClasses(CustomrestClientBuilder.class,IDummyRestClient.class));

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)