Sto cercando di adattarsi this answer al caso di sostituzione regexp:Calling sostituire su stringa tiri EvaluatorException
<scriptdef name="propertyregex" language="javascript">
<attribute name="property"/>
<attribute name="input"/>
<attribute name="regexp"/>
<attribute name="replace"/>
<![CDATA[
var input = attributes.get("input");
var regex = new RegExp(attributes.get("regexp"));
var replace = attributes.get("replace");
var res = input.replace(regex, replace);
project.setProperty(attributes.get("property"), res);
]]>
</scriptdef>
Tuttavia, l'esecuzione di codice che ottengo sempre un'eccezione:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException:
The choice of Java constructor replace matching JavaScript argument types
(function,java.lang.String) is ambiguous; candidate constructors are:
class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
class java.lang.String replace(char,char)
Come Faccio la sostituzione delle espressioni regolari qui?
Sì, se avete valutato 'typeof (attributes.get (" input "))' otterreste '" oggetto "'. Più semplicemente, 'String (attributes.get (" input "));' funzionerebbe anche. Si noti che in Nashorn, l'implementazione JavaScript JDK 8, nativa 'java.lang.String' sono trattate come stringhe sul lato JavaScript. –
Questo era il mio problema pure. Il mio script JS sotto Solr funzionava su Windows e non su Linux. Ho fatto riferimento alla tua risposta e funziona su entrambi adesso. Come per il commento di @ DavidP.Caldwell, ho cambiato il JDK su Linux da OpenJDK a Oracle JDK e funziona anche in questo modo. Grazie! –