|
From: | Ernst Reissner |
Subject: | Calling Octave from within Java |
Date: | Thu, 25 Nov 2010 22:48:48 +0100 |
User-agent: | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.15) Gecko/20101026 SUSE/3.0.10 Thunderbird/3.0.10 |
Hello all, started using JavaOctave directly which worked well, except some strange effects, i'll fix later. Now i use JavaOctave to create testcases with junit. My application is implementing octave functions in java using the octave-package "java" and then testing the java-integration by invoking octave from junit using JavaOctave. The strange thing is that, as soon as i use junit, JavaOctave does not work any more. I have the code OctaveEngine octave = new OctaveEngineFactory().getScriptEngine(); octave.put("x",Octave.scalar(1.3)); System.out.println("Java: x = " + octave.get(OctaveDouble.class,"x").get(1)); octave.close(); which works well directly invoked but not with junit. (Well it does work with junit but not if used as intended: I can place the above conde in the main method of the test class and it works. ) I can imagine, it has to do with reflection, but i cannot figure out what the problem is. I also found in the internet examples of using x The error i obtain is SEVERE: ExecutionException should not happen java.util.concurrent.ExecutionException: java.util.ServiceConfigurationError: dk.ange.octave.io.spi.OctaveDataWriter: Provider dk.ange.octave.io.impl.BooleanWriter could not be instantiated: java.lang.ClassCastException: Cannot cast dk.ange.octave.io.impl.BooleanWriter to dk.ange.octave.io.spi.OctaveDataWriter at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) at java.util.concurrent.FutureTask.get(FutureTask.java:111) at dk.ange.octave.exec.OctaveExec.getFromFuture(OctaveExec.java:184) at dk.ange.octave.exec.OctaveExec.eval(OctaveExec.java:158) at dk.ange.octave.io.OctaveIO.set(OctaveIO.java:56) at dk.ange.octave.OctaveEngine.put(OctaveEngine.java:156) at eu.simuline.octave.OctaveTest.testConstrDouble(OctaveTest.java:63) at eu.simuline.octave.OctaveTest$TestAll.testConstrDouble(OctaveTest.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99) at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71) at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.junit.internal.runners.CompositeRunner.run(CompositeRunner.java:29) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.junit.internal.runners.CompositeRunner.run(CompositeRunner.java:29) at org.junit.runner.JUnitCore.run(JUnitCore.java:121) at org.junit.runner.JUnitCore.run(JUnitCore.java:100) at org.junit.runner.JUnitCore.run(JUnitCore.java:91) at eu.simuline.testhelpers.Actions$CoreRunner.runAll(Actions.java:211) at eu.simuline.testhelpers.Actions$CoreRunner.run(Actions.java:188) Caused by: java.util.ServiceConfigurationError: dk.ange.octave.io.spi.OctaveDataWriter: Provider dk.ange.octave.io.impl.BooleanWriter could not be instantiated: java.lang.ClassCastException: Cannot cast dk.ange.octave.io.impl.BooleanWriter to dk.ange.octave.io.spi.OctaveDataWriter at java.util.ServiceLoader.fail(ServiceLoader.java:224) at java.util.ServiceLoader.access$100(ServiceLoader.java:181) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:370) at java.util.ServiceLoader$1.next(ServiceLoader.java:438) at dk.ange.octave.io.spi.OctaveDataWriter.initIfNecessary(OctaveDataWriter.java:54) at dk.ange.octave.io.spi.OctaveDataWriter.getOctaveDataWriter(OctaveDataWriter.java:44) at dk.ange.octave.io.OctaveIO.write(OctaveIO.java:198) at dk.ange.octave.io.OctaveIO.write(OctaveIO.java:217) at dk.ange.octave.io.DataWriteFunctor.doWrites(DataWriteFunctor.java:53) at dk.ange.octave.exec.OctaveWriterCallable.call(OctaveWriterCallable.java:56) at dk.ange.octave.exec.OctaveWriterCallable.call(OctaveWriterCallable.java:27) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:636) Caused by: java.lang.ClassCastException: Cannot cast dk.ange.octave.io.impl.BooleanWriter to dk.ange.octave.io.spi.OctaveDataWriter at java.lang.Class.cast(Class.java:3007) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:362) ... 13 more My personal code is the package starting with eu.simuline. Can you help? greetings, Ernst |
[Prev in Thread] | Current Thread | [Next in Thread] |