From 73cf5d418a67163a183b22222da84c7ad21ceec5 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 24 Apr 2018 10:13:58 +0100 Subject: [PATCH] Update to Boot 1.5.12 --- pom.xml | 13 +- ...ttpMessageConvertersAutoConfiguration.java | 221 ------------------ .../main/resources/META-INF/spring.factories | 3 +- 3 files changed, 11 insertions(+), 226 deletions(-) delete mode 100644 spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/flux/GsonHttpMessageConvertersAutoConfiguration.java diff --git a/pom.xml b/pom.xml index caa171b35..f92810c8f 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-build - 1.3.8.RELEASE + 1.3.9.RELEASE @@ -18,8 +18,8 @@ 1.8 Ditmars.SR3 1.1.2.RELEASE - 1.0.9.RELEASE - 1.5.11.RELEASE + 1.0.10.RELEASE + 1.5.12.RELEASE spring-cloud-function @@ -46,6 +46,13 @@ pom import + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/flux/GsonHttpMessageConvertersAutoConfiguration.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/flux/GsonHttpMessageConvertersAutoConfiguration.java deleted file mode 100644 index 08f917733..000000000 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/flux/GsonHttpMessageConvertersAutoConfiguration.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright 2016-2017 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 - * - * 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.springframework.cloud.function.web.flux; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.lang.reflect.Type; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; - -import com.google.gson.Gson; -import com.google.gson.JsonIOException; -import com.google.gson.JsonParseException; -import com.google.gson.reflect.TypeToken; - -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.web.HttpMessageConverters; -import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpInputMessage; -import org.springframework.http.HttpOutputMessage; -import org.springframework.http.MediaType; -import org.springframework.http.converter.AbstractGenericHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.HttpMessageNotReadableException; -import org.springframework.http.converter.HttpMessageNotWritableException; -import org.springframework.http.converter.json.GsonHttpMessageConverter; -import org.springframework.util.Assert; - -// TODO: remove this when https://jira.spring.io/browse/SPR-16529 is resolved -@Configuration -@ConditionalOnClass(HttpMessageConverters.class) -@AutoConfigureBefore(HttpMessageConvertersAutoConfiguration.class) -public class GsonHttpMessageConvertersAutoConfiguration { - - @Bean - public HttpMessageConverters httpMessageConverters(Gson gson) { - List> converters = new ArrayList<>(); - for (HttpMessageConverter converter : new HttpMessageConverters() - .getConverters()) { - if (converter instanceof GsonHttpMessageConverter) { - BetterGsonHttpMessageConverter gsonConverter = new BetterGsonHttpMessageConverter(); - gsonConverter.setGson(gson); - converters.add(gsonConverter); - } - else { - converters.add(converter); - } - } - return new HttpMessageConverters(false, converters); - } - -} - -class BetterGsonHttpMessageConverter extends AbstractGenericHttpMessageConverter { - - public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); - - private Gson gson = new Gson(); - - private String jsonPrefix; - - /** - * Construct a new {@code GsonHttpMessageConverter}. - */ - public BetterGsonHttpMessageConverter() { - super(MediaType.APPLICATION_JSON, new MediaType("application", "*+json")); - this.setDefaultCharset(DEFAULT_CHARSET); - } - - /** - * Set the {@code Gson} instance to use. If not set, a default {@link Gson#Gson() - * Gson} instance is used. - *

- * Setting a custom-configured {@code Gson} is one way to take further control of the - * JSON serialization process. - */ - public void setGson(Gson gson) { - Assert.notNull(gson, "'gson' is required"); - this.gson = gson; - } - - /** - * Return the configured {@code Gson} instance for this converter. - */ - public Gson getGson() { - return this.gson; - } - - /** - * Specify a custom prefix to use for JSON output. Default is none. - * @see #setPrefixJson - */ - public void setJsonPrefix(String jsonPrefix) { - this.jsonPrefix = jsonPrefix; - } - - /** - * Indicate whether the JSON output by this view should be prefixed with ")]}', ". - * Default is {@code false}. - *

- * Prefixing the JSON string in this manner is used to help prevent JSON Hijacking. - * The prefix renders the string syntactically invalid as a script so that it cannot - * be hijacked. This prefix should be stripped before parsing the string as JSON. - * @see #setJsonPrefix - */ - public void setPrefixJson(boolean prefixJson) { - this.jsonPrefix = (prefixJson ? ")]}', " : null); - } - - @Override - public Object read(Type type, Class contextClass, HttpInputMessage inputMessage) - throws IOException, HttpMessageNotReadableException { - - TypeToken token = getTypeToken(type); - return readTypeToken(token, inputMessage); - } - - @Override - protected Object readInternal(Class clazz, HttpInputMessage inputMessage) - throws IOException, HttpMessageNotReadableException { - - TypeToken token = getTypeToken(clazz); - return readTypeToken(token, inputMessage); - } - - /** - * Return the Gson {@link TypeToken} for the specified type. - *

- * The default implementation returns {@code TypeToken.get(type)}, but this can be - * overridden in subclasses to allow for custom generic collection handling. For - * instance: - * - *

-	 * protected TypeToken getTypeToken(Type type) {
-	 * 	if (type instanceof Class && List.class.isAssignableFrom((Class) type)) {
-	 * 		return new TypeToken>() {
-	 * 		};
-	 * 	}
-	 * 	else {
-	 * 		return super.getTypeToken(type);
-	 * 	}
-	 * }
-	 * 
- * - * @param type the type for which to return the TypeToken - * @return the type token - * @deprecated as of Spring Framework 4.3.8, in favor of signature-based resolution - */ - @Deprecated - protected TypeToken getTypeToken(Type type) { - return TypeToken.get(type); - } - - private Object readTypeToken(TypeToken token, HttpInputMessage inputMessage) - throws IOException { - Reader json = new InputStreamReader(inputMessage.getBody(), - getCharset(inputMessage.getHeaders())); - try { - return this.gson.fromJson(json, token.getType()); - } - catch (JsonParseException ex) { - throw new HttpMessageNotReadableException( - "JSON parse error: " + ex.getMessage(), ex); - } - } - - private Charset getCharset(HttpHeaders headers) { - if (headers == null || headers.getContentType() == null - || headers.getContentType().getCharset() == null) { - return DEFAULT_CHARSET; - } - return headers.getContentType().getCharset(); - } - - @Override - protected void writeInternal(Object o, Type type, HttpOutputMessage outputMessage) - throws IOException, HttpMessageNotWritableException { - - Charset charset = getCharset(outputMessage.getHeaders()); - OutputStreamWriter writer = new OutputStreamWriter(outputMessage.getBody(), - charset); - try { - if (this.jsonPrefix != null) { - writer.append(this.jsonPrefix); - } - if (type != null) { - this.gson.toJson(o, type, writer); - } - else { - this.gson.toJson(o, writer); - } - writer.flush(); - } - catch (JsonIOException ex) { - throw new HttpMessageNotWritableException( - "Could not write JSON: " + ex.getMessage(), ex); - } - } - -} diff --git a/spring-cloud-function-web/src/main/resources/META-INF/spring.factories b/spring-cloud-function-web/src/main/resources/META-INF/spring.factories index 28b9bbf0d..b37259d61 100644 --- a/spring-cloud-function-web/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-function-web/src/main/resources/META-INF/spring.factories @@ -1,3 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.function.web.flux.ReactorAutoConfiguration,\ -org.springframework.cloud.function.web.flux.GsonHttpMessageConvertersAutoConfiguration \ No newline at end of file +org.springframework.cloud.function.web.flux.ReactorAutoConfiguration