[jboss-jira] [JBoss JIRA] Commented: (JBRULES-1458) illegal access error in consequence

Godmar Back (JIRA) jira-events at lists.jboss.org
Wed Mar 12 11:41:58 EDT 2008


    [ http://jira.jboss.com/jira/browse/JBRULES-1458?page=comments#action_12402480 ] 
            
Godmar Back commented on JBRULES-1458:
--------------------------------------

Can you detect this when generating the proxy, then fail gracefully? If so, you should.



> illegal access error in consequence
> -----------------------------------
>
>                 Key: JBRULES-1458
>                 URL: http://jira.jboss.com/jira/browse/JBRULES-1458
>             Project: JBoss Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 4.0.4
>            Reporter: Godmar Back
>         Assigned To: Mark Proctor
>
> This test:
> package test;
> import java.util.Collections;
> dialect "mvel"
> rule "Rule #1"
> when
> then
>     insert(Collections.singletonMap("content", "hello"));
> end
> fails with:
> org.mvel.PropertyAccessException: unable to resolve property: drools.insert(Collections.singletonMap("content", "hello"))
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:276)
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:107)
>     at org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:32)
>     at org.mvel.ast.PropertyASTNode.initializePropertyNode(PropertyASTNode.java:71)
>     at org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:23)
>     at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
>     at org.mvel.CompiledExpression.getValue(CompiledExpression.java:107)
>     at org.mvel.MVEL.executeExpression(MVEL.java:223)
>     at org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:47)
>     at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)
>     at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:471)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:433)
>     at org.libx.autodetect.DroolsDriver$Host.fireAllRules(DroolsDriver.java:63)
>     at org.libx.autodetect.DroolsDriver.main(DroolsDriver.java:135)
> Caused by: java.lang.reflect.InvocationTargetException
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:588)
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:257)
>     ... 14 more
> Caused by: java.lang.IllegalAccessError: class org.drools.shadow.java.util.Collections$SingletonMapShadowProxy cannot access its superclass java.util.Collections$SingletonMap
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
>     at org.drools.rule.MapBackedClassLoader.fastFindClass(MapBackedClassLoader.java:60)
>     at org.drools.rule.MapBackedClassLoader.loadClass(MapBackedClassLoader.java:79)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>     at org.drools.reteoo.Rete$ClassObjectTypeConf.loadOrGenerateProxy(Rete.java:547)
>     at org.drools.reteoo.Rete$ClassObjectTypeConf.defineShadowProxyData(Rete.java:494)
>     at org.drools.reteoo.Rete$ClassObjectTypeConf.<init>(Rete.java:461)
>     at org.drools.reteoo.Rete.assertObject(Rete.java:152)
>     at org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)
>     at org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
>     at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
>     at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
>     at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:67)
>     at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:61)
>     ... 20 more
> Exception in thread "main" org.drools.spi.ConsequenceException: org.mvel.PropertyAccessException: unable to resolve property: drools.insert(Collections.singletonMap("content", "hello"))
>     at org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:14)
>     at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
>     at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:471)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:433)
>     at org.libx.autodetect.DroolsDriver$Host.fireAllRules(DroolsDriver.java:63)
>     at org.libx.autodetect.DroolsDriver.main(DroolsDriver.java:135)
> Caused by: org.mvel.PropertyAccessException: unable to resolve property: drools.insert(Collections.singletonMap("content", "hello"))
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:276)
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:107)
>     at org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:32)
>     at org.mvel.ast.PropertyASTNode.initializePropertyNode(PropertyASTNode.java:71)
>     at org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:23)
>     at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
>     at org.mvel.CompiledExpression.getValue(CompiledExpression.java:107)
>     at org.mvel.MVEL.executeExpression(MVEL.java:223)
>     at org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:47)
>     at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)
>     ... 5 more
> Caused by: java.lang.reflect.InvocationTargetException
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:588)
>     at org.mvel.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:257)
>     ... 14 more
> Caused by: java.lang.IllegalAccessError: class org.drools.shadow.java.util.Collections$SingletonMapShadowProxy cannot access its superclass java.util.Collections$SingletonMap
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
>     at org.drools.rule.MapBackedClassLoader.fastFindClass(MapBackedClassLoader.java:60)
>     at org.drools.rule.MapBackedClassLoader.loadClass(MapBackedClassLoader.java:79)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
>     at org.drools.reteoo.Rete$ClassObjectTypeConf.loadOrGenerateProxy(Rete.java:547)
>     at org.drools.reteoo.Rete$ClassObjectTypeConf.defineShadowProxyData(Rete.java:494)
>     at org.drools.reteoo.Rete$ClassObjectTypeConf.<init>(Rete.java:461)
>     at org.drools.reteoo.Rete.assertObject(Rete.java:152)
>     at org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)
>     at org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
>     at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
>     at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
>     at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:67)
>     at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:61)
>     ... 20 more
> ---
> I assume this is a bug, since this code works:
> package test;
> import java.util.Collections;
> import java.util.Map;
> import java.util.HashMap;
> dialect "mvel"
> rule "Rule #1"
> when
> then
>     m = new HashMap();
>     m.put("content", "hello");
>     insert(m);
> end
> rule "Rule #2"
> when
>     s : Map (this["content"] == "hello")
> then
>     System.out.println("found it: " + s);
> end
> which outputs:
> found it: {content=hello}
> I note that java.util.Collections.singletonMap is public static.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list