From a55560669b5e2e4153c90993789af8af6459b378 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 22 Jun 2022 20:20:28 +0100 Subject: [PATCH] Remove YamlJsonParser Closes gh-31498 --- .../springframework/boot/json/JsonParser.java | 3 +- .../boot/json/JsonParserFactory.java | 8 +- .../boot/json/YamlJsonParser.java | 75 ------------------- .../boot/json/YamlJsonParserTests.java | 56 -------------- 4 files changed, 3 insertions(+), 139 deletions(-) delete mode 100644 spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/YamlJsonParser.java delete mode 100644 spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/YamlJsonParserTests.java diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParser.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParser.java index bd9f538954..9693fcec74 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParser.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,6 @@ import java.util.Map; * @see BasicJsonParser * @see JacksonJsonParser * @see GsonJsonParser - * @see YamlJsonParser */ public interface JsonParser { diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParserFactory.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParserFactory.java index 457749114b..33711f6022 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParserFactory.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonParserFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,14 +25,13 @@ import org.springframework.util.ClassUtils; * @since 1.0.0 * @see JacksonJsonParser * @see GsonJsonParser - * @see YamlJsonParser * @see BasicJsonParser */ public abstract class JsonParserFactory { /** * Static factory for the "best" JSON parser available on the classpath. Tries - * Jackson, then Gson, Snake YAML, and then falls back to the {@link BasicJsonParser}. + * Jackson, then Gson, and then falls back to the {@link BasicJsonParser}. * @return a {@link JsonParser} */ public static JsonParser getJsonParser() { @@ -42,9 +41,6 @@ public abstract class JsonParserFactory { if (ClassUtils.isPresent("com.google.gson.Gson", null)) { return new GsonJsonParser(); } - if (ClassUtils.isPresent("org.yaml.snakeyaml.Yaml", null)) { - return new YamlJsonParser(); - } return new BasicJsonParser(); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/YamlJsonParser.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/YamlJsonParser.java deleted file mode 100644 index 255c467007..0000000000 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/YamlJsonParser.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2012-2020 the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.boot.json; - -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.Constructor; - -import org.springframework.util.Assert; - -/** - * Thin wrapper to adapt Snake {@link Yaml} to {@link JsonParser}. - * - * @author Dave Syer - * @author Jean de Klerk - * @since 1.0.0 - * @see JsonParserFactory - */ -public class YamlJsonParser extends AbstractJsonParser { - - private final Yaml yaml = new Yaml(new TypeLimitedConstructor()); - - @Override - @SuppressWarnings("unchecked") - public Map parseMap(String json) { - return parseMap(json, (trimmed) -> this.yaml.loadAs(trimmed, Map.class)); - } - - @Override - @SuppressWarnings("unchecked") - public List parseList(String json) { - return parseList(json, (trimmed) -> this.yaml.loadAs(trimmed, List.class)); - } - - private static class TypeLimitedConstructor extends Constructor { - - private static final Set SUPPORTED_TYPES; - static { - Set> supportedTypes = new LinkedHashSet<>(); - supportedTypes.add(List.class); - supportedTypes.add(Map.class); - SUPPORTED_TYPES = supportedTypes.stream().map(Class::getName) - .collect(Collectors.collectingAndThen(Collectors.toSet(), Collections::unmodifiableSet)); - } - - @Override - protected Class getClassForName(String name) throws ClassNotFoundException { - Assert.state(SUPPORTED_TYPES.contains(name), - () -> "Unsupported '" + name + "' type encountered in YAML document"); - return super.getClassForName(name); - } - - } - -} diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/YamlJsonParserTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/YamlJsonParserTests.java deleted file mode 100644 index 7df627fa0a..0000000000 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/YamlJsonParserTests.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2012-2022 the original author or authors. - * - * Licensed 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 - * - * https://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.springframework.boot.json; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.yaml.snakeyaml.constructor.ConstructorException; - -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; - -/** - * Tests for {@link YamlJsonParser}. - * - * @author Dave Syer - */ -class YamlJsonParserTests extends AbstractJsonParserTests { - - @Override - protected JsonParser getParser() { - return new YamlJsonParser(); - } - - @Test - void customTypesAreNotLoaded() { - assertThatExceptionOfType(ConstructorException.class) - .isThrownBy(() -> getParser().parseMap("{value: !!java.net.URL [\"http://localhost:9000/\"]}")) - .withCauseInstanceOf(IllegalStateException.class); - } - - @Test - @Override - @Disabled("SnakeYaml does not fail when a map is malformed") - void listWithMalformedMap() { - } - - @Test - @Override - @Disabled("SnakeYaml does not fail when a map has a key with no value") - void mapWithKeyAndNoValue() { - } - -}