Since no one replied, I am posting the answer that worked for me along with the root cause and step-by-step procedure I used to debug the problem. Please do comment if there is a better way.
First, here is the complete and correct format for the REST Json request to insert an Applicant instance to the rules engine using drools-server when the model been defined in drools-guvnor GUI interface and not uploaded as a POJO model.
{
"batch-execution": {
"lookup":"ksession1",
"commands":[
{
"insert":{
"out-identifier":"outApplicant",
"return-object":"true",
"object": {
"mortgages.Applicant":{
"age":17
}
}
}
},
{
"fire-all-rules":""
}
]
}
}
Root cause: $TOMCAT_HOME/webapps/drools-server/WEB-INF/classes/knowledge-services.xml had incorrect resource.
The relevant parts of my corrected knowledge-services.xml:
<drools:grid-node id="node1"/>
<drools:kbase id="kbase1" node="node1">
<drools:resources>
<drools:resource
type="PKG"
source="http://localhost:8080/drools-guvnor/rest/packages/mortgages/binary"
basic-authentication="enabled"
username="admin"
password="admin"
/>
</drools:resources>
</drools:kbase>
Secondary issue: The authentication credentials were not specified in knowledge-services.xml which resulted in this error:
Exception: java.io.IOException: Servier returned HTTP response code: 401 for URL: http://localhost:8080/drools-guvnor/rest/packages/mortgages/binary
Third issue: The example mortgage package was not built as a binary package in Guvnor.
ERROR: java.io.lang.RunTimeException: jav.io.StreamCorruptionException: Invalid Stream Header
To fix: In Guvnor... Packages.. mortgages..Edit..build package
Additional note: INFO level logging is not enabled by default in drools-server. To enable extra logging, so that you can see detailed debug messages in $TOMCAT_HOME/logs/catalina.log follow these steps:
- Go to $TOMCAT_HOME/webapps/drools-server/WEB_INF/classes
- create a file logging.properties
add these lines:
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler
HTH