我的自定义 quarkus 扩展中的运行时错误
Runtime error in my custom quarkus extension
我正在写一个非常简单的 quarkus 扩展:我想定义一些关于错误管理的具体 类。例如:我想初始化一个 Jaxrs ExceptionMapper 来捕获一些自定义异常。
无论如何,我尝试做的是:
部署模块:
public class ErrorManagerProcessor {
private static final String EXCEPTION_MAPPER_FEATURE = "exception-mapper";
private static final Class<? extends ExceptionMapper<?>> EXCEPTION_MAPPER_CLASS =
RestExceptionMapper.class;
@BuildStep
FeatureBuildItem createFeatureItem() {
return new FeatureBuildItem(EXCEPTION_MAPPER_FEATURE);
}
@BuildStep
ResteasyJaxrsProviderBuildItem create() {
return new ResteasyJaxrsProviderBuildItem(EXCEPTION_MAPPER_CLASS.getName());
}
@BuildStep
void registerJaxRsProviders(final BuildProducer<ResteasyJaxrsProviderBuildItem> providers) {
providers.produce(create());
}
}
并且在我的运行时间模块中我定义了我的异常、我的映射器和一个基本的 POJO:
public class RestException extends RuntimeException{
public final ErrorMessage errorMessage;
public final Status status;
public RestException(String code, String message, Status status) {
this.errorMessage = new ErrorMessage(code, message);
this.status = status;
}
}
我的映射器
@Provider
public class RestExceptionMapper
implements ExceptionMapper<RestException> {
@Override
public Response toResponse(RestException e) {
return Response
.status(e.status)
.entity(e.errorMessage)
.build();
}
}
我的单元测试和集成测试没问题,但是当我 运行 一个处于开发模式的 quarkus 应用程序加载了我的扩展时,我收到一个奇怪的错误:
java.lang.ClassNotFoundException: io.quarkus.test.common.http.TestHTTPConfigSourceProvider
谁能帮我解决这个问题?
谢谢
如果有人遇到同样的问题,那是因为我的 deployment/pom.xml
:
中的范围定义不正确
之前:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
</dependency>
之后:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
<scope>test</scope>
</dependency>
我正在写一个非常简单的 quarkus 扩展:我想定义一些关于错误管理的具体 类。例如:我想初始化一个 Jaxrs ExceptionMapper 来捕获一些自定义异常。
无论如何,我尝试做的是:
部署模块:
public class ErrorManagerProcessor {
private static final String EXCEPTION_MAPPER_FEATURE = "exception-mapper";
private static final Class<? extends ExceptionMapper<?>> EXCEPTION_MAPPER_CLASS =
RestExceptionMapper.class;
@BuildStep
FeatureBuildItem createFeatureItem() {
return new FeatureBuildItem(EXCEPTION_MAPPER_FEATURE);
}
@BuildStep
ResteasyJaxrsProviderBuildItem create() {
return new ResteasyJaxrsProviderBuildItem(EXCEPTION_MAPPER_CLASS.getName());
}
@BuildStep
void registerJaxRsProviders(final BuildProducer<ResteasyJaxrsProviderBuildItem> providers) {
providers.produce(create());
}
}
并且在我的运行时间模块中我定义了我的异常、我的映射器和一个基本的 POJO:
public class RestException extends RuntimeException{
public final ErrorMessage errorMessage;
public final Status status;
public RestException(String code, String message, Status status) {
this.errorMessage = new ErrorMessage(code, message);
this.status = status;
}
}
我的映射器
@Provider
public class RestExceptionMapper
implements ExceptionMapper<RestException> {
@Override
public Response toResponse(RestException e) {
return Response
.status(e.status)
.entity(e.errorMessage)
.build();
}
}
我的单元测试和集成测试没问题,但是当我 运行 一个处于开发模式的 quarkus 应用程序加载了我的扩展时,我收到一个奇怪的错误:
java.lang.ClassNotFoundException: io.quarkus.test.common.http.TestHTTPConfigSourceProvider
谁能帮我解决这个问题?
谢谢
如果有人遇到同样的问题,那是因为我的 deployment/pom.xml
:
之前:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
</dependency>
之后:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
<scope>test</scope>
</dependency>