![](/img/trans.png)
[英]org.codehaus.jackson versus com.fasterxml.jackson.core
[英]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.