You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2020/12/16 00:43:37 UTC
[servicecomb-java-chassis] branch master updated: [SCB-2162]upgrade
spring framerok to 5.2.9.RELEASE and spring boot to 2.3.4.RELEASE
This is an automated email from the ASF dual-hosted git repository.
wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 58e61d8 [SCB-2162]upgrade spring framerok to 5.2.9.RELEASE and spring boot to 2.3.4.RELEASE
58e61d8 is described below
commit 58e61d8fbcde839af8bffa312a538a8df551b0be
Author: liubao <bi...@qq.com>
AuthorDate: Tue Dec 15 18:53:08 2020 +0800
[SCB-2162]upgrade spring framerok to 5.2.9.RELEASE and spring boot to 2.3.4.RELEASE
---
.../core/ConfigurationSpringInitializer.java | 14 +----
.../jaxrs/client/CodeFirstRestTemplateJaxrs.java | 2 +-
.../jaxrs/client/MultiErrorCodeServiceClient.java | 5 +-
demo/demo-jaxrs/pom.xml | 1 -
.../IConfigurationEndpoint.java | 4 ++
.../demo/multiServiceCenterClient/ServerBTest.java | 9 +++
.../ConfigurationEndpoint.java | 25 ++++++++
.../{microservice.yaml => application.properties} | 11 +---
.../src/main/resources/microservice.yaml | 4 ++
dependencies/default/pom.xml | 27 +--------
.../config/LastPropertyPlaceholderConfigurer.java | 4 +-
.../TestLastPropertyPlaceholderConfigurer.java | 4 +-
integration-tests/it-consumer/pom.xml | 1 -
integration-tests/pom.xml | 18 +-----
.../generator-spring-data/pom.xml | 5 --
.../generator/springdata/SpringDataModule.java | 66 ++++++++++++++++++++--
.../springdata/TestPageResponseTypeProcessor.java | 25 +++++---
17 files changed, 137 insertions(+), 88 deletions(-)
diff --git a/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java b/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java
index 9d11189..dfe9413 100644
--- a/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java
+++ b/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java
@@ -35,8 +35,8 @@ import org.apache.servicecomb.foundation.bootstrap.BootStrapService;
import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.EnvironmentAware;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.Ordered;
import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
@@ -47,7 +47,6 @@ import org.springframework.core.env.PropertySource;
import org.springframework.util.StringUtils;
import com.netflix.config.ConfigurationManager;
-import com.netflix.config.DynamicPropertyFactory;
/**
* Adapt spring PropertySource and Archaius Configuration
@@ -64,7 +63,7 @@ import com.netflix.config.DynamicPropertyFactory;
* related to precedence of a KEY-VAlUE. That is cse.test in dynamic config may not override servicecomb.test in yml.
* Users need to use the same key as what is in config file to override.
*/
-public class ConfigurationSpringInitializer extends PropertyPlaceholderConfigurer implements EnvironmentAware {
+public class ConfigurationSpringInitializer extends PropertySourcesPlaceholderConfigurer implements EnvironmentAware {
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationSpringInitializer.class);
public static final String EXTRA_CONFIG_SOURCE_PREFIX = "extraConfig-";
@@ -185,15 +184,6 @@ public class ConfigurationSpringInitializer extends PropertyPlaceholderConfigure
return properties;
}
- @Override
- protected String resolvePlaceholder(String placeholder, Properties props) {
- String propertyValue = super.resolvePlaceholder(placeholder, props);
- if (propertyValue == null) {
- return DynamicPropertyFactory.getInstance().getStringProperty(placeholder, null).get();
- }
- return propertyValue;
- }
-
/**
* Try to get a name for identifying the environment.
* @param environment the target that the name is generated for.
diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CodeFirstRestTemplateJaxrs.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CodeFirstRestTemplateJaxrs.java
index fc33127..b44dd45 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CodeFirstRestTemplateJaxrs.java
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CodeFirstRestTemplateJaxrs.java
@@ -118,6 +118,6 @@ public class CodeFirstRestTemplateJaxrs extends CodeFirstRestTemplate {
}
}
TestMgr.check(404, exception.getRawStatusCode());
- TestMgr.check("404 Not Found", exception.getMessage());
+ TestMgr.check("404 Not Found: [{\"message\":\"Not Found\"}]", exception.getMessage());
}
}
diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java
index 42031f5..0e588cc 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/MultiErrorCodeServiceClient.java
@@ -103,7 +103,10 @@ public class MultiErrorCodeServiceClient implements CategorizedTestCase {
.postForEntity(serverDirectURL + "/MultiErrorCodeService/errorCode", entity, MultiResponse200.class);
} catch (HttpClientErrorException e) {
TestMgr.check(e.getRawStatusCode(), 400);
- TestMgr.check(e.getMessage(), "400 Bad Request");
+ TestMgr.check(e.getMessage(),
+ "400 Bad Request: [{\"message\":\"Parameter is not valid for operation "
+ + "[jaxrs.MultiErrorCodeService.errorCode]. Parameter is [request]. "
+ + "Processor is [body].\"}]");
}
entity = new HttpEntity<>(null, headers);
diff --git a/demo/demo-jaxrs/pom.xml b/demo/demo-jaxrs/pom.xml
index 26cdc51..47d9521 100644
--- a/demo/demo-jaxrs/pom.xml
+++ b/demo/demo-jaxrs/pom.xml
@@ -43,7 +43,6 @@
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
- <version>2.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/IConfigurationEndpoint.java b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/IConfigurationEndpoint.java
index dc72a9f..b237db5 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/IConfigurationEndpoint.java
+++ b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/IConfigurationEndpoint.java
@@ -17,6 +17,10 @@
package org.apache.servicecomb.demo.multiServiceCenterClient;
+import java.util.List;
+
public interface IConfigurationEndpoint {
String getValue(String key, int type);
+
+ List<String> getValueList(String key, int type);
}
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/ServerBTest.java b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/ServerBTest.java
index 42c3c62..cbb2b42 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/ServerBTest.java
+++ b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/ServerBTest.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.demo.multiServiceCenterClient;
+import java.util.Arrays;
+
import org.apache.servicecomb.demo.CategorizedTestCase;
import org.apache.servicecomb.demo.TestMgr;
import org.apache.servicecomb.provider.pojo.RpcReference;
@@ -49,6 +51,13 @@ public class ServerBTest implements CategorizedTestCase {
TestMgr.check("key5-high", configurationEndpoint.getValue("demo.multi.service.center.serverB.key5", 1));
TestMgr.check("key5-high", configurationEndpoint.getValue("demo.multi.service.center.serverB.key5", 2));
TestMgr.check("key5-high", configurationEndpoint.getValue("demo.multi.service.center.serverB.key5", 3));
+ TestMgr.check("key6", configurationEndpoint.getValue("demo.multi.service.center.serverB.key6", 1));
+ TestMgr.check("key6", configurationEndpoint.getValue("demo.multi.service.center.serverB.key6", 2));
+ TestMgr.check("key6", configurationEndpoint.getValue("demo.multi.service.center.serverB.key6", 3));
+ TestMgr.check(Arrays.asList("key71", "key72"),
+ configurationEndpoint.getValueList("demo.multi.service.center.serverB.key7", 1));
+ TestMgr.check(Arrays.asList("key71", "key72"),
+ configurationEndpoint.getValueList("demo.multi.service.center.serverB.key7", 2));
}
@Override
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/java/org/apache/servicecomb/demo/multiServiceCenterServerB/ConfigurationEndpoint.java b/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/java/org/apache/servicecomb/demo/multiServiceCenterServerB/ConfigurationEndpoint.java
index 19be127..ec0b8f4 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/java/org/apache/servicecomb/demo/multiServiceCenterServerB/ConfigurationEndpoint.java
+++ b/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/java/org/apache/servicecomb/demo/multiServiceCenterServerB/ConfigurationEndpoint.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.demo.multiServiceCenterServerB;
+import java.util.List;
+
import javax.ws.rs.core.MediaType;
import org.apache.servicecomb.provider.rest.common.RestSchema;
@@ -55,6 +57,12 @@ public class ConfigurationEndpoint {
@Value("${demo.multi.service.center.serverB.key5}")
private String key5;
+ @Value("${demo.multi.service.center.serverB.key6}")
+ private String key6;
+
+ @Value("${demo.multi.service.center.serverB.key7}")
+ private List<String> key7;
+
@GetMapping(path = "/config")
public String getValue(@RequestParam(name = "key") String key, @RequestParam(name = "type") int type) {
if (type == 1) {
@@ -73,6 +81,23 @@ public class ConfigurationEndpoint {
return key4;
case "demo.multi.service.center.serverB.key5":
return key5;
+ case "demo.multi.service.center.serverB.key6":
+ return key6;
+ default:
+ return null;
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @GetMapping(path = "/configList")
+ public List<String> getValueList(@RequestParam(name = "key") String key, @RequestParam(name = "type") int type) {
+ if (type == 1) {
+ return environment.getProperty(key, List.class);
+ } else {
+ switch (key) {
+ case "demo.multi.service.center.serverB.key7":
+ return key7;
default:
return null;
}
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml b/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/application.properties
similarity index 85%
copy from demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml
copy to demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/application.properties
index ff62f18..6072aab 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml
+++ b/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/application.properties
@@ -15,11 +15,6 @@
## limitations under the License.
## ---------------------------------------------------------------------------
-servicecomb-config-order: 1
-
-demo.multi.service.center.serverB:
- key1: key1-override
- key2: key2-override
- key5: key5
- actual:
- key5: key5-high
+demo.multi.service.center.serverB.actual.key6=key6
+demo.multi.service.center.serverB.actual.key7.1=key71
+demo.multi.service.center.serverB.actual.key7.2=key72
\ No newline at end of file
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml b/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml
index ff62f18..52cd6c8 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml
+++ b/demo/demo-multi-service-center/demo-multi-service-center-serverB/src/main/resources/microservice.yaml
@@ -23,3 +23,7 @@ demo.multi.service.center.serverB:
key5: key5
actual:
key5: key5-high
+ key6: ${demo.multi.service.center.serverB.actual.key6}
+ key7:
+ - ${demo.multi.service.center.serverB.actual.key7.1}
+ - ${demo.multi.service.center.serverB.actual.key7.2}
\ No newline at end of file
diff --git a/dependencies/default/pom.xml b/dependencies/default/pom.xml
index 9f1117e..c2b3b19 100644
--- a/dependencies/default/pom.xml
+++ b/dependencies/default/pom.xml
@@ -46,8 +46,6 @@
<commons-logging.version>1.2</commons-logging.version>
<cxf.version>3.3.1</cxf.version>
<dyuproject-protostuff.version>1.0.7.fixed.3500</dyuproject-protostuff.version>
- <embed.version>8.5.32</embed.version>
- <embed-logging-juli.version>8.5.2</embed-logging-juli.version>
<esotericsoftware.version>4.0.2</esotericsoftware.version>
<findbugs-annotations.version>2.0.0</findbugs-annotations.version>
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
@@ -99,8 +97,8 @@
<slf4j.version>1.7.30</slf4j.version>
<snakeyaml.version>1.27</snakeyaml.version>
<spectator.version>0.83.0</spectator.version>
- <spring.version>5.1.14.RELEASE</spring.version>
- <spring-boot.version>2.1.6.RELEASE</spring-boot.version>
+ <spring.version>5.2.9.RELEASE</spring.version>
+ <spring-boot.version>2.3.4.RELEASE</spring-boot.version>
<stax2-api.version>4.2</stax2-api.version>
<swagger.version>1.5.24</swagger.version>
<swagger2markup.version>1.3.3</swagger2markup.version>
@@ -667,27 +665,6 @@
</dependency>
<dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-core</artifactId>
- <version>${embed.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-el</artifactId>
- <version>${embed.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-logging-juli</artifactId>
- <version>${embed-logging-juli.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-websocket</artifactId>
- <version>${embed.version}</version>
- </dependency>
-
- <dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LastPropertyPlaceholderConfigurer.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LastPropertyPlaceholderConfigurer.java
index 374334e..769582f 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LastPropertyPlaceholderConfigurer.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LastPropertyPlaceholderConfigurer.java
@@ -20,7 +20,7 @@ package org.apache.servicecomb.config;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
@@ -36,6 +36,6 @@ public class LastPropertyPlaceholderConfigurer implements BeanFactoryPostProcess
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
- new PropertyPlaceholderConfigurer().postProcessBeanFactory(beanFactory);
+ new PropertySourcesPlaceholderConfigurer().postProcessBeanFactory(beanFactory);
}
}
diff --git a/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestLastPropertyPlaceholderConfigurer.java b/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestLastPropertyPlaceholderConfigurer.java
index d3d8491..223820c 100644
--- a/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestLastPropertyPlaceholderConfigurer.java
+++ b/foundations/foundation-config/src/test/java/org/apache/servicecomb/config/TestLastPropertyPlaceholderConfigurer.java
@@ -22,15 +22,15 @@ import java.util.Properties;
import org.junit.Assert;
import org.junit.Test;
-import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.stereotype.Component;
import org.springframework.util.StringValueResolver;
public class TestLastPropertyPlaceholderConfigurer {
@Component
- static class Bean extends PropertyPlaceholderConfigurer implements EmbeddedValueResolverAware {
+ static class Bean extends PropertySourcesPlaceholderConfigurer implements EmbeddedValueResolverAware {
StringValueResolver resolver;
public Bean() {
diff --git a/integration-tests/it-consumer/pom.xml b/integration-tests/it-consumer/pom.xml
index 5b5cc6d..a128a7c 100644
--- a/integration-tests/it-consumer/pom.xml
+++ b/integration-tests/it-consumer/pom.xml
@@ -36,7 +36,6 @@
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
- <scope>compile</scope>
</dependency>
<dependency>
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 79de6fb..922a6cb 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -70,23 +70,7 @@
<version>${project.version}</version>
<type>test-jar</type>
</dependency>
- <dependency>
- <groupId>io.zipkin.zipkin2</groupId>
- <artifactId>zipkin</artifactId>
- <version>2.9.3</version>
- </dependency>
- <dependency>
- <groupId>io.zipkin.zipkin2</groupId>
- <artifactId>zipkin-junit</artifactId>
- <version>2.9.3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.squareup.okhttp3</groupId>
- <artifactId>okhttp</artifactId>
- <version>3.10.0</version>
- <scope>test</scope>
- </dependency>
+
</dependencies>
</dependencyManagement>
<dependencies>
diff --git a/swagger/swagger-generator/generator-spring-data/pom.xml b/swagger/swagger-generator/generator-spring-data/pom.xml
index c33169f..0b8e9d5 100644
--- a/swagger/swagger-generator/generator-spring-data/pom.xml
+++ b/swagger/swagger-generator/generator-spring-data/pom.xml
@@ -37,11 +37,6 @@
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
- <!-- based on business project dependency -->
- <optional>true</optional>
- <scope>provided</scope>
- <!-- This is provided scope, better not add to dependency management, so add version here -->
- <version>2.1.9.RELEASE</version>
</dependency>
</dependencies>
diff --git a/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java b/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
index e8e06e4..7a56e72 100644
--- a/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
+++ b/swagger/swagger-generator/generator-spring-data/src/main/java/org/apache/servicecomb/swagger/generator/springdata/SpringDataModule.java
@@ -16,6 +16,8 @@
*/
package org.apache.servicecomb.swagger.generator.springdata;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.apache.servicecomb.foundation.common.utils.SPIOrder;
@@ -24,12 +26,17 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Order;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.fasterxml.jackson.databind.util.Converter;
public class SpringDataModule extends SimpleModule implements SPIOrder {
private static final long serialVersionUID = 1L;
@@ -53,14 +60,63 @@ public class SpringDataModule extends SimpleModule implements SPIOrder {
}
}
+ public static class SortConverter implements Converter<SortMixin, Sort> {
+ @Override
+ public Sort convert(SortMixin value) {
+ return Sort.by(value.getProperties());
+ }
+
+ @Override
+ public JavaType getInputType(TypeFactory typeFactory) {
+ return typeFactory.constructType(SortMixin.class);
+ }
+
+ @Override
+ public JavaType getOutputType(TypeFactory typeFactory) {
+ return typeFactory.constructType(Sort.class);
+ }
+ }
+
+ public static class SortMixinConverter implements Converter<Sort, SortMixin> {
+ @Override
+ public SortMixin convert(Sort value) {
+ List<String> properties = new ArrayList<>();
+ Iterator<Order> iterator = value.iterator();
+ while (iterator.hasNext()) {
+ properties.add(iterator.next().getProperty());
+ }
+ SortMixin result = new SortMixin();
+ result.setProperties(properties.toArray(new String[0]));
+ return result;
+ }
+
+ @Override
+ public JavaType getInputType(TypeFactory typeFactory) {
+ return typeFactory.constructType(Sort.class);
+ }
+
+ @Override
+ public JavaType getOutputType(TypeFactory typeFactory) {
+ return typeFactory.constructType(SortMixin.class);
+ }
+ }
+
@JsonPropertyOrder(alphabetic = true)
- @JsonDeserialize(as = Sort.class)
+ @JsonDeserialize(converter = SortConverter.class)
+ @JsonSerialize(converter = SortMixinConverter.class)
public static class SortMixin {
- // Notice:
- // spring data model changed from version to version
- // for the tested version, sort is not consistency in serialization and deserialization
+ private String[] properties;
+
@JsonCreator
- public SortMixin(String... properties) {
+ public SortMixin() {
+ }
+
+ public void setProperties(String[] properties) {
+ this.properties = properties;
+ }
+
+ public String[] getProperties() {
+ return this.properties;
}
}
diff --git a/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java b/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
index 5ae8c09..38ddaa2 100644
--- a/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
+++ b/swagger/swagger-generator/generator-spring-data/src/test/java/org/apache/servicecomb/swagger/generator/springdata/TestPageResponseTypeProcessor.java
@@ -17,11 +17,17 @@
package org.apache.servicecomb.swagger.generator.springdata;
import java.io.IOException;
+import java.util.Arrays;
import org.apache.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
import io.swagger.util.Json;
@@ -39,14 +45,17 @@ public class TestPageResponseTypeProcessor {
public void deserialize() throws IOException {
Json.mapper().registerModule(new SpringDataModule());
- String json = "{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"pageNumber\":1,\"pageSize\":2}}";
- Page<?> page = Json.mapper().readValue(json, Page.class);
-
+ Sort sort = Sort.by(Direction.ASC, "name");
+ Pageable pageable = PageRequest.of(1, 10, sort);
+ Page<String> page = new PageImpl<>(Arrays.asList("c1", "c2"), pageable, 2);
+ String json = Json.mapper().writeValueAsString(page);
Assert.assertEquals(
- "{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"pageNumber\":1,\"pageSize\":2,"
- + "\"offset\":2,\"paged\":true,\"unpaged\":false},\"empty\":false,\"first\":false,"
- + "\"last\":true,\"number\":1,\"numberOfElements\":2,\"size\":2,"
- + "\"totalElements\":4,\"totalPages\":2}",
- Json.mapper().writeValueAsString(page));
+ "{\"content\":[\"c1\",\"c2\"],\"pageable\":{\"pageNumber\":1,\"pageSize\":10,\"sort\":{\"properties\":[\"name\"]},\"offset\":10,\"paged\":true,\"unpaged\":false},\"empty\":false,\"first\":false,\"last\":true,\"number\":1,\"numberOfElements\":2,\"size\":10,\"sort\":{\"properties\":[\"name\"]},\"totalElements\":12,\"totalPages\":2}",
+ json);
+
+ Page<?> page2 = Json.mapper().readValue(json, Page.class);
+
+ Assert.assertEquals(json,
+ Json.mapper().writeValueAsString(page2));
}
}