当前位置: 首页 > 知识库问答 >
问题:

骆驼Quarkus ClassNotFoundException:HttpOperationFailedException

秦钟展
2023-03-14

我有一个Quarkus应用程序,它使用Apache-Camel并在本地运行良好。当我构建它并尝试运行docker容器时,我收到以下错误:

ERROR [io.qua.run.Application] (main) Failed to start application (with profile prod): java.lang.ClassNotFoundException: org.apache.camel.http.base.HttpOperationFailedException
at org.apache.camel.quarkus.core.CamelQuarkusClassResolver.resolveMandatoryClass(CamelQuarkusClassResolver.java:68)
at org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.createExceptionClasses(ErrorHandlerReifier.java:197)
at org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.addExceptionPolicy(ErrorHandlerReifier.java:177)
at org.apache.camel.reifier.errorhandler.ErrorHandlerReifier.configure(ErrorHandlerReifier.java:220)
at org.apache.camel.reifier.errorhandler.DefaultErrorHandlerReifier.createErrorHandler(DefaultErrorHandlerReifier.java:53)
at org.apache.camel.impl.DefaultModelReifierFactory.createErrorHandler(DefaultModelReifierFactory.java:65)
at org.apache.camel.reifier.errorhandler.ErrorHandlerRefReifier.createErrorHandler(ErrorHandlerRefReifier.java:36)
at org.apache.camel.impl.DefaultModelReifierFactory.createErrorHandler(DefaultModelReifierFactory.java:65)
at org.apache.camel.reifier.ProcessorReifier.wrapInErrorHandler(ProcessorReifier.java:751)
at org.apache.camel.reifier.ProcessorReifier.wrapChannelInErrorHandler(ProcessorReifier.java:732)
at org.apache.camel.reifier.ProcessorReifier.wrapChannel(ProcessorReifier.java:711)
at org.apache.camel.reifier.ProcessorReifier.wrapChannel(ProcessorReifier.java:617)
at org.apache.camel.reifier.ProcessorReifier.wrapProcessor(ProcessorReifier.java:613)
at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:860)
at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:585)
at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:236)
at org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:74)
at org.apache.camel.impl.DefaultModelReifierFactory.createRoute(DefaultModelReifierFactory.java:49)
at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:887)
at org.apache.camel.impl.DefaultModel.addRouteDefinitions(DefaultModel.java:190)
at org.apache.camel.impl.DefaultCamelContext.addRouteDefinitions(DefaultCamelContext.java:344)
at org.apache.camel.builder.RouteBuilder.populateRoutes(RouteBuilder.java:676)
at org.apache.camel.builder.RouteBuilder.addRoutesToCamelContext(RouteBuilder.java:529)
at org.apache.camel.impl.engine.AbstractCamelContext.addRoutes(AbstractCamelContext.java:1175)
at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:323)
at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:305)
at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:73)
at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:130)
at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:99)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source)
at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
at io.quarkus.runtime.Application.start(Application.java:101)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:103)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:120)
at io.quarkus.runner.GeneratedMain.main(Unknown Source)

我的分级依赖关系是

dependencies {
implementation 'io.quarkus:quarkus-container-image-docker'
implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
implementation enforcedPlatform("${quarkusPlatformGroupId}:quarkus-camel-bom:${quarkusPlatformVersion}")
implementation 'io.quarkus:quarkus-arc'
implementation 'io.quarkus:quarkus-config-yaml'

implementation 'io.quarkus:quarkus-smallrye-jwt'
implementation 'io.quarkus:quarkus-smallrye-health'
implementation 'io.quarkus:quarkus-smallrye-metrics'
implementation 'io.quarkus:quarkus-smallrye-openapi'
implementation 'io.quarkus:quarkus-smallrye-jwt-build'

implementation 'io.quarkus:quarkus-jackson'
implementation 'io.quarkus:quarkus-resteasy-jackson'
implementation 'io.quarkus:quarkus-resteasy'

implementation 'org.apache.camel.quarkus:camel-quarkus-file'
implementation 'org.apache.camel.quarkus:camel-quarkus-core'
implementation 'org.apache.camel.quarkus:camel-quarkus-base64'
implementation 'org.apache.camel.quarkus:camel-quarkus-ahc'
implementation 'org.apache.camel.quarkus:camel-quarkus-jackson'
implementation 'org.apache.camel.quarkus:camel-quarkus-ftp'
implementation 'org.apache.camel.quarkus:camel-quarkus-rest'
implementation 'org.apache.camel.quarkus:camel-quarkus-http'

implementation group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.3.1'

testImplementation 'io.quarkus:quarkus-junit5'
testImplementation 'io.rest-assured:rest-assured'

compileOnly 'org.projectlombok:lombok:1.18.16'

}

当我在IntelliJ终端中使用“夸克斯开发”运行它时,我没有问题。我是否尝试运行容器,但会出现错误。为什么会发生这种情况?我不知道如何解决它。

编辑:

处理HttpException的位置:

 onException(HttpOperationFailedException.class)
            .process(new HttpExceptionHandler())
            .maximumRedeliveries(5)
            .redeliveryDelay(1000L)
            .backOffMultiplier(2)
            .retryAttemptedLogLevel(LoggingLevel.WARN)
            .handled(true)
            .stop();

处理程序本身:

import org.apache.camel.Exchange;
import org.apache.camel.component.file.FileConstants;
import org.apache.camel.http.base.HttpOperationFailedException;
import org.jboss.logging.Logger;

public class HttpExceptionHandler implements org.apache.camel.Processor {

private static final Logger LOG = Logger.getLogger(HttpExceptionHandler.class);

@Override
public void process(Exchange exchange) {
    HttpOperationFailedException failedException = exchange.getProperty(
            Exchange.EXCEPTION_CAUGHT,
            HttpOperationFailedException.class);

    ...

}

}

共有1个答案

唐伟
2023-03-14

在路由中使用onException时,您定义的类需要注册以进行反射,以便它在本机模式下工作。

因此,如果您有. onException(HttpOperationFailedException.class),则需要注册HttpoperationFailedException以进行反射。例如:

@RegisterForReflection(targets = HttpOperationFailedException.class)
public class Routes extends RouteBuilder {
    public void configure() {
        // Route configuration goes here
    }
}

骆驼Quarkus用户指南中有一些关于此内容的更多信息:

https://camel . Apache . org/camel-quar kus/2.11 . x/user-guide/native-mode . html # using-one exception-clause-in-native-mode

我打开了一个问题,以改善未来的事情,以便< code > HttpOperationFailedException 不需要手动注册。

https://github.com/apache/camel-quarkus/issues/3971

 类似资料:
  • 我正在使用带有Apache骆驼的Spring Boot。我正在从控制器调用路由。一旦路由完成,控制就会返回控制器。我正在VerifyLimitProcess和批准限制处理器中生成响应。如果我没有在路由中提供窃听配置,控制器会按预期检索标头和正文。但如果我在路由中引入窃听,控制器会将标头和正文接收为null。如果有人指出我需要做什么,以便我可以在选择语句中引入两个处理器的窃听配置,即VerifyLi

  • 我有一条小路线,我想使用自定义的重新传递策略来重复向endpoint发送消息,但这种行为非常奇怪。看起来,重新交付政策只是在重复一个错误。我试图将所有交换发送到路由的开头,但策略不起作用,因为每次都在创建: 我做错了什么?当错误发生时,我想以间隔重复我的请求。我的骆驼版本是2.6 日志:

  • 我正在遵循位于Camel MyBatis Integration guide的安装指南。我使用的是Service Mix 5.0.1。我使用了安装spring mybatis的功能,它支持3.2.4。释放我的SqlMapConfig文件只包含有关TypeHandler和TypeAlias的信息。 当我开启服务混合,然后启动我的应用程序,我收到以下堆栈跟踪: ...还有50个 我的Bean定义如下:

  • 我试图弄清楚骆驼的节流概念。我已经看到了骆驼的航线政策,但这适用于许多飞行中的交换。 我的路线如下: 现在我的用例是,我想在这些路由之间传输比如说2000条消息,我知道可以通过来完成。但是,我不得不决定如何在下一个2000条消息被路由时控制它。我只想在接收者队列变为空时路由下2000条消息。 例如,消息从队列路由到。假设2K消息已成功路由,现在我想挂起我的路由,这样它就不会传输更多的消息,直到队列

  • 我有一个Spring Boot2.25.1应用程序,它使用Camel 2.25.1与camel-kafka,一切都正常工作…在我的Kafka消费者中,我需要添加该功能以按需暂停消费,因此我升级到camel 3.18.1,以便我可以使用可暂停功能。升级到3.18.1后,我收到错误FileNotes与类文件TimeoutAwareAggregationStategy.class. 当我打开camel-

  • 我最近注意到Camel现在有自己的Kafka组件,所以我决定给它一个旋转。 我决定尝试一个很好的简单文件->kafka主题如下...