You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/04/13 08:27:57 UTC
[servicecomb-java-chassis] 02/04: [SCB-1828] Support @JsonView :
add ut
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 3767e7f7ef167fa9654c1eab2e9ff47cf2357f0d
Author: heyile <25...@qq.com>
AuthorDate: Fri Apr 3 01:07:40 2020 +0800
[SCB-1828] Support @JsonView : add ut
---
.../codec/produce/ProduceProcessorManager.java | 2 +-
.../codec/produce/TestProduceJsonProcessor.java | 16 +-
.../produce/TestProduceTextPlainProcessor.java | 11 +
.../rest/definition/TestRestOperationMeta.java | 49 +++-
.../servicecomb/demo/CodeFirstRestTemplate.java | 5 +-
.../foundation/common/utils/RestObjectMapper.java | 3 +
.../servicecomb/it/schema/PersonViewModel.java | 128 +++++++++++
.../org/apache/servicecomb/it/ConsumerMain.java | 4 +
.../servicecomb/it/testcase/TestJsonView.java | 251 +++++++++++++++++++++
.../servicecomb/it/schema/JsonViewJaxrsSchema.java | 96 ++++++++
.../servicecomb/it/schema/JsonViewPojoSchema.java | 69 ++++++
.../it/schema/JsonViewSpringmvcSchema.java | 79 +++++++
12 files changed, 703 insertions(+), 10 deletions(-)
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessorManager.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessorManager.java
index 911b777..b7ad3dc 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessorManager.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/produce/ProduceProcessorManager.java
@@ -53,7 +53,7 @@ public final class ProduceProcessorManager extends RegisterManager<String, Map<S
produceProcessor.forEach(processor -> {
Map<String, ProduceProcessor> prodProcessorMap = getObjMap()
.computeIfAbsent(processor.getName(), key -> new HashMap<>());
- prodProcessorMap.put(processor.getSerializationView(), processor);
+ prodProcessorMap.putIfAbsent(processor.getSerializationView(), processor);
});
jsonProcessorMap = ensureFindValue(MediaType.APPLICATION_JSON);
plainProcessorMap = ensureFindValue(MediaType.TEXT_PLAIN);
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java
index 2a29a2e..f5337f0 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceJsonProcessor.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.common.rest.codec.produce;
+import static org.apache.servicecomb.common.rest.codec.produce.ProduceProcessorManager.DEFAULT_SERIAL_CLASS;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
@@ -32,7 +34,7 @@ import io.vertx.core.buffer.Buffer;
public class TestProduceJsonProcessor {
ProduceProcessor pp = ProduceProcessorManager.INSTANCE.getJsonProcessorMap()
- .get(ProduceProcessorManager.DEFAULT_SERIAL_CLASS);
+ .get(DEFAULT_SERIAL_CLASS);
JavaType stringType = TypeFactory.defaultInstance().constructType(String.class);
@@ -59,7 +61,6 @@ public class TestProduceJsonProcessor {
} catch (Exception e) {
Assert.assertTrue(e instanceof MismatchedInputException);
}
-
}
@Test
@@ -87,4 +88,15 @@ public class TestProduceJsonProcessor {
os.close();
is.close();
}
+
+ @Test
+ public void testSetSerializationView() {
+ Assert.assertEquals(DEFAULT_SERIAL_CLASS, pp.getSerializationView());
+
+ pp.setSerializationView(null);
+ Assert.assertEquals(DEFAULT_SERIAL_CLASS, pp.getSerializationView());
+
+ pp.setSerializationView(Object.class);
+ Assert.assertEquals(Object.class.getCanonicalName(), pp.getSerializationView());
+ }
}
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java
index 2563103..3709f91 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/produce/TestProduceTextPlainProcessor.java
@@ -82,4 +82,15 @@ public class TestProduceTextPlainProcessor {
os.close();
is.close();
}
+
+ @Test
+ public void testSetSerializationView() {
+ Assert.assertEquals(DEFAULT_SERIAL_CLASS, pp.getSerializationView());
+
+ pp.setSerializationView(null);
+ Assert.assertEquals(DEFAULT_SERIAL_CLASS, pp.getSerializationView());
+
+ pp.setSerializationView(Object.class);
+ Assert.assertEquals(DEFAULT_SERIAL_CLASS, pp.getSerializationView());
+ }
}
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java
index f959b78..79ca0bb 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/definition/TestRestOperationMeta.java
@@ -22,6 +22,7 @@ import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import java.io.File;
+import java.lang.annotation.Annotation;
import java.util.Arrays;
import javax.ws.rs.FormParam;
@@ -43,6 +44,8 @@ import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
+import com.fasterxml.jackson.annotation.JsonView;
+
import io.swagger.models.Swagger;
import mockit.Expectations;
import mockit.Mocked;
@@ -215,33 +218,67 @@ public class TestRestOperationMeta {
}
@Test
- public void testEnsureFindProduceProcessorRequest(@Mocked HttpServletRequestEx requestEx) {
+ public void testEnsureFindProduceProcessorRequest(@Mocked HttpServletRequestEx requestEx,
+ @Mocked JsonView annotation) {
findOperation("emptyProduces");
new Expectations() {
{
requestEx.getHeader(HttpHeaders.ACCEPT);
result = null;
+ annotation.value();
+ result = Object.class;
}
};
-
Assert.assertSame(ProduceProcessorManager.INSTANCE.getJsonProcessorMap().get(DEFAULT_SERIAL_CLASS),
operationMeta.ensureFindProduceProcessor(requestEx));
+
+ ProduceProcessor actualProcessor = operationMeta
+ .ensureFindProduceProcessor(requestEx.getHeader(HttpHeaders.ACCEPT), new Annotation[] {annotation});
+ ProduceProcessor expectProcessor = ProduceProcessorManager.INSTANCE.getJsonProcessorMap()
+ .get(Object.class.getCanonicalName());
+ Assert.assertSame(expectProcessor, actualProcessor);
+ Assert.assertEquals(expectProcessor.getSerializationView(), Object.class.getCanonicalName());
}
@Test
- public void testEnsureFindProduceProcessorAcceptFound() {
+ public void testEnsureFindProduceProcessorAcceptFound(@Mocked JsonView annotation) {
findOperation("textCharJsonChar");
-
+ new Expectations() {
+ {
+ annotation.value();
+ result = Object.class;
+ }
+ };
Assert.assertSame(ProduceProcessorManager.INSTANCE.getJsonProcessorMap().get(DEFAULT_SERIAL_CLASS),
operationMeta.ensureFindProduceProcessor("text/plain;q=0.7;charset=utf-8,application/json;q=0.8"));
+
+ ProduceProcessor actualProcessor = operationMeta
+ .ensureFindProduceProcessor("text/plain;q=0.7;charset=utf-8,application/json;q=0.8",
+ new Annotation[] {annotation});
+ ProduceProcessor expectProcessor = ProduceProcessorManager.INSTANCE.getJsonProcessorMap()
+ .get(Object.class.getCanonicalName());
+ Assert.assertSame(expectProcessor, actualProcessor);
+ Assert.assertEquals(expectProcessor.getSerializationView(), Object.class.getCanonicalName());
}
@Test
- public void testEnsureFindProduceProcessorWithDownload() {
+ public void testEnsureFindProduceProcessorWithDownload(@Mocked JsonView annotation) {
findOperation("download");
-
+ new Expectations() {
+ {
+ annotation.value();
+ result = Object.class;
+ }
+ };
Assert.assertSame(ProduceProcessorManager.INSTANCE.getJsonProcessorMap().get(DEFAULT_SERIAL_CLASS),
operationMeta.ensureFindProduceProcessor("text/plain"));
+
+ ProduceProcessor actualProcessor = operationMeta
+ .ensureFindProduceProcessor("text/plain", new Annotation[] {annotation});
+ ProduceProcessor expectProcessor = ProduceProcessorManager.INSTANCE.getJsonProcessorMap()
+ .get(Object.class.getCanonicalName());
+ Assert.assertSame(expectProcessor, actualProcessor);
+ Assert.assertEquals(expectProcessor.getSerializationView(), Object.class.getCanonicalName());
}
@Test
diff --git a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
index 087d518..db0f694 100644
--- a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
+++ b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/CodeFirstRestTemplate.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.demo;
+import static org.apache.servicecomb.common.rest.codec.produce.ProduceProcessorManager.DEFAULT_SERIAL_CLASS;
+
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -146,7 +148,8 @@ public class CodeFirstRestTemplate {
HttpMethod.POST,
requestEntity,
JAXBPerson.class);
- TestMgr.check(-1, ProduceProcessorManager.INSTANCE.ensureFindValue(MediaType.APPLICATION_XML_VALUE).getOrder());
+ TestMgr.check(-1, ProduceProcessorManager.INSTANCE.ensureFindValue(MediaType.APPLICATION_XML_VALUE)
+ .get(DEFAULT_SERIAL_CLASS).getOrder());
TestMgr.check(person, resEntity.getBody());
}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java
index 7a57691..161c12e 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RestObjectMapper.java
@@ -26,6 +26,7 @@ import com.fasterxml.jackson.core.JsonParser.Feature;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
@@ -68,6 +69,8 @@ public class RestObjectMapper extends AbstractRestObjectMapper {
// Developers can use validation api to do more checks.
disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+ // no view annotations shouldn't be included in JSON
+ disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
enable(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS);
enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
diff --git a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/PersonViewModel.java b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/PersonViewModel.java
new file mode 100644
index 0000000..ea086d7
--- /dev/null
+++ b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/PersonViewModel.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicecomb.it.schema;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonView;
+
+public class PersonViewModel {
+ public interface Summary {
+ }
+
+ public interface SummaryWithDetails extends Summary {
+ }
+
+ @JsonView(Summary.class)
+ private String name;
+
+ @JsonView(SummaryWithDetails.class)
+ private int age;
+
+ @JsonView(Summary.class)
+ private String emails;
+
+ @JsonView(SummaryWithDetails.class)
+ private String telephone;
+
+ private double rate;
+
+ public String getName() {
+ return name;
+ }
+
+ public PersonViewModel setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public PersonViewModel setAge(int age) {
+ this.age = age;
+ return this;
+ }
+
+ public String getEmails() {
+ return emails;
+ }
+
+ public PersonViewModel setEmails(String emails) {
+ this.emails = emails;
+ return this;
+ }
+
+ public String getTelephone() {
+ return telephone;
+ }
+
+ public PersonViewModel setTelephone(String telephone) {
+ this.telephone = telephone;
+ return this;
+ }
+
+ public double getRate() {
+ return rate;
+ }
+
+ public PersonViewModel setRate(double rate) {
+ this.rate = rate;
+ return this;
+ }
+
+ public static PersonViewModel generatePersonViewModel() {
+ return new PersonViewModel().setAge(12)
+ .setEmails("xxx@servicecomb.com")
+ .setName("servicecomb")
+ .setRate(99.9)
+ .setTelephone("xxx10--xx");
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ PersonViewModel that = (PersonViewModel) o;
+ return age == that.age &&
+ Double.compare(that.rate, rate) == 0 &&
+ Objects.equals(name, that.name) &&
+ Objects.equals(emails, that.emails) &&
+ Objects.equals(telephone, that.telephone);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, age, emails, telephone, rate);
+ }
+
+ @Override
+ public String toString() {
+ return "PersonViewModel{" +
+ "name='" + name + '\'' +
+ ", age=" + age +
+ ", emails='" + emails + '\'' +
+ ", telephone='" + telephone + '\'' +
+ ", rate=" + rate +
+ '}';
+ }
+}
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
index 1f1b724..eefb630 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
@@ -38,6 +38,7 @@ import org.apache.servicecomb.it.testcase.TestExceptionConvertEdge;
import org.apache.servicecomb.it.testcase.TestGenericEdge;
import org.apache.servicecomb.it.testcase.TestIgnoreMethod;
import org.apache.servicecomb.it.testcase.TestIgnoreStaticMethod;
+import org.apache.servicecomb.it.testcase.TestJsonView;
import org.apache.servicecomb.it.testcase.TestOptional;
import org.apache.servicecomb.it.testcase.TestParamCodec;
import org.apache.servicecomb.it.testcase.TestParamCodecEdge;
@@ -115,6 +116,9 @@ public class ConsumerMain {
ITJUnitUtils.runWithHighwayAndRest(TestAnnotatedAttribute.class);
ITJUnitUtils.runWithHighwayAndRest(TestMyService.class);
+ //only rest support Json view
+ ITJUnitUtils.runWithRest(TestJsonView.class);
+
// only rest support default value feature
ITJUnitUtils.runWithRest(TestDefaultValue.class);
ITJUnitUtils.runWithRest(TestAcceptType.class);
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestJsonView.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestJsonView.java
new file mode 100644
index 0000000..af5a7a2
--- /dev/null
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestJsonView.java
@@ -0,0 +1,251 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicecomb.it.testcase;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.servicecomb.it.Consumers;
+import org.apache.servicecomb.it.schema.PersonViewModel;
+import org.junit.Test;
+
+public class TestJsonView {
+ interface JsonViewRestIntf {
+ PersonViewModel jsonViewDefault();
+
+ PersonViewModel jsonViewDefaultWithSummary();
+
+ PersonViewModel jsonViewDefaultWithSummaryDetails();
+
+ PersonViewModel jsonViewProducesDefault();
+
+ PersonViewModel jsonViewProducesDefaultWithSummary();
+
+ PersonViewModel jsonViewProducesDefaultWithSummaryDetails();
+
+ String jsonViewPlainDefault();
+
+ String jsonViewPlainDefaultWithSummary();
+
+ String jsonViewPlainDefaultWithSummaryDetails();
+ }
+
+ private static Consumers<JsonViewRestIntf> consumersPojo = new Consumers<>("jsonViewPojoSchema",
+ JsonViewRestIntf.class);
+
+ private static Consumers<JsonViewRestIntf> consumersSpringmvc = new Consumers<>("jsonViewSpringmvcSchema",
+ JsonViewRestIntf.class);
+
+ private static Consumers<JsonViewRestIntf> consumersJaxrs = new Consumers<>("jsonViewJaxrsSchema",
+ JsonViewRestIntf.class);
+
+ private static final PersonViewModel EXPECT_SUMMARY_VIEW = new PersonViewModel().setName("servicecomb")
+ .setEmails("xxx@servicecomb.com");
+
+ private static final PersonViewModel EXPECT_SUMMARY_DETAILS_VIEW = new PersonViewModel().setName("servicecomb")
+ .setEmails("xxx@servicecomb.com").setAge(12).setTelephone("xxx10--xx");
+
+ private static final PersonViewModel EXPECT_NO_VIEW = PersonViewModel.generatePersonViewModel();
+
+ @Test
+ public void testJsonViewDefault() {
+ PersonViewModel restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewDefault", PersonViewModel.class);
+ assertEquals(EXPECT_NO_VIEW, restPersonViewSpringMvc);
+ PersonViewModel pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewDefault();
+ assertEquals(EXPECT_NO_VIEW, pojoPersonViewSpringMvc);
+
+ PersonViewModel restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewDefault", PersonViewModel.class);
+ assertEquals(EXPECT_NO_VIEW, restPersonViewJaxrs);
+ PersonViewModel pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewDefault();
+ assertEquals(EXPECT_NO_VIEW, pojoPersonViewJaxrs);
+
+ PersonViewModel restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewDefault", null, PersonViewModel.class);
+ assertEquals(EXPECT_NO_VIEW, restPersonViewPojo);
+ PersonViewModel pojoPersonViewPojo = consumersPojo.getIntf().jsonViewDefault();
+ assertEquals(EXPECT_NO_VIEW, pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewDefaultWithSummary() {
+ PersonViewModel restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewDefaultWithSummary", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_VIEW, restPersonViewSpringMvc);
+ PersonViewModel pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewDefaultWithSummary();
+ assertEquals(EXPECT_SUMMARY_VIEW, pojoPersonViewSpringMvc);
+
+ PersonViewModel restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewDefaultWithSummary", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_VIEW, restPersonViewJaxrs);
+ PersonViewModel pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewDefaultWithSummary();
+ assertEquals(EXPECT_SUMMARY_VIEW, pojoPersonViewJaxrs);
+
+ PersonViewModel restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewDefaultWithSummary", null, PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_VIEW, restPersonViewPojo);
+ PersonViewModel pojoPersonViewPojo = consumersPojo.getIntf().jsonViewDefaultWithSummary();
+ assertEquals(EXPECT_SUMMARY_VIEW, pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewDefaultWithSummaryDetails() {
+ PersonViewModel restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewDefaultWithSummaryDetails", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, restPersonViewSpringMvc);
+ PersonViewModel pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewDefaultWithSummaryDetails();
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, pojoPersonViewSpringMvc);
+
+ PersonViewModel restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewDefaultWithSummaryDetails", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, restPersonViewJaxrs);
+ PersonViewModel pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewDefaultWithSummaryDetails();
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, pojoPersonViewJaxrs);
+
+ PersonViewModel restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewDefaultWithSummaryDetails", null, PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, restPersonViewPojo);
+ PersonViewModel pojoPersonViewPojo = consumersPojo.getIntf().jsonViewDefaultWithSummaryDetails();
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewProducesDefault() {
+ PersonViewModel restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewProducesDefault", PersonViewModel.class);
+ assertEquals(EXPECT_NO_VIEW, restPersonViewSpringMvc);
+ PersonViewModel pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewProducesDefault();
+ assertEquals(EXPECT_NO_VIEW, pojoPersonViewSpringMvc);
+
+ PersonViewModel restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewProducesDefault", PersonViewModel.class);
+ assertEquals(EXPECT_NO_VIEW, restPersonViewJaxrs);
+ PersonViewModel pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewProducesDefault();
+ assertEquals(EXPECT_NO_VIEW, pojoPersonViewJaxrs);
+
+ PersonViewModel restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewProducesDefault", null, PersonViewModel.class);
+ assertEquals(EXPECT_NO_VIEW, restPersonViewPojo);
+ PersonViewModel pojoPersonViewPojo = consumersPojo.getIntf().jsonViewProducesDefault();
+ assertEquals(EXPECT_NO_VIEW, pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewProducesDefaultWithSummary() {
+ PersonViewModel restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewProducesDefaultWithSummary", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_VIEW, restPersonViewJaxrs);
+ PersonViewModel pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewProducesDefaultWithSummary();
+ assertEquals(EXPECT_SUMMARY_VIEW, pojoPersonViewJaxrs);
+
+ PersonViewModel restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewProducesDefaultWithSummary", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_VIEW, restPersonViewSpringMvc);
+ PersonViewModel pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewProducesDefaultWithSummary();
+ assertEquals(EXPECT_SUMMARY_VIEW, pojoPersonViewSpringMvc);
+
+ PersonViewModel restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewProducesDefaultWithSummary", null, PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_VIEW, restPersonViewPojo);
+ PersonViewModel pojoPersonViewPojo = consumersPojo.getIntf().jsonViewProducesDefaultWithSummary();
+ assertEquals(EXPECT_SUMMARY_VIEW, pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewProducesDefaultWithSummaryDetails() {
+ PersonViewModel restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewProducesDefaultWithSummaryDetails", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, restPersonViewSpringMvc);
+ PersonViewModel pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewProducesDefaultWithSummaryDetails();
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, pojoPersonViewSpringMvc);
+
+ PersonViewModel restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewProducesDefaultWithSummaryDetails", PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, restPersonViewJaxrs);
+ PersonViewModel pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewProducesDefaultWithSummaryDetails();
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, pojoPersonViewJaxrs);
+
+ PersonViewModel restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewProducesDefaultWithSummaryDetails", null, PersonViewModel.class);
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, restPersonViewPojo);
+ PersonViewModel pojoPersonViewPojo = consumersPojo.getIntf().jsonViewProducesDefaultWithSummaryDetails();
+ assertEquals(EXPECT_SUMMARY_DETAILS_VIEW, pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewPlainDefault() {
+ String restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewPlainDefault", String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewSpringMvc);
+ String pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewPlainDefault();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewSpringMvc);
+
+ String restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewPlainDefault", String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewJaxrs);
+ String pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewPlainDefault();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewJaxrs);
+
+ String restPersonViewPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewPlainDefault", null, String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewPojo);
+ String pojoPersonViewPojo = consumersPojo.getIntf().jsonViewPlainDefault();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewPojo);
+ }
+
+ @Test
+ public void testJsonViewPlainDefaultWithSummary() {
+ String restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewPlainDefaultWithSummary", String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewSpringMvc);
+ String pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewPlainDefaultWithSummary();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewSpringMvc);
+
+ String restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewPlainDefaultWithSummary", String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewJaxrs);
+ String pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewPlainDefaultWithSummary();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewJaxrs);
+
+ String restConsumersPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewPlainDefaultWithSummary", null, String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restConsumersPojo);
+ String pojoConsumersPojo = consumersPojo.getIntf().jsonViewPlainDefaultWithSummary();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoConsumersPojo);
+ }
+
+ @Test
+ public void testJsonViewPlainDefaultWithSummaryDetails() {
+ String restPersonViewSpringMvc = consumersSpringmvc.getSCBRestTemplate()
+ .getForObject("/jsonViewPlainDefaultWithSummaryDetails", String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewSpringMvc);
+ String pojoPersonViewSpringMvc = consumersSpringmvc.getIntf().jsonViewPlainDefaultWithSummaryDetails();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewSpringMvc);
+
+ String restPersonViewJaxrs = consumersJaxrs.getSCBRestTemplate()
+ .getForObject("/jsonViewPlainDefaultWithSummaryDetails", String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restPersonViewJaxrs);
+ String pojoPersonViewJaxrs = consumersJaxrs.getIntf().jsonViewPlainDefaultWithSummaryDetails();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoPersonViewJaxrs);
+
+ String restConsumersPojo = consumersPojo.getSCBRestTemplate()
+ .postForObject("/jsonViewPlainDefaultWithSummaryDetails", null, String.class);
+ assertEquals(EXPECT_NO_VIEW.toString(), restConsumersPojo);
+ String pojoConsumersPojo = consumersPojo.getIntf().jsonViewPlainDefaultWithSummaryDetails();
+ assertEquals(EXPECT_NO_VIEW.toString(), pojoConsumersPojo);
+ }
+}
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewJaxrsSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewJaxrsSchema.java
new file mode 100644
index 0000000..05c6ffe
--- /dev/null
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewJaxrsSchema.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicecomb.it.schema;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+import com.fasterxml.jackson.annotation.JsonView;
+
+@RestSchema(schemaId = "jsonViewJaxrsSchema")
+@Path("/v1/jsonViewJaxrsSchema")
+public class JsonViewJaxrsSchema {
+
+ @GET
+ @Path("jsonViewDefault")
+ public PersonViewModel jsonViewDefault() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GET
+ @Path("jsonViewDefaultWithSummary")
+ @JsonView(PersonViewModel.Summary.class)
+ public PersonViewModel jsonViewDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GET
+ @Path("jsonViewDefaultWithSummaryDetails")
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public PersonViewModel jsonViewDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GET
+ @Path("jsonViewProducesDefault")
+ @Produces("application/json")
+ public PersonViewModel jsonViewProducesDefault() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GET
+ @Path("jsonViewProducesDefaultWithSummary")
+ @Produces("application/json")
+ @JsonView(PersonViewModel.Summary.class)
+ public PersonViewModel jsonViewProducesDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GET
+ @Path("jsonViewProducesDefaultWithSummaryDetails")
+ @Produces("application/json")
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public PersonViewModel jsonViewProducesDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GET
+ @Path("jsonViewPlainDefault")
+ @Produces("text/plain")
+ public String jsonViewPlainDefault() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+
+ @GET
+ @Path("jsonViewPlainDefaultWithSummary")
+ @Produces("text/plain")
+ @JsonView(PersonViewModel.Summary.class)
+ public String jsonViewPlainDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+
+ @GET
+ @Path("jsonViewPlainDefaultWithSummaryDetails")
+ @Produces("text/plain")
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public String jsonViewPlainDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+}
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewPojoSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewPojoSchema.java
new file mode 100644
index 0000000..b778905
--- /dev/null
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewPojoSchema.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicecomb.it.schema;
+
+import org.apache.servicecomb.provider.pojo.RpcSchema;
+
+import com.fasterxml.jackson.annotation.JsonView;
+
+import io.swagger.annotations.SwaggerDefinition;
+
+@RpcSchema(schemaId = "jsonViewPojoSchema")
+@SwaggerDefinition(basePath = "/v1/jsonViewPojoSchema")
+public class JsonViewPojoSchema {
+ public PersonViewModel jsonViewDefault() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @JsonView(PersonViewModel.Summary.class)
+ public PersonViewModel jsonViewDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public PersonViewModel jsonViewDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ public PersonViewModel jsonViewProducesDefault() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @JsonView(PersonViewModel.Summary.class)
+ public PersonViewModel jsonViewProducesDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public PersonViewModel jsonViewProducesDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ public String jsonViewPlainDefault() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+
+ @JsonView(PersonViewModel.Summary.class)
+ public String jsonViewPlainDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public String jsonViewPlainDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+}
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewSpringmvcSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewSpringmvcSchema.java
new file mode 100644
index 0000000..39a1b11
--- /dev/null
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/JsonViewSpringmvcSchema.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicecomb.it.schema;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import com.fasterxml.jackson.annotation.JsonView;
+
+@RestSchema(schemaId = "jsonViewSpringmvcSchema")
+@RequestMapping(path = "/v1/jsonViewSpringmvcSchema")
+public class JsonViewSpringmvcSchema {
+
+ @GetMapping("/jsonViewDefault")
+ public PersonViewModel jsonViewDefault() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GetMapping("/jsonViewDefaultWithSummary")
+ @JsonView(PersonViewModel.Summary.class)
+ public PersonViewModel jsonViewDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GetMapping("/jsonViewDefaultWithSummaryDetails")
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public PersonViewModel jsonViewDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GetMapping(value = "/jsonViewProducesDefault", produces = "application/json")
+ public PersonViewModel jsonViewProducesDefault() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GetMapping(value = "/jsonViewProducesDefaultWithSummary", produces = "application/json")
+ @JsonView(PersonViewModel.Summary.class)
+ public PersonViewModel jsonViewProducesDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GetMapping(value = "/jsonViewProducesDefaultWithSummaryDetails", produces = "application/json")
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public PersonViewModel jsonViewProducesDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel();
+ }
+
+ @GetMapping(value = "/jsonViewPlainDefault", produces = "text/plain")
+ public String jsonViewPlainDefault() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+
+ @GetMapping(value = "/jsonViewPlainDefaultWithSummary", produces = "text/plain")
+ @JsonView(PersonViewModel.Summary.class)
+ public String jsonViewPlainDefaultWithSummary() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+
+ @GetMapping(value = "/jsonViewPlainDefaultWithSummaryDetails", produces = "text/plain")
+ @JsonView(PersonViewModel.SummaryWithDetails.class)
+ public String jsonViewPlainDefaultWithSummaryDetails() {
+ return PersonViewModel.generatePersonViewModel().toString();
+ }
+}