diff --git a/policy/src/main/java/dev/cel/policy/BUILD.bazel b/policy/src/main/java/dev/cel/policy/BUILD.bazel index 546853bb..bc96866b 100644 --- a/policy/src/main/java/dev/cel/policy/BUILD.bazel +++ b/policy/src/main/java/dev/cel/policy/BUILD.bazel @@ -117,7 +117,6 @@ java_library( ":value_string", ":yaml_helper", "//common:compiler_common", - "//common:source_location", "//common/internal", "@maven//:com_google_guava_guava", "@maven//:org_yaml_snakeyaml", diff --git a/policy/src/main/java/dev/cel/policy/CelPolicyYamlConfigParser.java b/policy/src/main/java/dev/cel/policy/CelPolicyYamlConfigParser.java index 6d84c8fc..204125b7 100644 --- a/policy/src/main/java/dev/cel/policy/CelPolicyYamlConfigParser.java +++ b/policy/src/main/java/dev/cel/policy/CelPolicyYamlConfigParser.java @@ -338,7 +338,13 @@ private CelPolicyConfig parseYaml(String source, String description) throws CelPolicyValidationException { Node node; try { - node = parseYamlSource(source); + Node yamlNode = + parseYamlSource(source) + .orElseThrow( + () -> + new CelPolicyValidationException( + String.format("YAML document is malformed: %s", source))); + node = yamlNode; } catch (RuntimeException e) { throw new CelPolicyValidationException("YAML document is malformed: " + e.getMessage(), e); } diff --git a/policy/src/main/java/dev/cel/policy/CelPolicyYamlParser.java b/policy/src/main/java/dev/cel/policy/CelPolicyYamlParser.java index 318f44fb..841dadf0 100644 --- a/policy/src/main/java/dev/cel/policy/CelPolicyYamlParser.java +++ b/policy/src/main/java/dev/cel/policy/CelPolicyYamlParser.java @@ -66,8 +66,15 @@ private static class ParserImpl implements PolicyParserContext { private CelPolicy parseYaml() throws CelPolicyValidationException { Node node; + String policySourceString = policySource.getContent().toString(); try { - node = YamlHelper.parseYamlSource(policySource.getContent().toString()); + Node yamlNode = + YamlHelper.parseYamlSource(policySourceString) + .orElseThrow( + () -> + new CelPolicyValidationException( + String.format("YAML document is malformed: %s", policySourceString))); + node = yamlNode; } catch (RuntimeException e) { throw new CelPolicyValidationException("YAML document is malformed: " + e.getMessage(), e); } diff --git a/policy/src/main/java/dev/cel/policy/YamlHelper.java b/policy/src/main/java/dev/cel/policy/YamlHelper.java index c289c73f..2642cac4 100644 --- a/policy/src/main/java/dev/cel/policy/YamlHelper.java +++ b/policy/src/main/java/dev/cel/policy/YamlHelper.java @@ -20,6 +20,7 @@ import com.google.common.base.Joiner; import java.io.StringReader; import java.util.List; +import java.util.Optional; import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.SafeConstructor; @@ -68,10 +69,9 @@ public static boolean assertYamlType( return false; } - static Node parseYamlSource(String policyContent) { + static Optional parseYamlSource(String policyContent) { Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions())); - - return yaml.compose(new StringReader(policyContent)); + return Optional.ofNullable(yaml.compose(new StringReader(policyContent))); } static boolean assertRequiredFields(