2

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.

Salman Khan
  • 2,822
  • 5
  • 32
  • 53
  • There is a _dedicated_ chapter in the documentation called "Chapter 14. Android Integration", it could help as a reference. Or could you kindly highlight which part of Drools API allegedly reported as "lacking" from the same doc? Anyway, hope this helps! – tarilabs May 31 '17 at 06:52
  • @tarilabs Thanks for the reply but I have already checked this documentation. Theoretically it helps but implementation wise there is not much stuff present. – Salman Khan May 31 '17 at 07:17
  • without a concrete indication of what is missing and just a generic "there is not much stuff", is difficult for others to help, or to amend corrections as needed. Anyway, I just wanted to hopefully provide an helpful reference with examples (as from the doc mentioned in my prev comment) – tarilabs May 31 '17 at 09:50
  • Thanks for the help and I have already mentioned the error I'm getting while creating KieBuilder Object. I need to resolve this to load my drl file. – Salman Khan May 31 '17 at 09:53

0 Answers0