Pessoal estou com a seguinte duvida em JRuby. Preciso passar uma lista para Java pelo que eu percebi a ida está beleza. O problema é o retorno onde eu não consigo fazer o tratamento da conversão de Objeto de JRuby para Java.
Mas também não tenho certeza se foi corretamente.
Ficaria grato se alguém pudesse ajudar.
Segue a lista:
List<String> arrObj = new ArrayList<String>();
arrObj.add("Rio de Janeiro");
arrObj.add("Belo Horizonte");
arrObj.add("Salvador");
arrObj.add("Natal");
arrObj.add("Cuiabá");
,
O método que chama a função de JRuby:
public List<String> engine(String arq, List<String> arrObj){
List<String> aux = null;
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByExtension("rb");
InputStream is = ClassLoader.getSystemResourceAsStream(arq);
Reader reader = new InputStreamReader(is);
try {
se.eval(reader);
} catch (ScriptException e) {
e.printStackTrace();
}
Invocable ie = (Invocable)se;
if(ie != null){
try {
aux = (List<String>) ie.invokeFunction("ordena", arrObj); //Exceção nesta linha.
} catch (ScriptException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return aux;
}
O método de JRuby:
def ordena(arrObj)
return arrObj.sort!
end
Segue a exceção:
javax.script.ScriptException: org.jruby.exceptions.RaiseException
at com.sun.script.jruby.JRubyScriptEngine.invokeImpl(JRubyScriptEngine.java:517)
at com.sun.script.jruby.JRubyScriptEngine.invokeFunction(JRubyScriptEngine.java:136)
at calculadora.Calculadora.engine(Calculadora.java:553)
at calculadora.Calculadora.actionPerformed(Calculadora.java:453)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.jruby.exceptions.RaiseException