我正在使用Kie Execution Server 6.5(docker image)。我部署了一个包含一些规则和一些自定义java类的kie容器(kjar)。到目前为止,一切都在运作。
现在,我在我的java类(geojson-jackson
)中添加了一些第三方类,它们使用了@JsonDeserialize(using = LngLatAltDeserializer.class)
声明的自定义jackson序列化程序和反序列化程序,请参阅LngLatAlt。
首先我遇到了类加载问题,显然是因为不同的jackson版本,我使用geojson-jackson 1.3解决了这个问题,并在我的pom.xml
中排除了jackson依赖项。
容器现在已成功启动,但无法反序列化对象,因为未使用自定义反序列化程序。我得到了由{/ p>引起的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的问题5776表明注释DTO应该可以扩展JSON编组。只有在不注释对象模型时才需要新的JSONMarshallerExtension
。
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
将起作用(我还没想到,如何做到这一点),但也应该可以使用注释。
有任何其他建议让注释有效吗?