protected KieBase createKnowledgeBaseFromDisc(String process) throws Exception { KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); KieFileSystem kfs = ks.newKieFileSystem(); Resource res = ResourceFactory.newClassPathResource(process); kfs.write(res); KieBuilder kb = ks.newKieBuilder(kfs); kb.buildAll(); // kieModule is automatically deployed to KieRepository if (kb.getResults().hasMessages(Level.ERROR)) { throw new RuntimeException("Build Errors:\n" + kb.getResults().toString()); KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); KieBase kbase = kContainer.getKieBase(); kfs.delete(res.getSourcePath()); kfs.write(ResourceFactory.newFileResource(packageFile)); kb = ks.newKieBuilder(kfs); kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); kbase = kContainer.getKieBase();
private KieBuilder build(String drl) { KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.write( kieServices.getResources().newByteArrayResource( drl.getBytes() ) .setSourcePath( "test.drl" ) .setResourceType( ResourceType.DRL ) ); KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ); kieBuilder.buildAll(); return kieBuilder; }
@Test public void testXXEProcessVulnerability() throws Exception { Resource processResource = ResourceFactory.newClassPathResource("xxe-protection/BPMN2-XXE-Process.bpmn2"); byte[] data = IoUtils.readBytesFromInputStream(processResource.getInputStream()); String processAsString = new String(data, "UTF-8"); processAsString = processAsString.replaceAll("@@PATH@@", path); Resource resource = ResourceFactory.newReaderResource(new StringReader(processAsString)); resource.setSourcePath(processResource.getSourcePath()); resource.setTargetPath(processResource.getTargetPath()); ProcessInstance processInstance = ksession.startProcess("async-examples.bp1");
protected static Resource buildResource(String resourceString, String targetPath) throws IOException { String content = readResourceToString(resourceString); Resource resource = kieServices.getResources().newReaderResource(new StringReader(content), "UTF-8"); resource.setTargetPath(targetPath); if (resourceString.endsWith(".java")) { resource.setResourceType(ResourceType.JAVA); } return resource; }
if (resource.getSourcePath() != null ) { String path = resource.getSourcePath(); String worksheetName = null; boolean replaceConfig = true; ResourceConfiguration config = resource.getConfiguration(); if( config != null && config instanceof DecisionTableConfiguration ) { DecisionTableInputType realType = DecisionTableInputType.valueOf(typeStr);
@Test public void testUntrustedJavaSalience() { String drl = "package org.foo.bar\n" + "import "+MaliciousExitHelper.class.getName().replace('$', '.')+" \n" + "rule R1 dialect \"java\" salience( MaliciousExitHelper.exit() ) \n" + "when\n" + "then\n" + "end\n"; try { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write(ResourceFactory.newByteArrayResource(drl.getBytes()) .setSourcePath("org/foo/bar/r1.drl")); ks.newKieBuilder(kfs).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); KieContainer kc = ks.newKieContainer(releaseId); KieSession ksession = kc.newKieSession(); ksession.fireAllRules(); Assert.fail("The security policy for the rule should have prevented this from executing..."); } catch (ShouldHavePrevented e) { Assert.fail("The security policy for the rule should have prevented this from executing..."); } catch (Exception e) { // test succeeded. the policy in place prevented the rule from executing the System.exit(). } }
" end\n"; final KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); KieModuleModel kmodule = ks.newKieModuleModel(); .setClockType(ClockTypeOption.get("pseudo")); kfs.writeKModuleXML(kmodule.toXML()); kfs.write( ResourceFactory.newByteArrayResource(drl.getBytes()) .setTargetPath("org/drools/compiler/integrationtests/"+this.getClass().getName()+".drl") ); assertTrue(ks.newKieBuilder(kfs).buildAll().getResults().getMessages().isEmpty()); ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); clock = ksession.getSessionClock(); myGlobal = new ArrayList<>(); ksession.setGlobal("myGlobal", myGlobal);
@Test public void testNPEOnMutableGlobal() throws Exception { // BZ-1019473 String str = "package org.drools.compiler\n" + "global java.util.List context\n" + "rule B\n" + " when\n" + " Message( message == \"b\" )\n" + " $s : String() from context\n" + " then\n" + " System.out.println($s);\n" + "end"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.write( ResourceFactory.newByteArrayResource( str.getBytes() ).setTargetPath( "org/drools/compiler/rules.drl" ) ); KieBuilder kbuilder = KieServices.Factory.get().newKieBuilder( kfs ); kbuilder.buildAll(); assertEquals( 0, kbuilder.getResults().getMessages().size() ); ks.newKieContainer( kbuilder.getKieModule().getReleaseId() ).getKieBase(); KieSession ksession = ks.newKieContainer( kbuilder.getKieModule().getReleaseId() ).newKieSession(); assertNotNull( ksession ); List<String> context = new ArrayList<>(); ksession.setGlobal( "context", context ); FactHandle b = ksession.insert( new Message( "b" ) ); ksession.delete( b ); int fired = ksession.fireAllRules( 1 ); assertEquals( 0, fired ); ksession.dispose(); }
@Override protected KieSession registerKnowledgeRuntime(String identifier, String rule) { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); KieResources kieResources = ks.getResources(); Options xjcOpts = new Options(); xjcOpts.setSchemaLanguage(Language.XMLSCHEMA); JaxbConfiguration jaxbConfiguration = KnowledgeBuilderFactory.newJaxbConfiguration(xjcOpts, "xsd"); kfs.write(kieResources.newClassPathResource("person.xsd", getClass()).setResourceType(ResourceType.XSD).setConfiguration(jaxbConfiguration)); if (rule != null && rule.length() > 0) { kfs.write("src/main/resources/rule.drl", rule); } KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll(); List<Message> errors = kieBuilder.getResults().getMessages(Message.Level.ERROR); if (!errors.isEmpty()) { fail("" + errors); } KieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); try { jndiContext.bind(identifier, ksession); } catch (NamingException e) { throw new RuntimeException(e); } return ksession; }
@Test public void testHelloWorldWithResource() throws Exception { // DROOLS-351 KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( ks.getResources() .newReaderResource( new StringReader( createDrl( "R1" ) ) ) .setResourceType( ResourceType.DRL ) .setSourcePath( "src/main/resources/r1.txt" ) ); ks.newKieBuilder( kfs ).buildAll(); KieSession ksession = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()).newKieSession(); ksession.insert(new Message("Hello World")); int count = ksession.fireAllRules(); assertEquals( 1, count ); }
KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); kfs.generateAndWritePomXML( ks.newReleaseId( "test", "foo", "1.0" ) ); KieModuleModel km = ks.newKieModuleModel(); km.newKieBaseModel( "rules" ) .addPackage( "org.drools.compiler.test2" ) .addPackage( "org.drools.compiler.test1" ); kfs.writeKModuleXML( km.toXML() ); KieResources kr = ks.getResources(); Resource r1 = kr.newByteArrayResource( pkg1.getBytes() ) .setResourceType( ResourceType.DRL ) .setSourcePath( "org/drools/compiler/test1/p1.drl" ); Resource r2 = kr.newByteArrayResource( pkg2.getBytes() ) .setResourceType( ResourceType.DRL ) .setSourcePath( "org/drools/compiler/test2/p2.drl" ); kfs.write( r1 ); kfs.write( r2 ); KieBuilder builder = ks.newKieBuilder( kfs ); builder.buildAll(); assertEquals( Collections.emptyList(), builder.getResults().getMessages( Message.Level.ERROR ) ); KieContainer kc = ks.newKieContainer(builder.getKieModule().getReleaseId()); FactType ft = kc.getKieBase( "rules" ).getFactType( "org.drools.compiler.test2", "Child" );
" // do something;\n" + "end"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem(); final Resource drl = ks.getResources().newByteArrayResource( drlString.getBytes() ).setTargetPath("org/jboss/brms/lifecycle.drl"); kfs.write(drl); KieModuleModel kmoduleModel = ks.newKieModuleModel(); kmoduleModel.newKieBaseModel("defaultKBase") .addPackage("*") .setClockType(ClockTypeOption.get("pseudo")); kfs.writeKModuleXML(kmoduleModel.toXML()); KieBuilder builder = ks.newKieBuilder(kfs).buildAll(); assertEquals(0, builder.getResults().getMessages().size()); this.kieSession = ks.newKieContainer(ks.getRepository() .getDefaultReleaseId()).newKieSession();
" end"; final KieServices kieServices = KieServices.get(); final Resource drlResource = kieServices.getResources().newByteArrayResource( rule.getBytes(StandardCharsets.UTF_8.name()), StandardCharsets.UTF_8.name()); drlResource.setResourceType(ResourceType.DRL); drlResource.setTargetPath("test.drl"); final KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); kieFileSystem.write(drlResource); final KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); final KieBase kieBase = kieServices.newKieContainer(kieBuilder.getKieModule().getReleaseId()).getKieBase(); assertThat(kieSession.fireAllRules()).isEqualTo(1);
@Test public void testMissingTreeAllMissingDefault() throws Exception { PMML4Compiler compiler = new PMML4Compiler(); PMML pmml = compiler.loadModel( PMML, ResourceFactory.newClassPathResource( source2 ).getInputStream() ); setKbase( getKSession().getKieBase() ); kSession.fireAllRules(); //init model FactType tgt = kSession.getKieBase().getFactType( packageName, "Fld9" ); FactType tok = kSession.getKieBase().getFactType( PMML4Helper.pmmlDefaultPackageName(), "TreeToken" );
"</kmodule>"; final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final Resource r1 = ResourceFactory.newByteArrayResource( drl1.getBytes() ).setResourceType( ResourceType.DRL ).setSourcePath( "kbase1/drl1.drl" ); final Resource r2 = ResourceFactory.newByteArrayResource( drl2.getBytes() ).setResourceType( ResourceType.GDRL ).setSourcePath( "kbase1/drl2.gdrl" ); final Resource r3 = ResourceFactory.newByteArrayResource( drl3.getBytes() ).setResourceType( ResourceType.RDRL ).setSourcePath( "kbase1/drl3.rdrl" ); final Resource r4 = ResourceFactory.newByteArrayResource( drl4.getBytes() ).setResourceType( ResourceType.TDRL ).setSourcePath( "kbase1/drl4.tdrl" ); final KieModule km = createAndDeployJar( ks, kmodule, assertNotNull( ikm.getResource( r1.getSourcePath() ) ); assertNotNull( ikm.getResource( r2.getSourcePath() ) ); assertNotNull( ikm.getResource( r3.getSourcePath() ) ); assertNotNull( ikm.getResource( r4.getSourcePath() ) ); final KieContainer kc = ks.newKieContainer( km.getReleaseId() ); final KieSession ksession = kc.newKieSession(); ksession.insert( new Message( "Hello World" ) ); assertEquals( 2, ksession.fireAllRules() ); ksession.dispose();
@Test public void testMultipleKBaseWithDrlError() { // RHBRMS-2651 final String drl = "package org.drools.compiler;\n" + "rule \"test\"\n" + " when\n" + " Smurf\n" + " then\n" + "end"; final KieServices ks = KieServices.Factory.get(); final KieModuleModel kproj = ks.newKieModuleModel(); kproj.newKieBaseModel( "kbase1" ).newKieSessionModel( "ksession1" ).setDefault( true ); kproj.newKieBaseModel( "kbase2" ).newKieSessionModel( "ksession2" ); final ReleaseId releaseId = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML( releaseId ).writeKModuleXML( kproj.toXML() ); final Resource drlResource = ResourceFactory.newByteArrayResource( drl.getBytes() ).setResourceType( ResourceType.DRL ) .setSourcePath( "kbase1/drl1.drl" ); kfs.write( "src/main/resources/org/drools/compiler/drl1.drl", drlResource ); final KieBuilder kb = ks.newKieBuilder( kfs ).buildAll(); final List<org.kie.api.builder.Message> messages = kb.getResults().getMessages( org.kie.api.builder.Message.Level.ERROR ); assertEquals( 4, messages.size() ); assertTrue( messages.get(0).toString().contains( "kbase1" ) ); assertTrue( messages.get(1).toString().contains( "kbase1" ) ); assertTrue( messages.get(2).toString().contains( "kbase2" ) ); assertTrue( messages.get(3).toString().contains( "kbase2" ) ); }
"</kmodule>"; final KieServices ks = KieServices.Factory.get(); final ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-kie-builder", "1.0.0" ); final Resource javaResource = ResourceFactory.newByteArrayResource( java.getBytes() ).setResourceType( ResourceType.JAVA ) .setSourcePath( "org/drools/compiler/JavaSourceMessage.java" ); final Resource drlResource = ResourceFactory.newByteArrayResource( drl.getBytes() ).setResourceType( ResourceType.DRL ) .setSourcePath( "kbase1/drl1.drl" ); final KieModule km = createAndDeployJar( ks, kmodule, javaResource, drlResource); final KieContainer kieContainer = ks.newKieContainer(km.getReleaseId()); try { final Class<?> messageClass = kieContainer.getClassLoader().loadClass("org.drools.compiler.JavaSourceMessage"); assertNotNull(messageClass); } catch (final ClassNotFoundException e) {
@Test public void testSerializationUntrustedMvelConsequence() { String drl = "package org.foo.bar\n" + "rule R1 dialect \"mvel\" when\n" + "then\n" + " System.exit(0);" + "end\n"; try { KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write(ResourceFactory.newByteArrayResource(drl.getBytes()) .setSourcePath("org/foo/bar/r1.drl")); ks.newKieBuilder(kfs).buildAll(); ReleaseId releaseId = ks.getRepository().getDefaultReleaseId(); KieContainer kc = ks.newKieContainer(releaseId); KieBase kbase = kc.getKieBase(); kbase = SerializationHelper.serializeObject( kbase ); } catch (Exception e) { e.printStackTrace(); Assert.fail(e.toString()); // test succeeded. the policy in place prevented the rule from executing the System.exit(). } }
@Test public void testKJarUpgradeWithJavaClass() throws Exception { KieServices ks = KieServices.Factory.get(); ReleaseId releaseId1 = ks.newReleaseId( "org.kie", "test-upgrade-java", "1.0.0" ); Resource javaResource = ResourceFactory.newByteArrayResource(javaSrc.getBytes()).setResourceType( ResourceType.JAVA ) .setSourcePath( "org/drools/compiler/test/PersonObject.java" ); Resource drlResource = ResourceFactory.newByteArrayResource( person_drl.getBytes() ).setResourceType( ResourceType.DRL ) .setSourcePath( "kbase1/person.drl" ); KieModule km = createAndDeployJar( ks, kmodule, releaseId1, javaResource, drlResource ); kieContainer = ks.newKieContainer( km.getReleaseId() ); ksession = kieContainer.newKieSession(); Class<?> clazz = kieContainer.getClassLoader().loadClass("org.drools.compiler.test.PersonObject"); Object person = clazz.newInstance(); assertEquals("Person from version 1", personId); ReleaseId releaseId2 = ks.newReleaseId( "org.kie", "test-upgrade-java", "1.1.0" ); Resource javaResource2 = ResourceFactory.newByteArrayResource(javaSrc_2.getBytes()).setResourceType( ResourceType.JAVA ) .setSourcePath( "org/drools/compiler/test/PersonObject.java" ); Resource drlResource2 = ResourceFactory.newByteArrayResource( person_drl.getBytes() ).setResourceType( ResourceType.DRL ) .setSourcePath( "kbase1/person.drl" ); createAndDeployJar( ks, kmodule, releaseId2, javaResource2, drlResource2 ); person = kieContainer.getClassLoader().loadClass("org.drools.compiler.test.PersonObject").newInstance();
@Test public void testKieFileLogger() throws Exception { String drl = "package org.drools.integrationtests\n" + "import org.drools.compiler.Message;\n" + "rule \"Hello World\"\n" + " when\n" + " m : Message( myMessage : message )\n" + " then\n" + "end"; // get the resource Resource dt = ResourceFactory.newByteArrayResource(drl.getBytes()).setTargetPath( "org/drools/integrationtests/hello.drl" ); // create the builder KieSession ksession = getKieSession(dt); String fileName = "target/testKieFileLogger"; File file = new File(fileName + ".log"); if( file.exists() ) { file.delete(); } KieRuntimeLogger logger = KieServices.Factory.get().getLoggers().newFileLogger( ksession, fileName ); ksession.insert(new Message("Hello World")); int fired = ksession.fireAllRules(); assertEquals( 1, fired ); logger.close(); file = new File( fileName + ".log" ); assertTrue( file.exists() ); assertTrue( file.length() > 0 ); file.delete(); }