Marcus, can you please open a JIRA for us, anyway, so that we can improve that code spot to check for nulls? This will avoid such problems in the future.
If you want to contribute a patch, it is also welcome. Thanks. Edson 2008/5/19 Marcus Ilgner <[EMAIL PROTECTED]>: > Hi Edson, > > thank you very much for testing this! Since I could not discern any > differences between your approach and mine, I decided to resolve the > issue manually by inserting a work-around in my test routine which > sets the context class loader for the current thread before calling > the method under test. > > if (Thread.currentThread().getContextClassLoader() == null) { > > > Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); > } > > My guess is that the custom JUnit 4 class runner > (SpringJUnit4ClassRunner) somehow is responsible for the faulty > behaviour. > > Thanks again > Marcus > > > On Mon, May 19, 2008 at 3:09 PM, Edson Tirelli <[EMAIL PROTECTED]> wrote: > > > > All, > > > > I see that the code in that spot is weak and could be improved. > Although, > > using drools 4.0.7, I successfully created a junit 4 test that I paste > > bellow. Also, the whole drools code is tested with junit 3 and we have no > > problems. For instance, look at our integration tests here: > > > > > http://anonsvn.labs.jboss.com/labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/ > > > > The code I used to create the junit 4 test is based on the default > > example create by the drools plugin + the snippet you showed bellow: > > > > @Test > > public void testRuleBase() { > > try { > > > > //load up the rulebase > > RuleBase ruleBase = readRule(); > > StatefulSession workingMemory = > ruleBase.newStatefulSession(); > > > > //go ! > > Message message = new Message(); > > message.setMessage( "Hello World" ); > > message.setStatus( Message.HELLO ); > > workingMemory.insert( message ); > > workingMemory.fireAllRules(); > > workingMemory.dispose(); > > > > } catch (Throwable t) { > > t.printStackTrace(); > > Assert.fail("Something is wrong: "+t.getMessage()); > > } > > } > > > > /** > > * Please note that this is the "low level" rule assembly API. > > */ > > private RuleBase readRule() throws Exception { > > //read in the source > > Reader source = new InputStreamReader( > > DroolsTest.class.getResourceAsStream( "/Sample.drl" ) ); > > > > PackageBuilderConfiguration conf = new > > PackageBuilderConfiguration(); > > JavaDialectConfiguration javaConf = (JavaDialectConfiguration) > > conf.getDialectConfiguration("java"); > > javaConf.setCompiler(JavaDialectConfiguration.ECLIPSE); > > javaConf.setJavaLanguageLevel("1.5"); > > > > PackageBuilder builder = new PackageBuilder( conf ); > > builder.addPackageFromDrl( source ); > > > > RuleBase ruleBase = RuleBaseFactory.newRuleBase(); > > ruleBase.addPackage( builder.getPackage() ); > > return ruleBase; > > } > > > > Hope it helps, > > Edson > > > > > > 2008/5/19 Marcus Ilgner <[EMAIL PROTECTED]>: > >> > >> Hi list, > >> > >> I'm reviving this thread because I happen to have the same problem. > >> > >> On Sun, Mar 23, 2008 at 7:34 PM, Mike Dean <[EMAIL PROTECTED]> wrote: > >> > > >> > Thanks (months later!). I have cut down my code example below to show > >> > this > >> > issue more clearly: > >> > > >> > > >> > John J. Franey wrote: > >> >> > >> >> NullPointerException on line 146 means classLoader is null. That is > >> >> odd. > >> >> I have no idea why the code that gets classLoader won't work in > >> >> eclipse's > >> >> junit runtime, but does when run in your eclipse plugin. > >> > >> It seems indeed like during JUnit tests, the context classloader of > >> the thread gets not set (null). > >> > >> The code leading up to the problem is as follows: > >> PackageBuilderConfiguration conf = new PackageBuilderConfiguration(); > >> JavaDialectConfiguration javaConf = (JavaDialectConfiguration) > >> conf.getDialectConfiguration("java"); > >> javaConf.setCompiler(JavaDialectConfiguration.ECLIPSE); > >> javaConf.setJavaLanguageLevel("1.5"); > >> RuleBase ruleBase = RuleBaseFactory.newRuleBase(); > >> > >> The resulting stacktrace is: > >> java.lang.NullPointerException > >> at > >> > org.drools.RuleBaseConfiguration.instantiateClass(RuleBaseConfiguration.java:569) > >> at > >> > org.drools.RuleBaseConfiguration.determineConsequenceExceptionHandler(RuleBaseConfiguration.java:561) > >> at > >> org.drools.RuleBaseConfiguration.init(RuleBaseConfiguration.java:220) > >> at > >> org.drools.RuleBaseConfiguration.<init>(RuleBaseConfiguration.java:133) > >> at > >> org.drools.common.AbstractRuleBase.<init>(AbstractRuleBase.java:147) > >> at > org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:124) > >> at > org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:101) > >> at > org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:57) > >> at > org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:38) > >> > >> Has anyone set up Drools and JUnit successfully? Maybe we forgot to > >> set up the environment properly? > >> > >> Best regards > >> Marcus > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > -- Edson Tirelli JBoss Drools Core Development Office: +55 11 3529-6000 Mobile: +55 11 9287-5646 JBoss, a division of Red Hat @ www.jboss.com
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users