我正在使用 Kie 执行服务器 6.5(泊坞窗图像)。我部署了一个 kie 容器 (kjar),其中包含一些规则和一些自定义 java 类。到目前为止一切正常。
现在,我在我的 java 类 ( geojson-jackson
) 中添加了一些 3rd 方类,它们使用自定义的 jackson 序列化器和反序列化器,用 声明@JsonDeserialize(using = LngLatAltDeserializer.class)
,请参阅LngLatAlt。
首先,我遇到了类加载问题,显然是因为不同的杰克逊版本,我通过使用 geojson-jackson 1.3 解决了这个问题,并在我的pom.xml
.
容器现在启动成功,但是对象不能反序列化,因为没有使用自定义反序列化器。我得到一个MarshallingException
由
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of
org.geojson.LngLatAlt out of START_ARRAY token
at [Source: java.io.StringReader@33714932; line: 1, column: 385] (through reference chain:
org.drools.core.command.runtime.BatchExecutionCommandImpl["commands"]->
org.drools.core.command.runtime.rule.InsertObjectCommand["object"]->
MYPACKAGE.MYCLASS["polygon"]->org.geojson.Polygon["coordinates"])
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
这正是自定义反序列化器应该处理的部分。
更新: Karel Suta 的回答帮助我进一步调查。
PR 的 issue 5776 表明应该可以对 DTO 进行注释以扩展 JSON 编组器。JSONMarshallerExtension
仅当不需要注释对象模型时才需要new 。
https://issues.jboss.org/browse/JBPM-5776
https://github.com/kiegroup/droolsjbpm-integration/pull/851
启用调试日志级别org.kie.server
,我得到:
DEBUG [org.kie.server.services.drools.DroolsKieServerExtension] (default task-1) Adding org.geojson.Polygon type into extra jaxb classes set
DEBUG [org.kie.server.services.drools.DroolsKieServerExtension] (default task-1) Added org.geojson.Polygon type into extra jaxb classes set
DEBUG [org.kie.server.services.drools.DroolsKieServerExtension] (default task-1) Adding org.geojson.LngLatAlt type into extra jaxb classes set
DEBUG [org.kie.server.services.drools.DroolsKieServerExtension] (default task-1) Added org.geojson.LngLatAlt type into extra jaxb classes set
...
和
DEBUG [org.kie.server.api.marshalling.BaseMarshallerBuilder] (default task-2) About to build default instance of JSON marshaller with classes [
..., class org.geojson.Polygon, org.geojson.LngLatAlt, ...
连同其他一百多个类(似乎所有依赖项)。所以这些类被识别并且可能JSONMarshallerExtension
为它们提供一个可以工作(我还没有想出,如何做到这一点),但它也应该可以使用注释。
还有其他建议可以使注释正常工作吗?