Skip to content

Commit 92a5e95

Browse files
authored
Merge pull request #32 from eficode/remote-javalibcore-update
Remote javalibcore update
2 parents b77b816 + a0f1d13 commit 92a5e95

32 files changed

+324
-459
lines changed

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@
392392
<dependency>
393393
<groupId>org.robotframework</groupId>
394394
<artifactId>javalib-core</artifactId>
395-
<version>1.2.1</version>
395+
<version>2.0.3</version>
396396
</dependency>
397397
<dependency>
398398
<groupId>org.robotframework</groupId>
@@ -409,11 +409,11 @@
409409
<artifactId>guava</artifactId>
410410
<version>28.1-jre</version>
411411
</dependency>
412-
<dependency>
413-
<groupId>com.github.ombre42</groupId>
414-
<artifactId>jrobotremoteserver</artifactId>
415-
<version>3.0</version>
416-
</dependency>
412+
<dependency>
413+
<groupId>org.robotframework</groupId>
414+
<artifactId>jrobotremoteserver</artifactId>
415+
<version>4.0.0</version>
416+
</dependency>
417417
<dependency>
418418
<groupId>org.apache.commons</groupId>
419419
<artifactId>commons-lang3</artifactId>

src/main/java/JavaFXLibrary.java

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.python.google.common.base.Throwables;
3838
import org.robotframework.javalib.annotation.Autowired;
3939
import org.robotframework.javalib.library.AnnotationLibrary;
40-
import org.robotframework.remoteserver.RemoteServer;
4140

4241
import javax.script.ScriptEngine;
4342
import javax.script.ScriptEngineManager;
@@ -90,12 +89,81 @@ public static String loadRobotLibraryVersion() {
9089
@Autowired
9190
protected RunOnFailure runOnFailure;
9291

92+
@Override
93+
public Object runKeyword(String keywordName, List args, Map kwargs) {
94+
95+
if (kwargs == null) {
96+
kwargs = new HashMap();
97+
}
98+
99+
List finalArgs;
100+
Map finalKwargs;
101+
102+
// JavalibCore changes arguments of Call Method keywords to Strings after this check, so they need to handle their own objectMapping
103+
if (!(keywordName.equals("callObjectMethod") || keywordName.equals("callObjectMethodInFxApplicationThread"))) {
104+
finalArgs = HelperFunctions.useMappedObjects(args);
105+
finalKwargs = HelperFunctions.useMappedObjects(kwargs);
106+
} else {
107+
finalArgs = args;
108+
finalKwargs = kwargs;
109+
}
110+
111+
112+
AtomicReference<Object> retval = new AtomicReference<>();
113+
AtomicReference<RuntimeException> retExcep = new AtomicReference<>();
114+
115+
try {
116+
RobotLog.ignoreDuplicates();
117+
// timeout + 500 ms so that underlying timeout has a chance to expire first
118+
waitFor(getWaitUntilTimeout(TimeUnit.MILLISECONDS) + 500, TimeUnit.MILLISECONDS, () -> {
119+
120+
try {
121+
retval.set(super.runKeyword(keywordName, finalArgs, finalKwargs));
122+
return true;
123+
124+
} catch (JavaFXLibraryTimeoutException jfxte){
125+
// timeout already expired, catch exception and jump out
126+
retExcep.set(jfxte);
127+
throw jfxte;
128+
129+
} catch (RuntimeException e){
130+
// catch exception and continue trying
131+
retExcep.set(e);
132+
return false;
133+
}
134+
});
135+
} catch (TimeoutException te) {
136+
RobotLog.reset();
137+
RuntimeException e = retExcep.get();
138+
runOnFailure.runOnFailure();
139+
140+
if (e.getCause() instanceof JavaFXLibraryFatalException) {
141+
RobotLog.trace("JavaFXLibrary: Caught JavaFXLibrary FATAL exception: \n" + Throwables.getStackTraceAsString(e));
142+
throw e;
143+
} else if (e.getCause() instanceof JavaFXLibraryNonFatalException) {
144+
RobotLog.trace("JavaFXLibrary: Caught JavaFXLibrary NON-FATAL exception: \n" + Throwables.getStackTraceAsString(e));
145+
throw e;
146+
} else {
147+
RobotLog.trace("JavaFXLibrary: Caught JavaFXLibrary RUNTIME exception: \n" + Throwables.getStackTraceAsString(e));
148+
throw e;
149+
}
150+
} catch (JavaFXLibraryTimeoutException jfxte) {
151+
RobotLog.reset();
152+
RobotLog.trace("JavaFXLibrary: Caught JavaFXLibrary TIMEOUT exception: \n" + Throwables.getStackTraceAsString(jfxte));
153+
throw jfxte;
154+
}
155+
RobotLog.reset();
156+
return retval.get();
157+
}
158+
93159
// overriding the run method to catch the control in case of failure, so that desired runOnFailureKeyword
94160
// can be executed in controlled manner.
95161
@Override
96-
public Object runKeyword(String keywordName, Object[] args) {
162+
public Object runKeyword(String keywordName, List args) {
163+
// TODO: Check if this is ever called anymore
164+
RobotLog.info("runKeyword called with args ONLY");
97165

98-
Object[] finalArgs;
166+
List finalArgs;
99167
// JavalibCore changes arguments of Call Method keywords to Strings after this check, so they need to handle their own objectMapping
100168
if (!(keywordName.equals("callObjectMethod") || keywordName.equals("callObjectMethodInFxApplicationThread")))
101169
finalArgs = HelperFunctions.useMappedObjects(args);
@@ -190,22 +258,23 @@ public static JavaFXLibrary getLibraryInstance() throws ScriptException {
190258
}
191259

192260
public static void main(String[] args) throws Exception {
193-
JavaFXLibraryRemoteServer.configureLogging();
194-
System.out.println("---------------------------= JavaFXLibrary =---------------------------- ");
195-
RemoteServer server = new JavaFXLibraryRemoteServer();
196-
server.putLibrary("/RPC2", new JavaFXLibrary());
197261
int port = 8270;
198262
InetAddress ipAddr = InetAddress.getLocalHost();
199263

200264
try {
201-
if (args.length > 0)
265+
JavaFXLibraryRemoteServer.configureLogging();
266+
System.out.println("----------------------------= JavaFXLibrary =-----------------------------");
267+
if (args.length > 0) {
202268
port = Integer.parseInt(args[0]);
203-
else
269+
}
270+
else {
204271
System.out.println("RemoteServer for JavaFXLibrary will be started at default port of: " + port + ".\n" +
205272
"If you wish to use another port, restart the library and give port number\n" +
206273
"as an argument.");
274+
}
207275

208-
server.setPort(port);
276+
JavaFXLibraryRemoteServer server = new JavaFXLibraryRemoteServer(port);
277+
server.putLibrary("/RPC2", new JavaFXLibrary());
209278
server.start();
210279
System.out.println("\n JavaFXLibrary " + ROBOT_LIBRARY_VERSION + " is now available at: " +
211280
ipAddr.getHostAddress() + ":" + port + "\n");
@@ -219,6 +288,9 @@ public static void main(String[] args) throws Exception {
219288
} catch (BindException be) {
220289
System.out.println("\n Error! " + be.getMessage() + ": " + ipAddr.getHostAddress() + ":" + port + "\n");
221290
System.exit(1);
291+
} catch (IOException ioe) {
292+
System.out.println("\n Error! " + ioe.getMessage() + ": " + ipAddr.getHostAddress() + ":" + port + "\n");
293+
System.exit(1);
222294
}
223295
}
224296
}

src/main/java/JavaFXLibraryRemoteServer.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,27 @@
1717

1818
import org.apache.commons.logging.Log;
1919
import org.apache.commons.logging.LogFactory;
20-
import org.apache.log4j.BasicConfigurator;
21-
import org.apache.log4j.Level;
22-
import org.apache.log4j.Logger;
20+
import org.apache.logging.log4j.Level;
21+
import org.apache.logging.log4j.core.config.Configurator;
22+
import org.apache.logging.log4j.core.config.DefaultConfiguration;
2323
import org.robotframework.remoteserver.RemoteServer;
2424
import org.robotframework.remoteserver.logging.Jetty2Log4J;
2525

2626
public class JavaFXLibraryRemoteServer extends RemoteServer {
2727

28+
public JavaFXLibraryRemoteServer(int port) {
29+
super(port);
30+
}
31+
2832
private static Log log = LogFactory.getLog(RemoteServer.class);
2933

3034
public static void configureLogging() {
31-
Logger root = Logger.getRootLogger();
32-
root.removeAllAppenders();
33-
BasicConfigurator.configure();
34-
root.setLevel(Level.FATAL);
35+
Configurator.initialize(new DefaultConfiguration());
36+
Configurator.setRootLevel(Level.FATAL);
3537
org.eclipse.jetty.util.log.Log.setLog(new Jetty2Log4J());
3638
LogFactory.releaseAll();
3739
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
3840
"org.apache.commons.logging.impl.Log4JLogger");
3941
log = LogFactory.getLog(RemoteServer.class);
4042
}
41-
}
43+
}

0 commit comments

Comments
 (0)