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

Quarkus应用程序找不到 MongoDB 客户端的编解码器

邢焕
2023-03-14

使用MongoDB(泛型)运行Quarkus应用程序会在启动时显示警告,例如:

WARN  [io.qua.mon.run.MongoClients] (main) Unable to load the property codec provider class org.bson.codecs.pojo.EnumPropertyCodecProvider: java.lang.NoSuchMethodException: org.bson.codecs.pojo.EnumPropertyCodecProvider.<init>()
    at java.base/java.lang.Class.getConstructor0(Class.java:3349)
    at java.base/java.lang.Class.getConstructor(Class.java:2151)
    at io.quarkus.mongodb.runtime.MongoClients.getPropertyCodecProviders(MongoClients.java:440)
    at io.quarkus.mongodb.runtime.MongoClients.configureCodecRegistry(MongoClients.java:332)
    at io.quarkus.mongodb.runtime.MongoClients.createMongoConfiguration(MongoClients.java:255)
    at io.quarkus.mongodb.runtime.MongoClients.createReactiveMongoClient(MongoClients.java:115)
    at io.quarkus.mongodb.runtime.MongoClientRecorder.reactiveMongoClientSupplier(MongoClientRecorder.java:57)
    at io.quarkus.deployment.steps.MongoClientProcessor$generateClientBeans-1756432087.deploy_0(MongoClientProcessor$generateClientBeans-1756432087.zig:96)
    at io.quarkus.deployment.steps.MongoClientProcessor$generateClientBeans-1756432087.deploy(MongoClientProcessor$generateClientBeans-1756432087.zig:40)
    at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:666)
    at io.quarkus.runtime.Application.start(Application.java:101)
    at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:101)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:66)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:42)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:119)
    at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)

然后进行从数据库获取数据的操作(例如查找)。在类似于以下的循环中生成StackOverflow异常:

    at org.bson.internal.LazyCodec.encode(LazyCodec.java:38)
    at org.bson.BsonDocumentWrapper.getUnwrapped(BsonDocumentWrapper.java:195)
    at org.bson.BsonDocumentWrapper.entrySet(BsonDocumentWrapper.java:165)
    at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:112)
    at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:42)
    at org.bson.codecs.BsonCodec.encode(BsonCodec.java:55)
    at org.bson.codecs.BsonCodec.encode(BsonCodec.java:33)
    at org.bson.internal.LazyCodec.encode(LazyCodec.java:38)
    at org.bson.BsonDocumentWrapper.getUnwrapped(BsonDocumentWrapper.java:195)
    at org.bson.BsonDocumentWrapper.entrySet(BsonDocumentWrapper.java:165)
    at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:112)
    at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:42)

映射的对象包含对象 Id 标识符。这些豆子是在一个单独的项目中定义的,有jandex插件来索引豆子

直接在项目POM文件上定义的Quarkus的依赖关系是:

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-arc</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-mongodb-panache</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-resteasy</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-rest-client</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-resteasy-jackson</artifactId>
    </dependency>

共有1个答案

冯俊英
2023-03-14

我发现了问题。错误地将bson库添加到了jandex索引中。

从索引中删除它可以解决此问题。

在我们的例子中,它是在应用程序属性上声明的:

quarkus.index-dependency.bson.group-id=org.mongodb
quarkus.index-dependency.bson.artifact-id=bson

我删除了这些行,项目可以工作,但是我们看到一个编译警告

[WARNING] [io.quarkus.deployment.steps.ReflectiveHierarchyStep] Unable to properly register the hierarchy of the following classes for reflection as they are not in the Jandex index:
    - org.bson.types.ObjectId (source: RestClientProcessor > com.saaskun.api...)
 类似资料:
  • 我正在尝试使用应用程序脚本将BigQuery结果加载到Google电子表格中。这是我的密码 我得到的错误是 错误:invalid_client 找不到OAuth客户端。 请求详细信息 -cookie_policy_enforce=false -范围=https://www.googleapis.com/auth/bigqueryhttps://www.googleapis.com/auth/spr

  • 我有这个quarkus rest API: api工作得很好,但是如果我将此值传递给方法,rest客户端将其编码为'USSU%25OS':

  • 我一直在进入Quarkus并试图利用叛变Vertx网络客户端。我的代码可以工作,但我不希望依赖不安全/未检查的分配,这就是我目前在HttpResponse上使用bodyAsJson方法编写代码的方式。有没有更好的方法,或者更标准的方法来解码来自Mutiny Vertx客户端的JSON?我意识到我可以调用bodyAsJsonObject并返回它,但我需要对API调用返回的数据进行处理,所以我需要将其

  • 我尝试为我的后期服务添加一个示例,这是一个使用quarkus构建的简单rest API。 java版本运行良好。 当我添加另一个 Kotlin 来测试 Quarkus 中的 Kotlin 和 Gradle 支持时,它失败了,REST 客户端接口无法注入为 CDI bean。 是Jaxrs资源,用于公开将原始两个API组合在一起的聚合API。 以上两种注入Bean的方法都失败了。 REST客户端接口

  • 我需要一个用于java spring应用程序的graphQL客户端,以与另一个基于graphQL API的微服务通信。我知道Apollo Android,但它似乎没有用maven实现(也许你知道maven的一些链接或示例等)。有什么想法和建议吗?提前感谢!

  • 这是我使用jax rs客户端执行请求的代码: .... 我收到错误: javax。ws。rs.ProcessingException:RESTEASY004655:无法调用请求:javax。ws。rs.ProcessingException:RESTEASY003215:找不到内容类型应用程序/x-www-form-urlencoded-type:javax的编写器。ws。rs.core。类型 这