XStream 将自定义 Forager 与 OptaPlanner 结合使用时出现 ForbiddenClassException

XStream ForbiddenClassException when using a custom Forager with OptaPlanner

我最近将 optaplanner 版本从 7.0.0 版升级到 7.4.1 版。我使用在配置文件中声明的自定义 Forager,如下所示:

...
<forager class="com.mycompany.MyCustomForagerConfig">
            <acceptedCountLimit>100</acceptedCountLimit>
</forager>
...

以前的 OptaPlanner 版本一切正常,但升级后我在 OptaPlanner 读取 config.xml 文件时遇到问题:

---- Debugging information ----
cause-exception     : com.thoughtworks.xstream.security.ForbiddenClassException
cause-message       : com.mycompany.MyCustomForagerConfig
class               : org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig
required-type       : org.optaplanner.core.config.localsearch.LocalSearchPhaseConfig
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
line number         : 137
class[1]            : org.optaplanner.core.config.solver.SolverConfig
version             : 1.4.10
-------------------------------
    at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
    at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70)
    …

最新版本(7.5.0)似乎与此问题https://issues.jboss.org/browse/PLANNER-896(已解决)有关,所以我尝试升级但问题仍然存在。

谢谢。

在您的 MyCustomForagerConfig 上添加一个 @XStreamAlias 并执行如下操作:

((XStreamXmlSolverFactory) solverFactory).addXStreamAnnotations(MyCustomForagerConfig.class);

出于好奇,你为什么需要一个定制的觅食器?它是否添加了 OptaPlanner 应该开箱即用的功能?