protected void addPackage(Reader packageReader) { try { this.packageBuilder.addPackageFromDrl(packageReader); } catch (Exception e) { throw new RuntimeException(e); } PackageBuilderErrors errors = packageBuilder.getErrors(); if (errors.getErrors().length > 0) { StringBuilder errorMessages = new StringBuilder(); errorMessages.append("Found errors in package builder\n"); for (int i = 0; i < errors.getErrors().length; i++) { DroolsError errorMessage = errors.getErrors()[i]; errorMessages.append(errorMessage); errorMessages.append("\n"); } errorMessages.append("Could not parse knowledge"); throw new IllegalArgumentException(errorMessages.toString()); } } }
/** * @return A list of Error objects that resulted from building and compiling * the package. */ public PackageBuilderErrors getErrors() { List<DroolsError> errors = getErrorList(); return new PackageBuilderErrors( errors.toArray( new DroolsError[errors.size()] ) ); }
public PackageBuilderErrors(DroolsError[] errors) { super( errors.length ); this.errors = errors; for ( DroolsError error : errors ) { add( error ); } }
public Package[] getPackages() { Package[] pkgs = new Package[this.pkgRegistryMap.size()]; String errors = null; if (!getErrors().isEmpty()) { errors = getErrors().toString(); } int i = 0; for (PackageRegistry pkgRegistry : this.pkgRegistryMap.values()) { Package pkg = pkgRegistry.getPackage(); pkg.getDialectRuntimeRegistry().onBeforeExecute(); if (errors != null) { pkg.setError( errors ); } pkgs[i++] = pkg; } return pkgs; }
/** * @return The compiled package. The package may contain errors, which you * can report on by calling getErrors or printErrors. If you try to * add an invalid package (or rule) to a RuleBase, you will get a * runtime exception. * * Compiled packages are serializable. */ public Package getPackage() { PackageRegistry pkgRegistry = null; if (!this.pkgRegistryMap.isEmpty()) { pkgRegistry = (PackageRegistry) this.pkgRegistryMap.values().toArray()[ currentRulePackage ]; } Package pkg = null; if (pkgRegistry != null) { pkg = pkgRegistry.getPackage(); } if (hasErrors() && pkg != null) { pkg.setError( getErrors().toString() ); } return pkg; }
private RuleBase makeRuleBase(final PackageBuilder builder) throws CheckedDroolsException { if ( builder.hasErrors() ) { throw new CheckedDroolsException( "There were errors in the rule source: " + builder.getErrors().toString() ); } final Package binaryPackage = builder.getPackage(); final RuleBase rb = RuleBaseFactory.newRuleBase( RuleBaseLoader.engineType ); try { rb.addPackage( binaryPackage ); } catch ( final Exception e ) { throw new CheckedDroolsException( "Unable to add compiled package to rulebase. Nested error is: " + e.getMessage() ); } return rb; }
@Test public void testGeneratedBeansExtendsPOJOSimple() throws Exception { JarInputStream jis = new JarInputStream( this.getClass().getResourceAsStream( "/billasurf.jar" ) ); List<JarInputStream> jarInputStreams = new ArrayList<JarInputStream>(); jarInputStreams.add( jis ); BRMSPackageBuilder builder = new BRMSPackageBuilder( new Properties(), new ClassLoaderBuilder( jarInputStreams ).buildClassLoader() ); PackageDescr pc = new PackageDescr( "foo.bar" ); builder.addPackage( pc ); String header = "import com.billasurf.Person\n" + "declare Person \n" + "end\n"; builder.addPackageFromDrl( new StringReader( header ) ); assertFalse( builder.hasErrors() ); String rule1 = "rule foo \n" + "when \n" + "Person(age==27, name=='mike') \n" + "then \n" + "System.out.println(42);\n" + "end"; builder.addPackageFromDrl( new StringReader( rule1 ) ); if ( builder.hasErrors() ) { System.err.println( builder.getErrors().getErrors()[0].getMessage() ); } assertFalse( builder.hasErrors() ); assertEquals( "foo.bar", builder.getPackage().getName() ); }
/** * Return a wm ready to go based on the rules in a drl at the specified uri (in the classpath). */ public StatefulSession getWorkingMemory(String uri) throws DroolsParserException, IOException, Exception { PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl(new InputStreamReader(this.getClass() .getResourceAsStream(uri))); assertFalse(builder.getErrors().toString(), builder.hasErrors()); RuleBase rb = RuleBaseFactory.newRuleBase(); rb.addPackage(builder.getPackage()); SessionConfiguration conf = new SessionConfiguration(); conf.setClockType( ClockType.PSEUDO_CLOCK ); StatefulSession wm = rb.newStatefulSession( conf, null ); return wm; } }
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { SerializableDroolsError[] temp = (SerializableDroolsError[]) in.readObject(); this.errors = temp; for ( DroolsError error : temp ) { add( error ); } }
builder.addPackageFromDrl( new StringReader( rule1 ) ); if ( builder.hasErrors() ) { System.err.println( builder.getErrors().getErrors()[0].getMessage() );
@Test public void testGeneratedBeans() throws Exception { JarInputStream jis = new JarInputStream(this.getClass().getResourceAsStream("/billasurf.jar")); List<JarInputStream> jarInputStreams = new ArrayList<JarInputStream>(); jarInputStreams.add(jis); BRMSPackageBuilder builder = new BRMSPackageBuilder(new Properties(), new ClassLoaderBuilder(jarInputStreams).buildClassLoader()); builder.getPackageBuilderConfiguration().setDefaultPackageName( "foo.bar" ); PackageDescr pc = new PackageDescr("foo.bar"); builder.addPackage(pc); String header = "import com.billasurf.Person\n import com.billasurf.Board\n declare GenBean \n name: String \n end"; builder.addPackageFromDrl(new StringReader(header)); assertFalse(builder.hasErrors()); JavaDialectConfiguration javaConf = (JavaDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration("java"); assertEquals(JavaDialectConfiguration.ECLIPSE, javaConf.getCompiler()); String ruleAtom = "rule foo \n when \n Person() \n GenBean(name=='mike')\n then \n System.out.println(42); end"; builder.addPackageFromDrl(new StringReader(ruleAtom)); if (builder.hasErrors()) { System.err.println(builder.getErrors().getErrors()[0].getMessage()); } assertFalse(builder.hasErrors()); ruleAtom = "rule foo2 \n when \n Person() \n then \n System.out.println(42); end"; builder.addPackageFromDrl(new StringReader(ruleAtom)); if (builder.hasErrors()) { System.err.println(builder.getErrors().getErrors()[0].getMessage()); } assertFalse(builder.hasErrors()); assertEquals("foo.bar", builder.getPackage().getName()); }
builder.addPackageFromDrl( new StringReader( rule1 ) ); if ( builder.hasErrors() ) { System.err.println( builder.getErrors().getErrors()[0].getMessage() ); builder.addPackageFromDrl( new StringReader( rule2 ) ); if ( builder.hasErrors() ) { System.err.println( builder.getErrors().getErrors()[0].getMessage() );
for ( DroolsError error: builder.getErrors().getErrors() )
builder.addPackageFromDrl(new StringReader(ruleAtom)); if (builder.hasErrors()) { System.err.println(builder.getErrors().getErrors()[0].getMessage()); builder.addPackageFromDrl(new StringReader(ruleAtom)); if (builder.hasErrors()) { System.err.println(builder.getErrors().getErrors()[0].getMessage()); builder.addPackageFromDrl(new StringReader(functionAtom)); if (builder.hasErrors()) { System.err.println(builder.getErrors().getErrors()[0].getMessage());