You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jd...@apache.org on 2012/03/21 18:22:14 UTC
svn commit: r1303470 - in
/lucene/dev/trunk/solr/contrib/dataimporthandler/src:
java/org/apache/solr/handler/dataimport/ScriptTransformer.java
test/org/apache/solr/handler/dataimport/TestScriptTransformer.java
Author: jdyer
Date: Wed Mar 21 17:22:13 2012
New Revision: 1303470
URL: http://svn.apache.org/viewvc?rev=1303470&view=rev
Log:
SOLR-3260: better messages when ScriptTransform fails on init (remove Reflection in Trunk, JRE1.6+ assurred)
Modified:
lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ScriptTransformer.java
lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestScriptTransformer.java
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ScriptTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ScriptTransformer.java?rev=1303470&r1=1303469&r2=1303470&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ScriptTransformer.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/ScriptTransformer.java Wed Mar 21 17:22:13 2012
@@ -19,10 +19,13 @@ package org.apache.solr.handler.dataimpo
import static org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow;
import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.util.Map;
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
/**
* <p>
* A {@link Transformer} instance capable of executing functions written in scripting
@@ -40,11 +43,8 @@ import java.util.Map;
* @since solr 1.3
*/
public class ScriptTransformer extends Transformer {
- private Object engine;
-
- private Method invokeFunctionMethod;
-
- private String functionName;
+ private Invocable engine;
+ private String functionName;
@Override
public Object transformRow(Map<String, Object> row, Context context) {
@@ -53,17 +53,9 @@ public class ScriptTransformer extends T
initEngine(context);
if (engine == null)
return row;
- return invokeFunctionMethod.invoke(engine, functionName, new Object[]{
- row, context});
+ return engine.invokeFunction(functionName, new Object[]{row, context});
} catch (DataImportHandlerException e) {
throw e;
- } catch (InvocationTargetException e) {
- wrapAndThrow(SEVERE,e,
- "Could not invoke method :"
- + functionName
- + "\n <script>\n"
- + context.getScript()
- + "</script>");
} catch (Exception e) {
wrapAndThrow(SEVERE,e, "Error invoking script for entity " + context.getEntityAttribute("name"));
}
@@ -78,27 +70,23 @@ public class ScriptTransformer extends T
throw new DataImportHandlerException(SEVERE,
"<script> tag is not present under <dataConfig>");
}
- Object scriptEngineMgr = null;
- try {
- scriptEngineMgr = Class.forName("javax.script.ScriptEngineManager")
- .newInstance();
- } catch (Exception e) {
- wrapAndThrow(SEVERE, e, "<script> can be used only in java 6 or above");
+ ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
+ ScriptEngine scriptEngine = scriptEngineMgr.getEngineByName(scriptLang);
+ if (scriptEngine == null) {
+ throw new DataImportHandlerException(SEVERE,
+ "Cannot load Script Engine for language: " + scriptLang);
}
- try {
- Method getEngineMethod = scriptEngineMgr.getClass().getMethod(
- "getEngineByName", String.class);
- engine = getEngineMethod.invoke(scriptEngineMgr, scriptLang);
- } catch (Exception e) {
- wrapAndThrow(SEVERE, e, "Cannot load Script Engine for language: "
- + scriptLang);
+ if (scriptEngine instanceof Invocable) {
+ engine = (Invocable) scriptEngine;
+ } else {
+ throw new DataImportHandlerException(SEVERE,
+ "The installed ScriptEngine for: " + scriptLang
+ + " does not implement Invocable. Class is "
+ + scriptEngine.getClass().getName());
}
try {
- Method evalMethod = engine.getClass().getMethod("eval", String.class);
- invokeFunctionMethod = engine.getClass().getMethod("invokeFunction",
- String.class, Object[].class);
- evalMethod.invoke(engine, scriptText);
- } catch (Exception e) {
+ scriptEngine.eval(scriptText);
+ } catch (ScriptException e) {
wrapAndThrow(SEVERE, e, "'eval' failed with language: " + scriptLang
+ " and script: \n" + scriptText);
}
Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestScriptTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestScriptTransformer.java?rev=1303470&r1=1303469&r2=1303470&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestScriptTransformer.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestScriptTransformer.java Wed Mar 21 17:22:13 2012
@@ -52,9 +52,7 @@ public class TestScriptTransformer exten
sep.init(context);
sep.applyTransformer(map);
assertEquals(map.get("name"), "Hello Scott");
- } catch (DataImportHandlerException e) {
- assumeFalse("JRE does not contain a JavaScript engine (OpenJDK)",
- e.getMessage().startsWith("<script> can be used only in java 6 or above"));
+ } catch (DataImportHandlerException e) {
throw e;
}
}
@@ -86,8 +84,6 @@ public class TestScriptTransformer exten
sep.applyTransformer(map);
assertEquals(map.get("name"), "Hello Scott");
} catch (DataImportHandlerException e) {
- assumeFalse("JRE does not contain a JavaScript engine (OpenJDK)",
- e.getMessage().startsWith("<script> can be used only in java 6 or above"));
throw e;
}
}
@@ -103,8 +99,6 @@ public class TestScriptTransformer exten
.item(0));
assertTrue(config.script.text.indexOf("checkNextToken") > -1);
} catch (DataImportHandlerException e) {
- assumeFalse("JRE does not contain a JavaScript engine (OpenJDK)",
- e.getMessage().startsWith("<script> can be used only in java 6 or above"));
throw e;
}
}
@@ -132,8 +126,6 @@ public class TestScriptTransformer exten
sep.applyTransformer(map);
assertNull(map.get("$hasMore"));
} catch (DataImportHandlerException e) {
- assumeFalse("JRE does not contain a JavaScript engine (OpenJDK)",
- e.getMessage().startsWith("<script> can be used only in java 6 or above"));
throw e;
}
}