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;
+    }
 }