Drools Android整合 [英] Drools Android Integration

查看:160
本文介绍了Drools Android整合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Android中的流口水实现,陷入一个问题

I am working on drools implementation in android, stuck in an issue


java.lang.RuntimeException:无法启动活动ComponentInfo { com.decurtis.drooldemo / com.decurtis.drooldemo.MainActivity}:无法使用构造函数public org.drools.android.DexPackageClassLoader(org.drools)为类 org.drools.android.DexPackageClassLoader实例化对象。 .core.rule.JavaDialectRuntimeData,java.lang.ClassLoader)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) )
在android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460)在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper .java:154)android.app.ActivityThread.main(ActivityThread.java:6077)
(java.lang.reflect.Method.invoke(本机方法)
(com.android) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
原因:java.lang.RuntimeException:无法使用构造函数public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader实例化类'org.drools.android.DexPackageClassLoader'的对象。 )
在org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:272)
在org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618)
在org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243)
在org.drools.compiler.rule.builder.dialect.java.JavaDialect。(JavaDialect.java:187)
在org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91)处
在org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392)
在org.drools.compiler.compiler.PackageRegistry。(PackageRegistry.java:55)
在org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571)
在org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044)
在org.d rools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl $ 297): drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105) drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244)
在org.drools .compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)
在org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)
在org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
在com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81)
在com .decurtis.drooldemo.MainActivity.onCreate(MainActivity.java:41)
在android.app.Activity.performCreate(Activity.java:6662)
在android.app.Instrumentation.cal lActivityOnCreate(Instrumentation.java:1118)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
在android.app.ActivityThread.-wrap12(ActivityThread.java)处
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460)在android.os.Handler.dispatchMessage(Handler。 java:102)
在android.os.Looper.loop(Looper.java:154)
在android.app.ActivityThread.main(ActivityThread.java:6077)处
在java.lang.reflect.Method.invoke(本机方法)处
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller处。运行(ZygoteInit.java:866)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
由:java.lang.reflect.InvocationTargetException
在java.lang.reflect.Constructor.newInstance0(本机方法)
在java.lang.reflect.Constructor.newInstance(Constructor.java:430)
在org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:270)
在org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618)在org.drools的
.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243)
在org.drools.compiler.rule.builder.dialect.java.JavaDialect。(JavaDialect.java:187)在组织中的
。 drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91)
在org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectR egistry(KnowledgeBuilderConfigurationImpl.java:392)
在org.drools.compiler.compiler.PackageRegistry。(PackageRegistry.java:55)
在org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilder .java:1571)org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044)中的
org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(knowledgebuilderImpl.java:1044) .java:1015)
在org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297)
在org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116)上
在org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgebower105)在org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244)处
在org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)
在org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)在org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
在com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81)
在com .decurtis.drooldemo.MainActivity.onCreate(MainActivity.java:41)
在android.app.Activity.performCreate(Activity.java:6662)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java :1118)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)中的
android.app.Acti中的
vityThread.handleLaunchActivity(ActivityThread.java:2707)
在android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460)$ android.os.Handler.dispatchMessage(Handler.java:102)的b $ b android.os.Looper.loop(Looper.java:154)的
android.app.ActivityThread.main的
ActivityThread.java:6077)java.lang.reflect.Method.invoke(native method)的
com.androi的
d.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
造成原因:java。 lang.NullPointerException:尝试在org.drools.android.MultiDexClassLoader上的空对象引用
上调用虚拟方法'java.lang.String java.io.File.getAbsolutePath()'。(MultiDexClassLoader.java:70)
07-27 04:43:48.294 16631-16631 / com.decurtis.drooldemo E / AndroidRuntime:at org.drools.android.DexPackageClassLoader。(DexPackageClassLoader.java:44)

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.decurtis.drooldemo/com.decurtis.drooldemo.MainActivity}: 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) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) Caused by: 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) at org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:272) at org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618) at org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243) at org.drools.compiler.rule.builder.dialect.java.JavaDialect.(JavaDialect.java:187) at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91) at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392) at org.drools.compiler.compiler.PackageRegistry.(PackageRegistry.java:55) at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571) at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044) at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105) at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244) at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64) at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230) at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198) at com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81) at com.decurtis.drooldemo.MainActivity.onCreate(MainActivity.java:41) at android.app.Activity.performCreate(Activity.java:6662) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6077)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:430) at org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:270) at org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618)  at org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243)  at org.drools.compiler.rule.builder.dialect.java.JavaDialect.(JavaDialect.java:187)  at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91)  at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392)  at org.drools.compiler.compiler.PackageRegistry.(PackageRegistry.java:55)  at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571)  at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044)  at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015)  at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297)  at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116)  at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105)  at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244)  at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64)  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230)  at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)  at com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81)  at com.decurtis.drooldemo.MainActivity.onCreate(MainActivity.java:41)  at android.app.Activity.performCreate(Activity.java:6662)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6077)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference at org.drools.android.MultiDexClassLoader.(MultiDexClassLoader.java:70) 07-27 04:43:48.294 16631-16631/com.decurtis.drooldemo E/AndroidRuntime: at org.drools.android.DexPackageClassLoader.(DexPackageClassLoader.java:44)

代码:我使用的是Drools 6.5.0版本,并且遇到上述错误。

Code : I am using drools 6.5.0 version and getting above error.

KieServices   ks  = KieServices.Factory.get();
    KieRepository kr  = ks.getRepository();
    KieFileSystem kfs = ks.newKieFileSystem();
    kfs.write(ResourceFactory.newClassPathResource("rules/Fire.drl", Fire.class));
    KieBuilder kb = ks.newKieBuilder(kfs);
    kb.buildAll(); // kieModule is automatically deployed to KieRepository if successfully built.
    if (kb.getResults().hasMessages(Message.Level.ERROR)) {
        throw new RuntimeException("Build Errors:\n" + kb.getResults().toString());
    }

    KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());

    KieSession kSession = kContainer.newKieSession();

    System.out.println("Fire All Rules...");
    kSession.fireAllRules();
    kSession.dispose();

有没有人遇到此错误,请帮帮我吗?

Have anyone experience this error, plz help me in out?

推荐答案

对于上述异常,请将Janino添加到您的类路径中。

For the above exception add Janino to your classpath.

Imp:
drools-android使用的依赖项仅在API级别21之前有效。发布到它们所需的本机API已被Android阻止。您可以在具有Android 5.1版的手机上测试此应用程序,并且该应用程序应该可以正常工作。发布我也在寻找解决方案的帖子

Imp: It seems that the dependencies that drools-android uses only work till API level 21. Post to that the native API they need has been blocked by Android. You can test this application on a phone with Android version 5.1 and it should work. Post that I too am searching for a solution

这篇关于Drools Android整合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆