I am using drools decision tables in my java project. This project is added into another spring maven project as a dependency. Following code is working fine in localhost. But when I deploy my Spring project in remote server it gives following exception. In my Drools project, rules1.xls & rules2.xls files are including as resources inside src/main/resources folder.
package com.my.project;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.Message;
import org.kie.api.builder.Results;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import com.codegen.rm.drools.model.BusinessDetail;
public class MarkupCalculation
{
public void runAlgorithm( BusinessDetail businessDetail, int algoId )
{
String ruleName;
if ( algoId == 1 ) // First Algorithm
{
ruleName = "rules1.xls";
}
else
{ // second algorithm
ruleName = "rules2.xls";
}
try
{
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
kfs.write( kieServices.getResources().newClassPathResource( ruleName ) );
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
Results results = kieBuilder.getResults();
if ( results.hasMessages( Message.Level.ERROR ) )
{
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
}
KieContainer kieContainer = kieServices
.newKieContainer( kieServices.getRepository().getDefaultReleaseId() );
// KieBase kieBase = kieContainer.getKieBase();
KieSession kieSession = kieContainer.newKieSession();
kieSession.insert( businessDetail );
kieSession.fireAllRules();
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
Exception
May 17, 2016 11:55:56 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/BackEnd] threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.drools.core.util.IoUtils.readBytesFromInputStream(Ljava/io/InputStream;)[B] with root cause
java.lang.NoSuchMethodError: org.drools.core.util.IoUtils.readBytesFromInputStream(Ljava/io/InputStream;)[B
at org.drools.compiler.kie.builder.impl.KieFileSystemImpl.write(KieFileSystemImpl.java:73)
My drools project is added into other java project as a jar.
Any suggestion would be appreciated.