maven AKS Pod中的ClassNotFoundException:org.jboss.resteasy.client.jaxrs.internal.proxy.ProxyBuilderImpl -错误在UAT环境中,但不在测试环境中

hm2xizp9  于 12个月前  发布在  Maven
关注(0)|答案(1)|浏览(145)

当我的服务尝试使用Keyclove管理客户端连接到Keyclove服务器时,我遇到了专门针对类org.jboss.resteasy.client.jaxrs.internal.proxy.ProxyBuilderImpljava.lang.ClassNotFoundException
以下是该问题的具体内容:

  • 在Azure Kubernetes服务(AKS)群集中运行的用户接受度测试(UAT)环境中发生错误。
  • 该服务是Dockerized的,Docker映像是在测试环境中构建和部署的,该环境在与UAT环境不同的AKS集群上运行。
  • 然后从测试环境中复制Docker映像,并在UAT环境中部署。
  • 重要的是,ClassNotFoundException不会在测试环境中出现。

我已检查了以下几个方面:

  • 依赖项:所需的依赖项,包括Resteasy库,都包含在Docker映像中。
  • 环境变量:我已经验证了在UAT环境中正确设置了所有必要的环境变量。
  • 配置:测试环境和UAT环境之间的配置没有明显的差异。
  • 类路径:Docker映像中的类路径似乎配置正确。

我已经查看了错误日志,但它们主要指出了ClassNotFoundException,而没有提供对根本原因的其他见解。
任何解决此问题的指导或见解将不胜感激。如果你需要更多的细节或日志,请让我知道。谢谢!
下面是错误日志

java.lang.RuntimeException: Exception while adding Patients to batch 
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.CxxxxxxxxServiceImpl.savePatients(CxxxxxxxxServiceImpl.java:235)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.ExxxxServiceImpl.saveEvents(ExxxxServiceImpl.java:120)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.ExxxxServiceImpl.segregateEventsByEntitiesAndSave(ExxxxServiceImpl.java:184)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.ExxxxServiceImpl.lambda$saveEventsAsEntities$0(ExxxxServiceImpl.java:97)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.jboss.resteasy.client.jaxrs.internal.proxy.ProxyBuilderImpl
    at org.jboss.resteasy.client.jaxrs.ProxyBuilder.builder(ProxyBuilder.java:41)
    at org.jboss.resteasy.client.jaxrs.internal.ClientWebTarget.createProxyBuilder(ClientWebTarget.java:107)
    at org.jboss.resteasy.client.jaxrs.internal.ClientWebTarget.proxy(ClientWebTarget.java:94)
    at org.keycloak.admin.client.spi.ResteasyClientClassicProvider.targetProxy(ResteasyClientClassicProvider.java:48)
    at org.keycloak.admin.client.token.TokenManager.<init>(TokenManager.java:61)
    at org.keycloak.admin.client.Keycloak.<init>(Keycloak.java:91)
    at org.keycloak.admin.client.KeycloakBuilder.build(KeycloakBuilder.java:152)
    at com.xxx.workxxxxxxxxxxxxxxxx.config.KeycloakConfig.getInstance(KeycloakConfig.java:37)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.KxxxxxxxServiceImpl.getInstance(KxxxxxxxServiceImpl.java:240)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.KxxxxxxxServiceImpl.getRealmResource(KxxxxxxxServiceImpl.java:226)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.KxxxxxxxServiceImpl.importUsers(KxxxxxxxServiceImpl.java:132)
    at com.xxx.workxxxxxxxxxxxxxxxx.service.impl.CxxxxxxxxServiceImpl.savePatients(CxxxxxxxxServiceImpl.java:227)
    ... 10 more
Caused by: java.lang.ClassNotFoundException: org.jboss.resteasy.client.jaxrs.internal.proxy.ProxyBuilderImpl
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
    at org.jboss.resteasy.client.jaxrs.ProxyBuilder.builder(ProxyBuilder.java:35)
    ... 21 more

字符串
我试图通过拉出映像、在其中运行并执行以下命令来检查Docker容器是否包含类,从而在本地系统中重现错误

docker exec -it <docker_id> /bin/bash
jar -tf /root/.m2/repository/org/jboss/resteasy/resteasy-client/4.7.9.Final/resteasy-client-4.7.9.Final.jar | grep ProxyBuilderImpl.class


它提供了以下内容:

gudnpqoy

gudnpqoy1#

我今天遇到了同样的问题。我使用keycloak-admin-client来配置多个realm,我是通过Stream API来完成的,特别是顺序流Collection.stream()。我使用嵌入式tomcat的spring-boot。
我开始通过Collection.parallelStream()测试并行流的使用,对于某些项,我得到的堆栈跟踪基本上与您的相同,原因是:Caused by:java.lang.ClassNotFoundException:org.jboss.resteasy.client.jaxrs.internal.proxy.ProxyBuilderImpl
我注意到失败的项目的一个模式,那就是底层线程是基于ForkJoinPool.在我看来,这些线程的类路径不包括某些类.我不会推测为什么是这样.有人更有资格可能提供信息.
我通过设置java.util.concurrent.ExecutorService(java.util.concurrent.Executors.newFixedThreadPool(int))来“修复”我的问题。然后我循环遍历我的领域集合,并通过ExecutorService.invokeAll提交我的任务(我需要阻塞,直到所有任务都完成)。在这样做之后,我无法重现该问题。
至于为什么您会根据运行代码的环境获得不同的结果,是否是由于集合中的项目数量不同?参考“将患者添加到批次时出现异常”

相关问题