
de.codecentric.dwcaller.utils.NativeModuleComponentFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of data-weave-caller Show documentation
Show all versions of data-weave-caller Show documentation
Library to call DataWeave from Java and execute DW unit tests.
The newest version!
package de.codecentric.dwcaller.utils;
import org.mule.weave.v2.interpreted.RuntimeModuleNodeCompiler;
import org.mule.weave.v2.parser.phase.CompositeModuleParsingPhasesManager;
import org.mule.weave.v2.parser.phase.ModuleLoader;
import org.mule.weave.v2.parser.phase.ModuleLoaderManager;
import org.mule.weave.v2.parser.phase.ModuleParsingPhasesManager;
import org.mule.weave.v2.runtime.ModuleComponents;
import org.mule.weave.v2.runtime.ModuleComponentsFactory;
import org.mule.weave.v2.sdk.ClassLoaderWeaveResourceResolver;
import org.mule.weave.v2.sdk.SPIBasedModuleLoaderProvider;
import org.mule.weave.v2.sdk.TwoLevelWeaveResourceResolver;
import org.mule.weave.v2.sdk.WeaveResourceResolver;
import scala.Function0;
import scala.Function1;
import scala.Option;
import scala.collection.Seq;
import scala.collection.mutable.MutableList;
public class NativeModuleComponentFactory implements ModuleComponentsFactory {
@Override
public ModuleComponents createComponents() {
MutableList> classLoaders = new MutableList<>();
classLoaders.appendElem(new Function0() {
@Override
public ClassLoader apply() {
return NativeModuleComponentFactory.class.getClassLoader();
}
});
WeaveResourceResolver resolver = new ClassLoaderWeaveResourceResolver(classLoaders);
MutableList loaders = new MutableList<>();
loaders.appendElem(ModuleLoader.apply(resolver));
Seq spiModules = new SPIBasedModuleLoaderProvider(resolver).getModules();
spiModules.toList().foreach(new Function1() {
@Override
public Void apply(ModuleLoader v1) {
loaders.appendElem(v1);
return null;
}
});
ModuleParsingPhasesManager currentClassloader = ModuleParsingPhasesManager.apply(ModuleLoaderManager.apply(loaders));
MutableList phaseManagers = new MutableList<>();
phaseManagers.appendElem(NativeSystemModuleComponents.systemModuleParser);
phaseManagers.appendElem(currentClassloader);
CompositeModuleParsingPhasesManager parser = CompositeModuleParsingPhasesManager.apply(phaseManagers);
RuntimeModuleNodeCompiler systemModuleCompiler = RuntimeModuleNodeCompiler.apply(NativeSystemModuleComponents.systemModuleParser, Option.empty());
RuntimeModuleNodeCompiler compiler = RuntimeModuleNodeCompiler.chain(currentClassloader, systemModuleCompiler, false);
Function0 resolverFactory = new Function0() {
@Override
public WeaveResourceResolver apply() {
return resolver;
}
};
return ModuleComponents.apply(new TwoLevelWeaveResourceResolver(NativeSystemModuleComponents.systemResourceResolver, resolverFactory), parser, compiler);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy