private XStream getXStream() { XStream xstream = createXStream(); if (classLoader != null) { xstream.setClassLoader(classLoader); if (classLoader instanceof ProjectClassLoader ) { Map<String, byte[]> store = ((ProjectClassLoader) classLoader).getStore(); if (store != null) { String[] classes = store.keySet().stream() .map( s -> s.replace( '/', '.' ) ) .map( s -> s.endsWith( ".class" ) ? s.substring( 0, s.length() - ".class".length() ) : s ) .toArray( String[]::new ); xstream.addPermission( new ExplicitTypePermission( classes ) ); } } } return xstream; }
public void shareStoreWithMap(ClassLoader classLoader, String compilationID, Map<String, Object> kieMap, Log log) { if (classLoader instanceof ProjectClassLoader) { ProjectClassLoader projectClassloder = (ProjectClassLoader) classLoader; Map<String, byte[]> types = projectClassloder.getStore(); if (projectClassloder.getStore() != null) { StringBuilder sbTypes = new StringBuilder(compilationID).append(".").append("ProjectClassloaderStore"); kieMap.put(sbTypes.toString(), types); log.info("ProjectClassloader Store available in the map shared with the Maven Embedder"); } } }
public void shareStoreWithMap(ClassLoader classLoader, String compilationID, Map<String, Object> kieMap, Log log) { if (classLoader instanceof ProjectClassLoader) { ProjectClassLoader projectClassloder = (ProjectClassLoader) classLoader; Map<String, byte[]> types = projectClassloder.getStore(); if (projectClassloder.getStore() != null) { StringBuilder sbTypes = new StringBuilder(compilationID).append(".").append("ProjectClassloaderStore"); kieMap.put(sbTypes.toString(), types); log.info("ProjectClassloader Store available in the map shared with the Maven Embedder"); } } }
@Test public void testClassLoaderStore() throws Exception { // DROOLS-1766 String drl = "package org; declare Person name : String end"; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", drl ); ks.newKieBuilder( kfs ).buildAll(); KieContainer kcontainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId()); KieProject kieProject = (( KieContainerImpl ) kcontainer).getKieProject(); ResultsImpl messages = kieProject.verify(); assertSame( kieProject.getClassLoader(), kcontainer.getClassLoader() ); ProjectClassLoader pcl = (( ProjectClassLoader ) kieProject.getClassLoader()); assertNotNull( pcl.getStore().get("org/Person.class") ); }
private XStream getXStream() { XStream xstream = createXStream(); if (classLoader != null) { xstream.setClassLoader(classLoader); if (classLoader instanceof ProjectClassLoader ) { Map<String, byte[]> store = ((ProjectClassLoader) classLoader).getStore(); if (store != null) { String[] classes = store.keySet().stream() .map( s -> s.replace( '/', '.' ) ) .map( s -> s.endsWith( ".class" ) ? s.substring( 0, s.length() - ".class".length() ) : s ) .toArray( String[]::new ); xstream.addPermission( new ExplicitTypePermission( classes ) ); } } } return xstream; }