1

我正在使用 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为它们提供一个可以工作(我还没有想出,如何做到这一点),但它也应该可以使用注释。

还有其他建议可以使注释正常工作吗?

4

1 回答 1

1

在最新的快照中,可以使用 JSONMarshallerExtension 为类定义自定义编组器,请参阅此 PR

于 2017-04-07T13:58:57.437 回答