/**
*
*/
package org.reldb.rel.v0.vm.instructions.system;
import java.lang.reflect.*;
import org.reldb.rel.exceptions.*;
import org.reldb.rel.v0.storage.RelDatabase;
import org.reldb.rel.v0.vm.Context;
import org.reldb.rel.v0.vm.Instruction;
public final class OpJavaCall extends Instruction {
private Method method;
public OpJavaCall(Method method) {
this.method = method;
}
public void execute(Context context) {
try {
method.invoke(null, new Object [] {context});
} catch (Throwable error) {
String trace = "";
if (error.getCause() != null) {
trace = error.getCause().getMessage();
StackTraceElement traceElements[] = error.getCause().getStackTrace();
for (StackTraceElement element: traceElements)
if (element.toString().contains(RelDatabase.getRelUserCodePackage())) {
trace += " in " + element.toString();
break;
}
} else
trace = error.getMessage();
throw new ExceptionSemantic("RS0287: Failure executing external function: " + trace);
}
}
}