You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/03/24 10:09:41 UTC
tomee git commit: TOMEE-1751 parsing RemoteServer JVM args supporting
equal and quoting
Repository: tomee
Updated Branches:
refs/heads/master b222828b9 -> 23d949e07
TOMEE-1751 parsing RemoteServer JVM args supporting equal and quoting
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/23d949e0
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/23d949e0
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/23d949e0
Branch: refs/heads/master
Commit: 23d949e07afb759fda2d26cc3a001a10eb762659
Parents: b222828
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Thu Mar 24 10:09:26 2016 +0100
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Thu Mar 24 10:09:26 2016 +0100
----------------------------------------------------------------------
.../org/apache/openejb/config/RemoteServer.java | 44 +++++++++++++++++---
1 file changed, 39 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/23d949e0/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
index 2fd2d48..a127235 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
@@ -29,8 +29,10 @@ import java.lang.reflect.Field;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -238,17 +240,17 @@ public class RemoteServer {
}
if (javaOpts != null) {
- Collections.addAll(argsList, javaOpts.split(" +"));
+ argsList.addAll(parse(javaOpts));
}
final Map<String, String> addedArgs = new HashMap<String, String>();
if (additionalArgs != null) {
for (final String arg : additionalArgs) {
- final String[] values = arg.split("=");
- if (values.length == 1) {
- addedArgs.put(values[0], "null");
+ final int equal = arg.indexOf('=');
+ if (equal < 0) {
+ addedArgs.put(arg, "null");
} else {
- addedArgs.put(values[0], values[1]);
+ addedArgs.put(arg.substring(0, equal), arg.substring(equal + 1));
}
argsList.add(arg);
}
@@ -708,4 +710,36 @@ public class RemoteServer {
}
}
}
+
+ private static Collection<String> parse(final String raw) {
+ final Collection<String> result = new LinkedList<>();
+
+ Character end = null;
+ boolean escaped = false;
+ final StringBuilder current = new StringBuilder();
+ for (int i = 0; i < raw.length(); i++) {
+ final char c = raw.charAt(i);
+ if (escaped) {
+ escaped = false;
+ current.append(c);
+ } else if ((end != null && end == c) || (c == ' ' && end == null)) {
+ if (current.length() > 0) {
+ result.add(current.toString());
+ current.setLength(0);
+ }
+ end = null;
+ } else if (c == '\\') {
+ escaped = true;
+ } else if (c == '"' || c == '\'') {
+ end = c;
+ } else {
+ current.append(c);
+ }
+ }
+ if (current.length() > 0) {
+ result.add(current.toString());
+ }
+
+ return result;
+ }
}