使用MongoDB (Panache)运行夸克应用程序会显示启动时的警告,例如:
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)映射的对象包含一个ObjectId标识符。这些bean是在一个单独的项目中定义的,有一个jandex插件来对bean进行索引。
直接在项目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>发布于 2021-11-12 22:47:39
我发现了问题。错误地,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...)https://stackoverflow.com/questions/69937311
复制相似问题