0

我正在尝试示例项目以了解如何使用 Optaplanner 功能(在 wildfly11 上使用版本 7.11-Final)。我安装了一些内置 employee rostering示例,当我尝试通过 REST API(使用 SOAP-UI)发布不同的 xml 时,在使用我修改的示例后遇到了一个非常奇怪的错误。

使用以下 xml(摘录)效果很好,我可以毫无问题地提交 xml 并检索调用相关端点的最佳解决方案:

    <TeamRoster>
        <employeeList>
            <Employee>
                <name>Luigi</name>
            </Employee>
            <Employee>
                <name>Mauro</name>
            </Employee>
            <Employee>
                <name>Pietro</name>
            </Employee>
            <Employee>
                <name>Gino</name>
            </Employee>
        </employeeList>
        <teamList>
            <Team>
                <name>Squadra 1</name>
                <employeeList>
                    <Employee reference="../../../../employeeList/Employee"/>
                    <Employee reference="../../../../employeeList/Employee[2]"/>
                </employeeList>
                .........

相反,使用以下修改后的 xml(带有 id/reference):

        <TeamRoster id="1">
            <employeeList id="2">
                <Employee id="3">
                    <id>0</id>
                    <name>Luigi</name>
                </Employee>
                <Employee id="4">
                    <id>1</id>
                    <name>Mauro</name>
                </Employee>
                <Employee id="5">
                    <id>2</id>
                    <name>Pietro</name>
                </Employee>
                <Employee id="6">
                    <id>3</id>
                    <name>Gino</name>
                </Employee>
            </employeeList>
            <teamList id="7">
                <Team id="8">
                    <id>0</id>
                    <name>Squadra 1</name>
                    <employeeList id="9">
                        <Employee reference="3"/>
                        <Employee reference="4"/>
                    </employeeList>

kie 服务器的响应是消息错误:

com.thoughtworks.xstream.converters.ConversionException:引用无效

详细信息:

    message             : Invalid reference
    reference           : 3
    referenced-type     : com.linkit.trostering.Employee
    referenceable       : true
    class               : java.util.ArrayList
    required-type       : java.util.ArrayList
    converter-type      : com.thoughtworks.xstream.converters.collections.CollectionConverter
    path                : /TeamRoster/teamList/Team/employeeList/Employee
    line number         : 25
    class[1]            : com.linkit.trostering.Team
    converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
    class[2]            : com.linkit.trostering.TeamRoster
    version             : 7.11.0.Final

我已经看到 optaplanner 示例项目中包含的其他示例使用此选项(如果我理解它是 xtream 功能)来引用已经使用 id 而不是 xml 路径定义的事实。

现在我怀疑带有 kie 服务器的 Optaplanner wb 是否附带 xstream 不同的设置?是否有任何选项必须通过 REST 发送才能使用 xtream 的此功能?还有什么别的吗?

提前感谢您提供的任何帮助,非常感谢

4

1 回答 1

0

您的第一个 xml 使用 XPath 引用。您的第二个 xml 使用 id 引用。第二个需要不同的 XStream 设置:

xStream = new XStream();
xStream.setMode(XStream.ID_REFERENCES);
于 2018-10-03T12:05:18.420 回答