簡體   English   中英

具有更高版本 com.fasterxml.jackson.core:jackson-databind:2.13..2.2 的類路徑問題的改用 Kie 服務器

[英]Repurposed Kie server having classpath issue with a higher version of com.fasterxml.jackson.core:jackson-databind:2.13..2.2

對於規則引擎即服務,我有一個重新調整用途的 Kie 服務器(基於 2.6.6 spring-boot-starter 包的 spring 引導服務)的類路徑問題。 該服務已經對 com.fasterxml.jackson.core:jackson-databind:2.13.2.2 具有傳遞依賴性,我嘗試過的 kie-server-spring-boot-starter-drools 版本是 7.53.0.Final 到 7.73 .0.Final 在這里,普通 Kie 服務器(pom 中沒有使用其他庫)的 jackson 庫版本依賴項是 2.11.2。 在嘗試使用 KieServicesConfiguration 實例(具有 url、用戶名、密碼並將 mardshalling 設置為 JSON)創建 KieServicesClient 時,會向 Kie 服務器請求尋找 ServerInfo,然后執行幾個步驟,然后在遇到的地方進行 JSONMarshalling異常(顯然是由於 jackson 庫版本不匹配)並出現服務器 500 錯誤。 堆棧跟蹤看起來像這樣:

Caused by: java.lang.NoSuchFieldError: _typeCache at org.kie.server.api.marshalling.json.FallbackableTypeFactory.withFallbackClassLoader(FallbackableTypeFactory.java:62) at org.kie.server.api.marshalling.json.JSONMarshaller.configureMarshaller( JSONMarshaller.java:295) at org.kie.server.api.marshalling.json.JSONMarshaller.(JSONMarshaller.java:191) at org.kie.server.api.marshalling.json.JSONMarshaller.(JSONMarshaller.java:183)在 org.kie.server.api.marshalling.BaseMarshallerBuilder.build(BaseMarshallerBuilder.java:45) 在 org.kie.server.api.marshalling.MarshallerFactory.getMarshaller(MarshallerFactory.8821382server84g.650) .impl.marshal.MarshallerHelper.marshal(MarshallerHelper.java:78)在 org.kie.server.remote.rest.common.util.RestUtils.createCorrectVariant(RestUtils.java: 62) 在 org.kie.server.remote.rest.common.util.RestUtils.createCorrectVariant(RestUtils.java:51) 在 org.kie.server.remote.rest.common.resource.KieServerRestImpl.getInfo(KieServerRestImpl.getInfo2.8889R2estImpl) 106) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect .Method.invoke(Method.java:498) at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:179) at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java :96)... 省略了93個公共框架

我的目標是重新利用現有服務,該服務對 jackson 版本 2.13.2 具有傳遞依賴性,而最新的 kie-server-spring-boot-starter-drools 庫對較低版本具有 jackson 依賴性。 可能是一個具有單一責任的獨立精益 Kie 服務器是通往 go 的道路。我正在尋找任何建議,我可以在其中重新利用我試圖通過規則引擎功能超載的服務。 任何改進建議表示贊賞。

謝謝

我已經嘗試了一個普通的獨立 Kie 服務器,如果沒有錯誤並且它按預期工作。 當我嘗試重新調整服務的用途時,該服務對更高版本的 jackson-databind 具有傳遞依賴性,而不是 kie-server-spring-boot-starter-drools 庫的預期版本。 我調試了 kie 服務器庫,發現 kie-server-api:7.53.0.Final 庫中的 JSONMarshaller.java 有一個方法

protected void configureMarshaller(Set<Class<?>> classes, ClassLoader classLoader) {}

在第 149 行有如下代碼產生異常(我猜這是由於 jackson 庫版本不匹配)

TypeResolverBuilder<?> typer = 
    new DefaultTypeResolverBuilder(DefaultTyping.NON_FINAL) { 
        public boolean useForType(JavaType t) {
            return JSONMarshaller.this.classesSet.contains(t.getRawClass());
        }
    };

如果幸運的話,那么您可以從kie-server-spring-boot-starter-drools中排除傳遞依賴,而只使用較新的依賴。 你試過了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM