Staram się przystosować this answer w przypadku wymiany regexp:Wywołanie wymienić na ciąg rzutów 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>
Jednak wykonanie tego kodu zawsze dotrzesz wyjątek:
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)
Jak można Czy zastępuję wyrażenie regularne tutaj?
Tak, jeśli oceniłeś 'typeof (attributes.get (" input "))' otrzymasz '' object "'. Mówiąc prościej, 'String (attributes.get (" input "));' również by działało. Zauważ, że w Nashorn, implementacja JavaScript JDK 8, natywne 'java.lang.String' są traktowane jako łańcuchy po stronie JavaScript. –
To był także mój problem. Mój skrypt JS pod Solr pracował w systemie Windows, a nie pod Linuksem. Odniosłem się do twojej odpowiedzi i teraz działa na obu. Jak na komentarz @ DavidP.Caldwell, zmieniłem JDK na Linuksie z OpenJDK na Oracle JDK i działa również w ten sposób. Dzięki! –