@Before public void setUp() throws Exception{ when(kieModuleMetaData.getPackages()).thenReturn(Arrays.asList("org.kie.workbench.common.services.backend.builder")); when(kieModuleMetaData.getClasses("org.kie.workbench.common.services.backend.builder")).thenReturn(Arrays.asList("SomeClass")); when(kieModuleMetaData.getClass("org.kie.workbench.common.services.backend.builder", "SomeClass")).thenThrow( new IllegalAccessError("The access to the class is not allowed")); }
private void addClass(final String packageName, final String className) { try { final Class clazz = kieModuleMetaData.getClass(packageName, className); pdBuilder.addClass(clazz, kieModuleMetaData.getTypeMetaInfo(clazz).isEvent(), typeSourceResolver.getTypeSource(clazz)); } catch (Throwable e) { //Class resolution would have happened in Builder and reported as warnings so log error here at debug level to avoid flooding logs log.debug(e.getMessage()); } }
/** * This method and the subsequent caching was added for performance reasons, since the dependencies calculation and * module class loader calculation tends to be time consuming when we manage module with transitives dependencies. * Since the module ClassLoader may change with ever incremental build it's better to store in the cache the * ClassLoader part that has the module dependencies. And the module ClassLoader can be easily calculated using * this ClassLoader as parent. Since current module classes are quickly calculated on each incremental build, etc. */ public static ClassLoader buildClassLoader(final KieModule module, final KieModuleMetaData kieModuleMetaData) { //By construction the parent class loader for the KieModuleMetadata.getClassLoader() is an URLClass loader //that has the module dependencies. So this implementation relies on this. BUT can easily be changed to //calculate this URL class loader given that we have the pom.xml and we can use maven libraries classes //to calculate module maven dependencies. This is basically what the KieModuleMetaData already does. The //optimization was added to avoid the maven transitive calculation on complex modules. final ClassLoader classLoader = kieModuleMetaData.getClassLoader().getParent(); if (classLoader instanceof URLClassLoader) { return classLoader; } else { //this case should never happen. But if ProjectClassLoader calculation for KieModuleMetadata changes at //the error will be notified for implementation review. throw new RuntimeException("It was not possible to calculate project dependencies class loader for project: " + module.getKModuleXMLPath()); } }
public List<BuildMessage> verify(WhiteList whiteList) { for (final String packageName : kieModuleMetaData.getPackages()) { if (whiteList.contains(packageName)) { for (final String className : kieModuleMetaData.getClasses(packageName)) { verifyClass(packageName, className); } } } return buildMessages; }
for ( final String packageName : metaData.getPackages() ) { for ( final String className : metaData.getClasses( packageName ) ) { final Class clazz = metaData.getClass( packageName, className ); final TypeMetaInfo typeMetaInfo = metaData.getTypeMetaInfo( clazz ); try { pdBuilder.addClass( clazz,
/** * @return A "white list" of package names that are available for authoring */ private WhiteList getFilteredPackageNames() { return packageNameWhiteListService.filterPackageNames(project, kieModuleMetaData.getPackages()); }
private void addFromKieModuleMetadata() { for (final String packageName : getFilteredPackageNames()) { pdBuilder.addPackage(packageName); addClasses(packageName, kieModuleMetaData.getClasses(packageName)); } }
private boolean isDeclaredInDRL(final Class<?> clazz) { return kieModuleMetaData.getTypeMetaInfo(clazz).isDeclaredType(); }
private void verifyClass(final String packageName, final String className) { try { final Class clazz = kieModuleMetaData.getClass(packageName, className); if (clazz != null) { if (TypeSource.JAVA_DEPENDENCY == typeSourceResolver.getTypeSource(clazz)) { verifyExternalClass(clazz); } } else { logger.warn(MessageFormat.format(ERROR_EXTERNAL_CLASS_VERIFICATION, toFQCN(packageName, className))); } } catch (Throwable e) { final String msg = MessageFormat.format(ERROR_EXTERNAL_CLASS_VERIFICATION, toFQCN(packageName, className), e.getMessage()); logger.warn(msg); logger.debug("This state is usually encountered when the Project references a class not on the classpath; e.g. in a Maven 'provided' scope or 'optional' dependency.", e); buildMessages.add(makeWarningMessage(msg)); } }
@Test public void testKieModuleMetaDataGetProcesses() throws Exception { final KieModuleMetaData kieModuleMetaData = KieModuleMetaData.Factory.newKieModuleMetaData( releaseId ); assertNotNull(kieModuleMetaData); assertFalse( kieModuleMetaData.getProcesses().isEmpty() ); assertTrue( kieModuleMetaData.getProcesses().containsKey("humanTaskWithOwnType.bpmn" ) ); }
metaData.getPackages().size() ); final String packageName = metaData.getPackages().iterator().next(); assertEquals( "org.kie.test", packageName ); metaData.getClasses( packageName ).size() ); final String className = metaData.getClasses( packageName ).iterator().next(); assertEquals( "Bean", className ); final Class clazz = metaData.getClass( packageName, className ); final TypeMetaInfo typeMetaInfo = metaData.getTypeMetaInfo( clazz ); assertNotNull( typeMetaInfo ); assertFalse( typeMetaInfo.isEvent() );
Collection<String> packages = metaData.getPackages(); Collection<String> classes = metaData.getClasses(p);
private WhiteList getWhiteList(final KieModuleMetaData kieModuleMetaData) { return packageNameWhiteListService.filterPackageNames(project, kieModuleMetaData.getPackages()); }
try { KieModuleMetaData metaData = (KieModuleMetaData) parameters.get(KieServerConstants.KIE_SERVER_PARAM_MODULE_METADATA); if (metaData.getProcesses() == null || metaData.getProcesses().isEmpty()) { logger.info("Container {} does not include processes, {} skipped", id, this); return;
final Iterator<String> packageNameIterator = metaData.getPackages().iterator(); while (packageNameIterator.hasNext()) { packageNames.add(packageNameIterator.next()); metaData.getClasses(packageName).size()); final String className = metaData.getClasses(packageName).iterator().next(); assertEquals("Bean", className); final Class clazz = metaData.getClass(packageName, className); final TypeMetaInfo typeMetaInfo = metaData.getTypeMetaInfo(clazz); assertNotNull(typeMetaInfo); assertFalse(typeMetaInfo.isEvent());
Collection<String> packages = metaData.getPackages(); Collection<String> classes = metaData.getClasses(p);
@Override public String[] loadDropDownExpression(final Path resource, final String[] valuePairs, final String expression) { //Lookup class-loader for Module (as the helper class can be a module dependency) final KieModule module = moduleService.resolveModule(resource); if (module == null) { logger.error("A Module could not be resolved for path '" + resource.toURI() + "'. No enums will be returned."); return null; } final org.kie.api.builder.KieModule kieModule = buildInfoService.getBuildInfo(module).getKieModuleIgnoringErrors(); if (kieModule == null) { logger.error("A KieModule could not be resolved for path '" + resource.toURI() + "'. No enums will be returned."); return null; } final ClassLoader classLoader = KieModuleMetaData.Factory.newKieModuleMetaData(kieModule).getClassLoader(); return loadDropDownExpression(classLoader, mvelEvaluator, valuePairs, expression); }
metaData.getPackages().size() ); final String packageName = metaData.getPackages().iterator().next(); assertEquals( "org.kie.workbench.common.services.builder.tests.test1", packageName ); metaData.getClasses( packageName ).size() ); final String className = metaData.getClasses( packageName ).iterator().next(); assertEquals( "Bean", className ); final Class clazz = metaData.getClass( packageName, className ); final TypeMetaInfo typeMetaInfo = metaData.getTypeMetaInfo( clazz ); assertNotNull( typeMetaInfo ); assertFalse( typeMetaInfo.isEvent() );
private List<ValidationMessage> doValidation(final Path path, final String content) { try { final KieModule module = moduleService.resolveModule(path); final org.kie.api.builder.KieModule kieModule = buildInfoService.getBuildInfo(module).getKieModuleIgnoringErrors(); final ClassLoader classLoader = KieModuleMetaData.Factory.newKieModuleMetaData(kieModule).getClassLoader(); final DataEnumLoader loader = new DataEnumLoader(content, classLoader, evaluator); if (!loader.hasErrors()) { return Collections.emptyList(); } else { final List<ValidationMessage> validationMessages = new ArrayList<>(); final List<String> loaderErrors = loader.getErrors(); for (final String message : loaderErrors) { validationMessages.add(makeValidationMessages(path, message)); } return validationMessages; } } catch (Exception e) { throw ExceptionUtilities.handleException(e); } }
private List<ValidationMessage> doValidation(final Path path, final String content) { try { final KieModule module = moduleService.resolveModule(path); final org.kie.api.builder.KieModule kieModule = buildInfoService.getBuildInfo(module).getKieModuleIgnoringErrors(); final ClassLoader classLoader = KieModuleMetaData.Factory.newKieModuleMetaData(kieModule).getClassLoader(); final DataEnumLoader loader = new DataEnumLoader(content, classLoader, evaluator); if (!loader.hasErrors()) { return Collections.emptyList(); } else { final List<ValidationMessage> validationMessages = new ArrayList<>(); final List<String> loaderErrors = loader.getErrors(); for (final String message : loaderErrors) { validationMessages.add(makeValidationMessages(path, message)); } return validationMessages; } } catch (Exception e) { throw ExceptionUtilities.handleException(e); } }