I'm trying to integrate Drools in one of my Applications. Due to lack of documentation available online I'm facing so many issues. Earlier I was struggling with the dependency issues but later on I resolved this using following gradle commands.
compile 'org.kie:kie-api:6.1.0.Final'
compile 'org.drools:drools-core:6.1.0.Final'
compile 'org.drools:drools-compiler:6.1.0.Final'
compile files('libs/drools-android-6.5.0.Final.jar')
compile files('libs/janino-3.0.7.jar')
Now the problem is to load drl files in which the actual rules are written. So as per the references I got to know that we need to use KieServices for this. So I have a myrule.drl file in the storage and using this service I'm trying to load the rule file but getting errors while doing the same. Sharing my code for better understanding.
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
// for each DRL file, referenced by a plain old path name:
String fileName = "myrule.drl";
FileInputStream fis = new FileInputStream( Environment.getExternalStorageDirectory()+"/Android/Data/"+fileName);
kfs.write( "src/main/resources/myrule.drl",
kieServices.getResources().newInputStreamResource( fis ) );
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() );
Here I'm getting exception while instantiating KieBuilder object. The exception is as follows -
java.lang.RuntimeException: Unable to instantiate object for class 'org.drools.android.DexPackageClassLoader' with constructor public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:272)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.rule.builder.dialect.java.JavaDialect.<init>(JavaDialect.java:187)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.compiler.PackageRegistry.<init>(PackageRegistry.java:55)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at com.example.admin23.droolstest.MainActivity.onCreate(MainActivity.java:128)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.Activity.performCreate(Activity.java:6876)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
06-05 09:57:25.059 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:221)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at android.os.Looper.loop(Looper.java:158)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7224)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at java.lang.reflect.Method.invoke(Native Method)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: Caused by: java.lang.reflect.InvocationTargetException
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at java.lang.reflect.Constructor.newInstance(Native Method)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:270)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: ... 29 more
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.android.MultiDexClassLoader.<init>(MultiDexClassLoader.java:70)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: at org.drools.android.DexPackageClassLoader.<init>(DexPackageClassLoader.java:44)
06-05 09:57:25.069 21955-21955/com.example.admin23.droolstest W/System.err: ... 31 more
One more thing here. if I'm changing my dependencies in the app gradle from 6.5.0.final to 6.1.0 final then I'm getting the following exception.
: FATAL EXCEPTION: main Process: com.example.admin23.droolstest, PID: 30886
java.lang.NoSuchFieldError: No static field UTF8_CHARSET of type Ljava/nio/charset/Charset; in class Lorg/drools/core/util/IoUtils; or its superclasses (declaration of 'org.drools.core.util.IoUtils' appears in /data/app/com.example.admin23.droolstest-2/base.apk:classes2.dex)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.getOrGeneratePomXml(KieBuilderImpl.java:495)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildPomModel(KieBuilderImpl.java:464)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.getPomModel(KieBuilderImpl.java:448)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:134)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:169)
at com.example.admin23.droolstest.MainActivity.onCreate(MainActivity.java:143)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Can anyone help me to sort this out as I have no idea what can I do to resolve this. Any help would be appreciable.
Thanks in advance.