private SingleScenarioResult runScenario(String packageName,
Scenario scenario,
RuleCoverageListener coverage) throws SerializationException {
PackageItem item = this.getRulesRepository().loadPackage( packageName );
SingleScenarioResult result = null;
// nasty classloader needed to make sure we use the same tree the whole
// time.
ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
try {
final RuleBase rb = loadCacheRuleBase( item );
ClassLoader cl = ((InternalRuleBase) RuleBaseCache.getInstance().get( item.getUUID() )).getRootClassLoader();
Thread.currentThread().setContextClassLoader( cl );
result = runScenario( scenario,
item,
cl,
rb,
coverage );
} catch ( Exception e ) {
if ( e instanceof DetailedSerializationException ) {
DetailedSerializationException err = (DetailedSerializationException) e;
result = new SingleScenarioResult();
if ( err.getErrs() != null ) {
result.result = new ScenarioRunResult( err.getErrs(),
null );
} else {
throw err;