Quarkus 休眠验证器:HV000183:无法在本机模式下初始化“jakarta.el.ExpressionFactory”

问题描述 投票:0回答:1

我有一个生成一些 GraphQL api 的应用程序。出于输入数据验证的目的,我尝试使用此库https://github.com/graphql-java/graphql-java-extended-validation,它依赖于 hibernate-validor 进行消息插值器。

以下是我的 Maven 配置:

...
<quarkus.platform.version>3.1.0.Final</quarkus.platform.version>
<graphql.java.extended.scalars.version>20.2</graphql.java.extended.scalars.version>
<graphql.java.extended.validation.version>20.0</graphql.java.extended.validation.version>
...

<dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java-extended-validation</artifactId>
            <version>${graphql.java.extended.validation.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate.validator</groupId>
                    <artifactId>hibernate-validator</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.glassfish</groupId>
                    <artifactId>jakarta.el</artifactId>
                </exclusion>
            </exclusions>
</dependency>
<dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

在 jvm 模式下一切正常,但在本机模式下,我收到此错误:

2023-07-05 14:58:37,909 WARN  [graphql.execution.SimpleDataFetcherExceptionHandler]: HV000183: Unable to initialize 'jakarta.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead: jakarta.validation.ValidationException: HV000183: Unable to initialize 'jakarta.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:218)
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:84)
        at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:49)
        at graphql.validation.interpolation.ResourceBundleMessageInterpolator.hibernateInterpolator(ResourceBundleMessageInterpolator.java:169)
        at graphql.validation.interpolation.ResourceBundleMessageInterpolator.interpolateMessageImpl(ResourceBundleMessageInterpolator.java:116)
        at graphql.validation.interpolation.ResourceBundleMessageInterpolator.interpolate(ResourceBundleMessageInterpolator.java:95)
        at graphql.validation.constraints.AbstractDirectiveConstraint.mkError(AbstractDirectiveConstraint.java:314)
        at graphql.validation.constraints.standard.RangeConstraint.runConstraint(RangeConstraint.java:58)
        at graphql.validation.constraints.GraphQLListElementValidator.runConstraintOnListElements(GraphQLListElementValidator.java:39)
        at graphql.validation.constraints.AbstractDirectiveConstraint.runConstrainOnPossibleListElements(AbstractDirectiveConstraint.java:167)
        at graphql.validation.constraints.AbstractDirectiveConstraint.runConstraintOnDirectives(AbstractDirectiveConstraint.java:157)
        at graphql.validation.constraints.AbstractDirectiveConstraint.runValidationImpl(AbstractDirectiveConstraint.java:138)
        at graphql.validation.constraints.AbstractDirectiveConstraint.runValidation(AbstractDirectiveConstraint.java:134)
        at graphql.validation.rules.TargetedValidationRules.runValidationImpl(TargetedValidationRules.java:131)
        at graphql.validation.rules.TargetedValidationRules.walkObjectArg(TargetedValidationRules.java:180)
        at graphql.validation.rules.TargetedValidationRules.runValidationImpl(TargetedValidationRules.java:147)
        at graphql.validation.rules.TargetedValidationRules.walkObjectArg(TargetedValidationRules.java:180)
        at graphql.validation.rules.TargetedValidationRules.runValidationImpl(TargetedValidationRules.java:147)
        at graphql.validation.rules.TargetedValidationRules.runValidationRules(TargetedValidationRules.java:121)
        at graphql.validation.schemawiring.FieldValidatorDataFetcher.get(FieldValidatorDataFetcher.java:50)
        at graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation.lambda$instrumentDataFetcher$0(DataLoaderDispatcherInstrumentation.java:90)
        at graphql.execution.ExecutionStrategy.invokeDataFetcher(ExecutionStrategy.java:309)
        at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:286)
        at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:212)
        at graphql.execution.ExecutionStrategy.resolveField(ExecutionStrategy.java:184)
        at graphql.execution.AsyncSerialExecutionStrategy.lambda$execute$1(AsyncSerialExecutionStrategy.java:47)
        at graphql.execution.Async.eachSequentiallyImpl(Async.java:167)
        at graphql.execution.Async.eachSequentially(Async.java:156)
        at graphql.execution.AsyncSerialExecutionStrategy.execute(AsyncSerialExecutionStrategy.java:42)
        at graphql.execution.Execution.executeOperation(Execution.java:161)
        at graphql.execution.Execution.execute(Execution.java:104)
        at graphql.GraphQL.execute(GraphQL.java:557)
        at graphql.GraphQL.lambda$parseValidateAndExecute$11(GraphQL.java:476)
        at [email protected]/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)
        at [email protected]/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)
        at graphql.GraphQL.parseValidateAndExecute(GraphQL.java:471)
        at graphql.GraphQL.executeAsync(GraphQL.java:439)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.execute(GraphQLHandlerImpl.java:483)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.executeOne(GraphQLHandlerImpl.java:418)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.handlePostQuery(GraphQLHandlerImpl.java:312)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.handlePostJson(GraphQLHandlerImpl.java:242)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.handlePost(GraphQLHandlerImpl.java:207)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.handle(GraphQLHandlerImpl.java:116)
        at io.vertx.ext.web.handler.graphql.impl.GraphQLHandlerImpl.handle(GraphQLHandlerImpl.java:57)
        at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284)
        at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:140)
        at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141)
        at com.ratpsmartsystems.gos.infra.graphql.GraphQLController.lambda$init$1(GraphQLController.java:55)
        at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284)
        at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:140)
        at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141)
        at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.doEnd(BodyHandlerImpl.java:361)
        at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.end(BodyHandlerImpl.java:338)
        at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
        at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:246)
        at io.vertx.core.http.impl.HttpEventHandler.handleEnd(HttpEventHandler.java:76)
        at io.vertx.core.http.impl.Http1xServerRequest.onEnd(Http1xServerRequest.java:581)
        at io.vertx.core.http.impl.Http1xServerRequest.lambda$pendingQueue$1(Http1xServerRequest.java:130)
        at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:255)
        at io.vertx.core.streams.impl.InboundBuffer.drain(InboundBuffer.java:242)
        at io.vertx.core.streams.impl.InboundBuffer.lambda$fetch$0(InboundBuffer.java:295)
        at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
        at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:246)
        at io.vertx.core.impl.EventLoopContext.lambda$runOnContext$0(EventLoopContext.java:43)
        at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:566)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at [email protected]/java.lang.Thread.run(Thread.java:833)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
        at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)

所以我尝试使用 graalvm 的反射配置包含 com.sun.el.ExpressionFactoryImpl 但没有任何改变。

quarkus hibernate-validator graphql-java graalvm-native-image
1个回答
0
投票

事实证明我为 graalvm 的反射设置了错误的配置。 使用这个配置解决了我的问题:

import com.sun.el.ExpressionFactoryImpl;
import io.quarkus.runtime.annotations.RegisterForReflection;
import jakarta.el.ExpressionFactory;

@RegisterForReflection(targets = {ExpressionFactory.class, ExpressionFactoryImpl.class})
public class ExpressionFactoryConfiguration {
}
© www.soinside.com 2019 - 2024. All rights reserved.