diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandBasedModelProvider.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandBasedModelProvider.java index 1ab0d9979..b8b51417c 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandBasedModelProvider.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandBasedModelProvider.java @@ -22,6 +22,7 @@ import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.CollectorUtil; import org.springframework.ide.vscode.commons.util.ExternalCommand; import org.springframework.ide.vscode.commons.util.ExternalProcess; +import org.springframework.ide.vscode.commons.util.GsonUtil; import org.springframework.ide.vscode.commons.util.Log; import org.springframework.ide.vscode.commons.util.StringUtil; import org.springframework.ide.vscode.commons.util.text.LanguageId; @@ -143,7 +144,7 @@ public abstract class BoshCommandBasedModelProvider implements DynamicModelPr protected Collection getNames(JSONCursor _cursor, YamlTraversal path) { return path.traverseAmbiguously(_cursor) .flatMap((cursor) -> { - String text = cursor.target.getAsString(); + String text = GsonUtil.getAsString(cursor.target); if (StringUtil.hasText(text)) { return Stream.of(text); } else { diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java index 9f017e048..e3212eae6 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandReleasesProvider.java @@ -15,6 +15,7 @@ import java.util.List; import org.springframework.ide.vscode.bosh.BoshCliConfig; import org.springframework.ide.vscode.commons.util.CollectorUtil; +import org.springframework.ide.vscode.commons.util.GsonUtil; import org.springframework.ide.vscode.commons.yaml.path.YamlPath; import org.springframework.ide.vscode.commons.yaml.path.YamlTraversal; import org.springframework.ide.vscode.commons.yaml.schema.DynamicSchemaContext; @@ -56,7 +57,7 @@ public class BoshCommandReleasesProvider extends BoshCommandBasedModelProvider< private String getStringProperty(JSONCursor c, String prop) { c = YamlPath.EMPTY.thenValAt(prop).traverse(c); if (c!=null) { - return c.target.getAsString(); + return GsonUtil.getAsString(c.target); } return null; } diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandStemcellsProvider.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandStemcellsProvider.java index 723cd3eab..9f5cc164e 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandStemcellsProvider.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandStemcellsProvider.java @@ -15,6 +15,7 @@ import java.util.Collection; import org.springframework.ide.vscode.bosh.BoshCliConfig; import org.springframework.ide.vscode.commons.util.CollectorUtil; import org.springframework.ide.vscode.commons.util.ExternalCommand; +import org.springframework.ide.vscode.commons.util.GsonUtil; import org.springframework.ide.vscode.commons.yaml.path.YamlPath; import org.springframework.ide.vscode.commons.yaml.path.YamlTraversal; import org.springframework.ide.vscode.commons.yaml.schema.DynamicSchemaContext; @@ -64,7 +65,7 @@ public class BoshCommandStemcellsProvider extends BoshCommandBasedModelProvider< private String getStringProperty(JSONCursor c, String prop) { c = YamlPath.EMPTY.thenValAt(prop).traverse(c); if (c!=null) { - return c.target.getAsString(); + return GsonUtil.getAsString(c.target); } return null; } diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/GsonUtil.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/GsonUtil.java index 16bac0632..56351fd2c 100644 --- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/GsonUtil.java +++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/GsonUtil.java @@ -52,4 +52,13 @@ public class GsonUtil { return Stream.empty(); } } + + public static String getAsString(JsonElement target) { + // Need to check if it is a primitive before get as string, otherwise + // exceptions can be thrown. See the JsonElement javadoc + if (target != null && target.isJsonPrimitive()) { + return target.getAsString(); + } + return null; + } }