PrintStream origOut = System.out;
PrintStream origErr = System.err;
try
{
Interpreter engine = new Interpreter();
if ( scriptOutput != null )
{
System.setErr( scriptOutput );
System.setOut( scriptOutput );
engine.setErr( scriptOutput );
engine.setOut( scriptOutput );
}
if ( !Capabilities.haveAccessibility() )
{
try
{
Capabilities.setAccessibility( true );
}
catch ( Exception e )
{
if ( scriptOutput != null )
{
e.printStackTrace( scriptOutput );
}
}
}
if ( classPath != null && !classPath.isEmpty() )
{
for ( String path : classPath )
{
try
{
engine.getClassManager().addClassPath( new File( path ).toURI().toURL() );
}
catch ( IOException e )
{
throw new RuntimeException( "bad class path: " + path, e );
}
}
}
if ( globalVariables != null )
{
for ( String variable : globalVariables.keySet() )
{
Object value = globalVariables.get( variable );
try
{
engine.set( variable, value );
}
catch ( EvalError e )
{
throw new RuntimeException( e );
}
}
}
try
{
return engine.eval( script );
}
catch ( TargetError e )
{
throw new ScriptEvaluationException( e.getTarget() );
}