OptaPlanner 执行服务器无法将字符串 () 转换为类型 (java.time.LocalDateTime)

OptaPlanner Execution server failed to convert string () to type (java.time.LocalDateTime)

尝试从 Workbench 设置来自 "Try Samples" 的员工名册,并尝试设置它以通过 REST API 访问解决方案。 我在使用 POST 上传我的数据集时遇到问题,我在下面详细列出了我尝试过的和遇到的问题。

在此之前,当我注册 (PUT) 我的求解器 config.xml 时,我的状态是 NOT_SOLVING。这是我们将获得的实际状态吗?

解析日期格式时出错。

<startTime>2017-01-01T00:00</startTime>

并尝试了如下不同的格式,但没有帮助。

 <startTime>2017-01-01 00:00</startTime>

环境详细信息:

wildfly-10.0.0.Final
kie-server(Execution Server) - 7.5.0.Final 
Workbench(for WildFly10)

放置:http://localhost:8080/kie-server/services/rest/server/containers/employeerostering/solvers/employeerosteringSolver

请求正文:

<solver-instance>
  <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
</solver-instance>

获取:http://localhost:8080/kie-server/services/rest/server/containers/employeerostering/solvers/employeerosteringSolver/bestsolution

收到回复:

<solver-instance>
  <container-id>employeerostering</container-id>
  <solver-id>employeerosteringSolver</solver-id>
  <solver-config-file>employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml</solver-config-file>
  <status>NOT_SOLVING</status>
  <score />
</solver-instance>

POST: http://localhost:8080/kie-server/services/rest/server/containers/employeerostering/solvers/employeerosteringSolver/state/solving

请求正文:

<planning-problem class="employeerostering.employeerostering.EmployeeRoster">
  <employeeList>
    <employeerostering.employeerostering.Employee>
      <name>John</name>
      <skills>
        <employeerostering.employeerostering.Skill>
          <name>consulting</name>
        </employeerostering.employeerostering.Skill>
        <employeerostering.employeerostering.Skill>
          <name>translation</name>
        </employeerostering.employeerostering.Skill>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Ann</name>
      <skills>
        <employeerostering.employeerostering.Skill reference="../../../employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Paul</name>
      <skills>
        <employeerostering.employeerostering.Skill>
          <name>maintenance</name>
        </employeerostering.employeerostering.Skill>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Carla</name>
      <skills>
        <employeerostering.employeerostering.Skill reference="../../../employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
        <employeerostering.employeerostering.Skill reference="../../../employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Brian</name>
      <skills>
        <employeerostering.employeerostering.Skill reference="../../../employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
      </skills>
    </employeerostering.employeerostering.Employee>
    <employeerostering.employeerostering.Employee>
      <name>Unskilled</name>
      <skills class="empty-list"/>
    </employeerostering.employeerostering.Employee>
  </employeeList>
  <shiftList>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-01T00:00</startTime>
        <endTime>2017-01-01T07:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-01T08:00</startTime>
        <endTime>2017-01-01T15:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-01T16:00</startTime>
        <endTime>2017-01-01T23:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-02T00:00</startTime>
        <endTime>2017-01-02T07:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-02T08:00</startTime>
        <endTime>2017-01-02T15:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-02T16:00</startTime>
        <endTime>2017-01-02T23:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-03T00:00</startTime>
        <endTime>2017-01-03T07:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-03T08:00</startTime>
        <endTime>2017-01-03T15:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-03T16:00</startTime>
        <endTime>2017-01-03T23:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-04T00:00</startTime>
        <endTime>2017-01-04T07:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-04T08:00</startTime>
        <endTime>2017-01-04T15:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-04T16:00</startTime>
        <endTime>2017-01-04T23:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-05T00:00</startTime>
        <endTime>2017-01-05T07:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-05T08:00</startTime>
        <endTime>2017-01-05T15:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
    <employeerostering.employeerostering.Shift>
      <timeslot>
        <startTime>2017-01-05T16:00</startTime>
        <endTime>2017-01-05T23:59</endTime>
      </timeslot>
      <requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
    </employeerostering.employeerostering.Shift>
  </shiftList>
  <skillList>
    <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
    <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill[2]"/>
    <employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
  </skillList>
  <timeslotList>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[2]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[3]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[4]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[5]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[6]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[7]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[8]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[9]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[10]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[11]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[12]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[13]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[14]/timeslot"/>
    <employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift[15]/timeslot"/>
  </timeslotList>
  <shiftAssignmentList>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[2]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[3]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[4]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[5]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[6]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[7]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[8]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[9]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[10]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[11]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[12]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[13]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[14]"/>
    </employeerostering.employeerostering.ShiftAssignment>
    <employeerostering.employeerostering.ShiftAssignment>
      <shift reference="../../../shiftList/employeerostering.employeerostering.Shift[15]"/>
    </employeerostering.employeerostering.ShiftAssignment>
  </shiftAssignmentList>
  <dayOffRequestList>
    <employeerostering.employeerostering.DayOffRequest>
      <employee reference="../../../employeeList/employeerostering.employeerostering.Employee"/>
      <date>2017-01-01</date>
    </employeerostering.employeerostering.DayOffRequest>
    <employeerostering.employeerostering.DayOffRequest>
      <employee reference="../../../employeeList/employeerostering.employeerostering.Employee[2]"/>
      <date>2017-01-02</date>
    </employeerostering.employeerostering.DayOffRequest>
  </dayOffRequestList>
</planning-problem>

收到响应:500 内部服务器错误

以下是从控制台捕获的日志。

 -------------------------------: com.thoughtworks.xstream.converters.ConversionException: 
---- Debugging information ----
cause-exception     : java.lang.IllegalStateException
cause-message       : Failed to convert string (2017-01-01 00:00) to type (java.time.LocalDateTime).
class               : java.time.LocalDateTime
required-type       : java.time.LocalDateTime
converter-type      : org.kie.soup.commons.xstream.LocalDateTimeXStreamConverter
path                : /planning-problem/shiftList/employeerostering.employeerostering.Shift/timeslot/startTime
line number         : 49
class[1]            : employeerostering.employeerostering.Timeslot
converter-type[1]   : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
class[2]            : employeerostering.employeerostering.Shift
class[3]            : java.util.ArrayList
converter-type[2]   : com.thoughtworks.xstream.converters.collections.CollectionConverter
class[4]            : employeerostering.employeerostering.EmployeeRoster
version             : 7.5.0.Final

问题出在给定的日期格式上。我通过反编译引起问题的罐子来解决问题。

实际上它期望的日期格式是:

<startTime>2017-01-01T16:00:01.001</startTime>

但我在很多例子中看到的是:

<startTime>2017-01-01T00:00</startTime>

我在 Optaplanner 7.9.0 上遇到了同样的问题,但错误不同

"Unexpected error during processing: Can't unmarshall input string"

提交的解决方案 xml 是从这篇 jboss 文章中复制的(如果使用上面的 xml,我会得到同样的错误)。