大家好,我是optaplanner的新手,所以在wildfly 11上安装了kie-wb和kie-server (7.9)的最新版本后,我正在尝试示例项目,以了解如何使用Optaplanner的功能。我安装了两个内置示例: optaCloud和Employee_rostering示例。首先,一切正常,安装、配置和部署到kie-server,并在REST客户端上使用SOAPUI调用rest api进行得很好(同时提交xml|json样本数据作为解决方案)。
对于第二个,安装和部署也是可以的,但是主要的问题是在官方文档中没有样本数据(xml|json),通过post提交给求解器以请求解决方案。
经过谷歌搜索,我终于在红帽网站(Employee Rostering sample)上找到了这篇文章……阅读这些内容,我可以看到它与我上面使用的kie-wb示例项目"Employee_rostering“中的示例(数据模型、数据对象和drl规则)是相同的。因此,我尝试使用本文中的xml数据示例向求解器提交解决方案请求。问题似乎出在这个xml示例数据上,实际上,当我使用此xml作为主体使用SOAPUI提交rest请求时,kie-server的响应是带有主体的500 Internal Server Error:
<data contentType="text/plain;charset=UTF-8" contentLength="2950">
<![CDATA["Unexpected error during processing: Can't unmarshall input string:
<employeerostering.employeerostering.EmployeeRoster>
<employeeList>
<employeerostering.employeerostering.Employee>
<name>John</name>
<skills>
....有谁有这方面的经验吗?如有任何建议/信息,欢迎光临。
谢谢
发布于 2018-08-10 00:34:54
解析的REST请求必须包含以下标头
authorization: Basic cGxhbm5lcjpQbGFubmVyMTIzXw==
X-KIE-ContentType: xstream
content-type: application/xml在SOAP-UI中,我添加了一个自定义的头X-KIE-ContentType: xstream (auth basic和content type已经可以了)。这是我成功提交给求解器的示例XML正文内容
<employeerostering.employeerostering.EmployeeRoster>
<employeeList>
<employeerostering.employeerostering.Employee>
<name>John</name>
<skills>
<employeerostering.employeerostering.Skill>
<name>reading</name>
</employeerostering.employeerostering.Skill>
</skills>
</employeerostering.employeerostering.Employee>
<employeerostering.employeerostering.Employee>
<name>Mary</name>
<skills>
<employeerostering.employeerostering.Skill>
<name>writing</name>
</employeerostering.employeerostering.Skill>
</skills>
</employeerostering.employeerostering.Employee>
<employeerostering.employeerostering.Employee>
<name>Petr</name>
<skills>
<employeerostering.employeerostering.Skill>
<name>speaking</name>
</employeerostering.employeerostering.Skill>
</skills>
</employeerostering.employeerostering.Employee>
</employeeList>
<shiftList>
<employeerostering.employeerostering.Shift>
<timeslot>
<startTime>2017-01-01T00:00:00</startTime>
<endTime>2017-01-01T01:00:00</endTime>
</timeslot>
<requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee/skills/employeerostering.employeerostering.Skill"/>
</employeerostering.employeerostering.Shift>
<employeerostering.employeerostering.Shift>
<timeslot reference="../../employeerostering.employeerostering.Shift/timeslot"/>
<requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[3]/skills/employeerostering.employeerostering.Skill"/>
</employeerostering.employeerostering.Shift>
<employeerostering.employeerostering.Shift>
<timeslot reference="../../employeerostering.employeerostering.Shift/timeslot"/>
<requiredSkill reference="../../../employeeList/employeerostering.employeerostering.Employee[2]/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[3]/skills/employeerostering.employeerostering.Skill"/>
<employeerostering.employeerostering.Skill reference="../../employeeList/employeerostering.employeerostering.Employee[2]/skills/employeerostering.employeerostering.Skill"/>
</skillList>
<timeslotList>
<employeerostering.employeerostering.Timeslot reference="../../shiftList/employeerostering.employeerostering.Shift/timeslot"/>
</timeslotList>
<dayOffRequestList/>
<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>
</shiftAssignmentList>
</employeerostering.employeerostering.EmployeeRoster>解决方案响应(以JSON格式):
{
"container-id": "employeerostering_1.0.0-SNAPSHOT",
"solver-id": "solver-1",
"solver-config-file": "employeerostering/employeerostering/EmployeeRosteringSolverConfig.solver.xml",
"status": "SOLVING",
"score": {
"value": "0hard/-2soft",
"scoreClass": "org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore"
},
"best-solution": {
"employeerostering.employeerostering.EmployeeRoster": {
"employeeList": [
{
"name": "John",
"skills": [
{
"name": "reading"
}
]
},
{
"name": "Mary",
"skills": [
{
"name": "writing"
}
]
},
{
"name": "Petr",
"skills": [
{
"name": "speaking"
}
]
}
],
"shiftList": [
{
"timeslot": {
"startTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
},
"endTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 1,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
},
"requiredSkill": {
"name": "reading"
}
},
{
"timeslot": {
"startTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
},
"endTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 1,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
},
"requiredSkill": {
"name": "speaking"
}
},
{
"timeslot": {
"startTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
},
"endTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 1,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
},
"requiredSkill": {
"name": "writing"
}
}
],
"skillList": [
{
"name": "reading"
},
{
"name": "speaking"
},
{
"name": "writing"
}
],
"timeslotList": [
{
"startTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
},
"endTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 1,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
}
],
"dayOffRequestList": [],
"shiftAssignmentList": [
{
"shift": {
"timeslot": {
"startTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
},
"endTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 1,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
},
"requiredSkill": {
"name": "reading"
}
},
"employee": {
"name": "John",
"skills": [
{
"name": "reading"
}
]
}
},
{
"shift": {
"timeslot": {
"startTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 0,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
},
"endTime": {
"dayOfYear": 1,
"dayOfWeek": "SUNDAY",
"dayOfMonth": 1,
"monthValue": 1,
"year": 2017,
"month": "JANUARY",
"hour": 1,
"minute": 0,
"second": 0,
"nano": 0,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}
},
"requiredSkill": {
"name": "speaking"
}
},
"employee": {
"name": "Petr",
"skills": [
{
"name": "speaking"
}
]
}
}
],
"score": "0hard/-2soft"
}
}
}https://stackoverflow.com/questions/51730096
复制相似问题