This is an automated email from the ASF dual-hosted git repository.
jgauravgupta pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 1a143c8 NETBEANS-3573 Unable to start the Payara server due to JDK
version NumberFormatException
new 8863b18 Merge pull request #1770 from jGauravGupta/NETBEANS-3573
1a143c8 is described below
commit 1a143c81228c901f21b9934f97696b3b29d50aef
Author: Gaurav Gupta <[email protected]>
AuthorDate: Wed Dec 11 10:52:14 2019 +0530
NETBEANS-3573 Unable to start the Payara server due to JDK version
NumberFormatException
Signed-off-by: Gaurav Gupta <[email protected]>
---
.../org-netbeans-modules-payara-tooling.sig | 3 +-
.../modules/payara/tooling/data/JDKVersion.java | 166 ++++++++++-----------
.../payara/tooling/data/StartupArgsEntity.java | 31 ++--
.../modules/payara/tooling/server/ServerTasks.java | 3 +-
.../tooling/server/parser/JvmConfigReader.java | 10 +-
.../payara/tooling/data/JDKVersionTest.java | 66 ++++++++
6 files changed, 174 insertions(+), 105 deletions(-)
diff --git
a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
index 99fca79..fce0555 100644
---
a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
+++
b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
@@ -1227,7 +1227,6 @@ cons public init()
supr java.lang.Object
CLSS public final org.netbeans.modules.payara.tooling.data.JDKVersion
-fld public static org.netbeans.modules.payara.tooling.data.JDKVersion
IDE_JDK_VERSION
meth public boolean equals(java.lang.Object)
meth public boolean ge(org.netbeans.modules.payara.tooling.data.JDKVersion)
meth public boolean gt(org.netbeans.modules.payara.tooling.data.JDKVersion)
@@ -1240,7 +1239,7 @@ meth public java.util.Optional<java.lang.Short>
getSubMinor()
meth public java.util.Optional<java.lang.Short> getUpdate()
meth public short getMajor()
meth public static boolean
isCorrectJDK(java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>)
-meth public static boolean
isCorrectJDK(org.netbeans.modules.payara.tooling.data.JDKVersion,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>)
+meth public static boolean
isCorrectJDK(org.netbeans.modules.payara.tooling.data.JDKVersion,java.util.Optional<java.lang.String>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>)
meth public static org.netbeans.modules.payara.tooling.data.JDKVersion
getDefaultPlatformVersion()
meth public static org.netbeans.modules.payara.tooling.data.JDKVersion
toValue(java.lang.String)
supr java.lang.Object
diff --git
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
index 873cbcd..24c2c15 100644
---
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
+++
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java
@@ -41,45 +41,38 @@ public final class JDKVersion {
* Update version number.
*/
private final Optional<Short> update;
-
+
/**
* JDK vendor
*/
private final Optional<String> vendor;
- public static JDKVersion IDE_JDK_VERSION;
+ private final static int MAJOR_INDEX = 0;
+ private final static int MINOR_INDEX = 1;
+ private final static int SUBMINOR_INDEX = 2;
+ private final static int UPDATE_INDEX = 3;
- private static final String VERSION_MATCHER = "([0-9]+[\\._u\\-]+)*[0-9]+";
+ private static JDKVersion IDE_JDK_VERSION;
- // split java version into it's constituent parts, i.e.
- // 1.2.3.4 -> [ 1, 2, 3, 4]
- // 1.2.3u4 -> [ 1, 2, 3, 4]
- // 1.2.3_4 -> [ 1, 2, 3, 4]
- private static final String VERSION_SPLITTER = "[\\._u\\-]+";
+ private static final String VERSION_MATCHER =
"(\\d+(\\.\\d+)*)([_u\\-]+[\\S]+)*";
private static final Short DEFAULT_VALUE = 0;
- private JDKVersion(String version) {
- if (version.contains("-")) { // NOI18N
- String[] versionSplit = version.split("-"); // NOI18N
- vendor = versionSplit.length > 0 ? Optional.of(versionSplit[0]) :
Optional.empty();
- version = versionSplit.length > 1 ? versionSplit[1] : ""; // NOI18N
- } else {
- vendor = Optional.empty();
- }
- String[] split = version.split(VERSION_SPLITTER);
- major = split.length > 0 ? Short.parseShort(split[0]) : 0;
- minor = split.length > 1 ? Optional.of(Short.parseShort(split[1])) :
Optional.empty();
- subminor = split.length > 2 ? Optional.of(Short.parseShort(split[2]))
: Optional.empty();
- update = split.length > 3 ? Optional.of(Short.parseShort(split[3])) :
Optional.empty();
+ private JDKVersion(String version, String vendor) {
+ short[] versions = parseVersions(version);
+ this.major = versions[MAJOR_INDEX];
+ this.minor = Optional.ofNullable(versions[MINOR_INDEX]);
+ this.subminor = Optional.ofNullable(versions[SUBMINOR_INDEX]);
+ this.update = Optional.ofNullable(versions[UPDATE_INDEX]);
+ this.vendor = Optional.ofNullable(vendor);
}
- private JDKVersion(Short major, Short minor, Short subminor, Short update,
String vendor) {
+ JDKVersion(Short major, Optional<Short> minor, Optional<Short> subminor,
Optional<Short> update, Optional<String> vendor) {
this.major = major;
- this.minor = Optional.of(minor);
- this.subminor = Optional.of(subminor);
- this.update = Optional.of(update);
- this.vendor = Optional.of(vendor);
+ this.minor = minor;
+ this.subminor = subminor;
+ this.update = update;
+ this.vendor = vendor;
}
/**
@@ -117,8 +110,8 @@ public final class JDKVersion {
public Optional<Short> getUpdate() {
return update;
}
-
- /**
+
+ /**
* Get JDK Vendor.
*
* @return JDK vendor.
@@ -232,7 +225,8 @@ public final class JDKVersion {
@Override
public String toString() {
- StringBuilder value = new StringBuilder(major);
+ StringBuilder value = new StringBuilder();
+ value.append(major);
if (minor.isPresent()) {
value.append('.').append(minor.get());
}
@@ -247,7 +241,15 @@ public final class JDKVersion {
public static JDKVersion toValue(String version) {
if (version != null && version.matches(VERSION_MATCHER)) {
- return new JDKVersion(version);
+ return new JDKVersion(version, null);
+ } else {
+ return null;
+ }
+ }
+
+ public static JDKVersion toValue(String version, String vendor) {
+ if (version != null && version.matches(VERSION_MATCHER)) {
+ return new JDKVersion(version, vendor);
} else {
return null;
}
@@ -259,13 +261,17 @@ public final class JDKVersion {
public static boolean isCorrectJDK(JDKVersion jdkVersion, Optional<String>
vendor, Optional<JDKVersion> minVersion, Optional<JDKVersion> maxVersion) {
boolean correctJDK = true;
-
- if (vendor.isPresent()) {
- correctJDK = jdkVersion.vendor.get().contains(vendor.get());
+
+ if (vendor.isPresent()) {
+ if (jdkVersion.getVendor().isPresent()) {
+ correctJDK =
jdkVersion.getVendor().get().contains(vendor.get());
+ } else {
+ correctJDK = false;
+ }
}
if (correctJDK && minVersion.isPresent()) {
correctJDK = jdkVersion.ge(minVersion.get());
- }
+ }
if (correctJDK && maxVersion.isPresent()) {
correctJDK = jdkVersion.le(maxVersion.get());
}
@@ -281,13 +287,8 @@ public final class JDKVersion {
}
private static void initialize() {
- short major = 1;
- short minor = 0;
- short subminor = 0;
- short update = 0;
String vendor = System.getProperty("java.vendor"); // NOI18N
- try {
- /*
+ /*
In JEP 223 java.specification.version will be a single number
versioning , not a dotted versioning .
For JDK 8:
java.specification.version 1.8
@@ -298,58 +299,51 @@ public final class JDKVersion {
For JDK 11:
java.specification.version 11
java.version 11.0.3
- */
- String javaSpecVersion =
System.getProperty("java.specification.version"); // NOI18N
- String javaVersion = System.getProperty("java.version"); // NOI18N
- String[] javaSpecVersionSplit = javaSpecVersion.split("\\."); //
NOI18N
- if (javaSpecVersionSplit.length == 1) {
- // Handle Early Access build. e.g: 13-ea
- String[] javaVersionSplit = javaVersion.split("-"); // NOI18N
- String javaVersionCategory = javaVersionSplit[0];
- String[] split = javaVersionCategory.split("[\\.]+"); // NOI18N
-
- if (split.length > 0) {
- if (split.length > 0) {
- major = Short.parseShort(split[0]);
- }
- if (split.length > 1) {
- minor = Short.parseShort(split[1]);
- }
- if (split.length > 2) {
- subminor = Short.parseShort(split[2]);
- }
- if (split.length > 3) {
- update = Short.parseShort(split[3]);
- }
- }
- } else {
- if (javaVersion == null || javaVersion.length() <= 0) {
- return;
- }
-
- String[] javaVersionSplit = javaVersion.split("\\.");
- if (javaVersionSplit.length < 3 ||
!javaVersionSplit[0].equals("1")) {
- return;
- }
+ */
+ String javaVersion = System.getProperty("java.version"); // NOI18N
+ short[] versions = parseVersions(javaVersion);
+
+ IDE_JDK_VERSION = new JDKVersion(
+ versions[MAJOR_INDEX],
+ Optional.of(versions[MINOR_INDEX]),
+ Optional.of(versions[SUBMINOR_INDEX]),
+ Optional.of(versions[UPDATE_INDEX]),
+ Optional.of(vendor)
+ );
+ }
- major = Short.parseShort(javaVersionSplit[0]);
- minor = Short.parseShort(javaVersionSplit[1]);
- javaVersionSplit = javaVersionSplit[2].split("_");
+ /**
+ * Parses the java version text
+ *
+ * @param javaVersion the Java Version e.g 1.8.0u222,
+ * 1.8.0_232-ea-8u232-b09-0ubuntu1-b09, 11.0.5
+ * @return
+ */
+ static short[] parseVersions(String javaVersion) {
- if (javaVersionSplit.length < 1) {
- return;
- }
+ short[] versions = {1, 0, 0, 0};
+ if (javaVersion == null || javaVersion.length() <= 0) {
+ return versions; // not likely!!
+ }
- subminor = Short.parseShort(javaVersionSplit[0]);
+ String[] javaVersionSplit = javaVersion.split("-"); // NOI18N
+ String[] split = javaVersionSplit[0].split("\\."); // NOI18N
- if (javaVersionSplit.length > 1) {
- update = Short.parseShort(javaVersionSplit[1]);
+ if (split.length > 0) {
+ if (split.length > 0) {
+ versions[MAJOR_INDEX] = Short.parseShort(split[0]);
+ }
+ if (split.length > 1) {
+ versions[MINOR_INDEX] = Short.parseShort(split[1]);
+ }
+ if (split.length > 2) {
+ split = split[2].split("[_u]"); // NOI18N
+ versions[SUBMINOR_INDEX] = Short.parseShort(split[0]);
+ if (split.length > 1) {
+ versions[UPDATE_INDEX] = Short.parseShort(split[1]);
}
}
- } catch (Exception e) {
- // ignore
}
-
- IDE_JDK_VERSION = new JDKVersion(major, minor, subminor, update,
vendor);
+ return versions;
}
}
diff --git
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
index 45b9b30..65f7e22 100644
---
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
+++
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/StartupArgsEntity.java
@@ -170,17 +170,30 @@ public class StartupArgsEntity implements StartupArgs {
@Override
public JDKVersion getJavaVersion() {
if(javaVersion == null && javaHome != null) {
- try (BufferedReader bufferedReader
- = new BufferedReader(new FileReader(new File(javaHome,
"release")));) {
- String line;
- while ((line = bufferedReader.readLine()) != null) {
- if (line.startsWith("JAVA_VERSION")) {
- javaVersion =
JDKVersion.toValue(line.substring(line.indexOf("\"") + 1,
line.lastIndexOf("\"")));
- break;
+ if(javaHome.equals(System.getProperty("jdk.home"))){
+ javaVersion = JDKVersion.getDefaultPlatformVersion();
+ } else {
+ try (BufferedReader bufferedReader
+ = new BufferedReader(new FileReader(new File(javaHome,
"release")));) { // NOI18N
+ String implementorLine = null;
+ String javaVersionLine = null;
+ String line;
+ while ((line = bufferedReader.readLine()) != null) {
+ if (line.startsWith("JAVA_VERSION=")) { // NOI18N
+ javaVersionLine = line;
+ } else if (line.startsWith("IMPLEMENTOR=")) { // NOI18N
+ implementorLine = line;
+ }
}
+ if (javaVersionLine != null) {
+ javaVersion = JDKVersion.toValue(
+
javaVersionLine.substring(javaVersionLine.indexOf("\"") + 1,
javaVersionLine.lastIndexOf("\"")), // NOI18N
+ implementorLine != null ?
implementorLine.substring(implementorLine.indexOf("\"") + 1,
implementorLine.lastIndexOf("\"")) : null // NOI18N
+ );
+ }
+ } catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
}
- } catch (IOException ex) {
- Exceptions.printStackTrace(ex);
}
}
return javaVersion;
diff --git
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
index c8130e5..ad9761b 100644
---
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
+++
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java
@@ -38,7 +38,6 @@ import org.netbeans.modules.payara.tooling.utils.OsUtils;
import org.netbeans.modules.payara.tooling.utils.ServerUtils;
import org.netbeans.modules.payara.tooling.utils.Utils;
import org.netbeans.modules.payara.tooling.data.PayaraServer;
-import static
org.netbeans.modules.payara.tooling.data.JDKVersion.IDE_JDK_VERSION;
import org.netbeans.modules.payara.tooling.data.JDKVersion;
import
org.netbeans.modules.payara.tooling.server.parser.JvmConfigReader.JvmOption;
@@ -164,7 +163,7 @@ public class ServerTasks {
}
}
- JDKVersion javaVersion = IDE_JDK_VERSION != null ? IDE_JDK_VERSION :
args.getJavaVersion() ;
+ JDKVersion javaVersion = args.getJavaVersion() == null ?
JDKVersion.getDefaultPlatformVersion() : args.getJavaVersion() ;
List<String> optList
= jvmConfigReader.getJvmOptions()
.stream()
diff --git
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
index c994b4b..d466ae9 100644
---
a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
+++
b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/parser/JvmConfigReader.java
@@ -213,12 +213,13 @@ public class JvmConfigReader extends NodeListener
implements XMLReader {
// Ex: [|1.8]-XX:MyJvmOption (only max version present)
// Ex: [1.7|]-XX:MyJvmOption (only min version present)
// Gr1 or Gr2 can be null (optional)
- private static final Pattern PATTERN =
Pattern.compile("^\\[(.*)\\|(.*)\\](.*)");
+ private static final Pattern PATTERN =
Pattern.compile("^\\[(.*)\\|(.*)\\](.*)"); // NOI18N
public JvmOption(String option) {
Matcher matcher = PATTERN.matcher(option);
if (matcher.matches()) {
- if (matcher.group(1).contains("-")) { // NOI18N
+ if (matcher.group(1).contains("-") // NOI18N
+ && Character.isLetter(matcher.group(1).charAt(0))) {
String[] parts = matcher.group(1).split("-"); // NOI18N
this.vendor = Optional.ofNullable(parts[0]);
this.minVersion =
Optional.ofNullable(JDKVersion.toValue(parts[1]));
@@ -266,10 +267,7 @@ public class JvmConfigReader extends NodeListener
implements XMLReader {
return false;
}
final JvmOption other = (JvmOption) obj;
- if (!Objects.equals(this.option, other.option)) {
- return false;
- }
- return true;
+ return Objects.equals(this.option, other.option);
}
@Override
diff --git
a/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java
b/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java
new file mode 100644
index 0000000..8e3c1e2
--- /dev/null
+++
b/enterprise/payara.tooling/test/unit/src/org/netbeans/modules/payara/tooling/data/JDKVersionTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.payara.tooling.data;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import static org.testng.Assert.assertTrue;
+import org.testng.annotations.Test;
+
+/**
+ * Common JDK version functional test.
+ * <p>
+ * @author Gaurav Gupta
+ */
+@Test(groups = {"unit-tests"})
+public class JDKVersionTest {
+
+ /**
+ * Test to parse the JDKVersion.
+ */
+ @Test
+ public void parseJDKVersion() {
+ Map<String, JDKVersion> jdkVersions = new HashMap<>();
+ jdkVersions.put("1.8",
+ new JDKVersion((short) 1, Optional.of((short) 8),
Optional.of((short) 0), Optional.of((short) 0), Optional.empty()));
+ jdkVersions.put("1.8.0",
+ new JDKVersion((short) 1, Optional.of((short) 8),
Optional.of((short) 0), Optional.of((short) 0), Optional.empty()));
+ jdkVersions.put("1.8.0u121",
+ new JDKVersion((short) 1, Optional.of((short) 8),
Optional.of((short) 0), Optional.of((short) 121), Optional.empty()));
+ jdkVersions.put("1.8.0_191",
+ new JDKVersion((short) 1, Optional.of((short) 8),
Optional.of((short) 0), Optional.of((short) 191), Optional.empty()));
+ jdkVersions.put("1.8.0_232-ea-8u232-b09-0ubuntu1-b09",
+ new JDKVersion((short) 1, Optional.of((short) 8),
Optional.of((short) 0), Optional.of((short) 232), Optional.empty()));
+ jdkVersions.put("9",
+ new JDKVersion((short) 9, Optional.of((short) 0),
Optional.of((short) 0), Optional.of((short) 0), Optional.empty()));
+ jdkVersions.put("11.0.6",
+ new JDKVersion((short) 11, Optional.of((short) 0),
Optional.of((short) 6), Optional.of((short) 0), Optional.empty()));
+ jdkVersions.put("11.0.6_234",
+ new JDKVersion((short) 11, Optional.of((short) 0),
Optional.of((short) 6), Optional.of((short) 234), Optional.empty()));
+ jdkVersions.put("11.0.6u234",
+ new JDKVersion((short) 11, Optional.of((short) 0),
Optional.of((short) 6), Optional.of((short) 234), Optional.empty()));
+
+ for (Entry<String, JDKVersion> version : jdkVersions.entrySet()) {
+
assertTrue(JDKVersion.toValue(version.getKey()).equals(version.getValue()),
version.getKey());
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists