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 2023/08/16 01:37:44 UTC
[servicecomb-java-chassis] 11/12: [SCB-2803]fix problems in all test cases
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 697af915a574c4ad9dd5472851fc65152272984c
Author: liubao <bi...@qq.com>
AuthorDate: Tue Aug 15 20:41:24 2023 +0800
[SCB-2803]fix problems in all test cases
---
.../converter/SwaggerToProtoGenerator.java | 39 ++++++++--------
.../internal/converter/model/ProtoSchema.java | 6 +++
.../src/test/resources/ProtoSchema.proto | 21 +++++++--
.../rest/codec/param/BodyProcessorCreator.java | 3 +-
.../rest/filter/inner/RestServerCodecFilter.java | 2 +-
.../rest/definition/TestRestOperationMeta.java | 52 ++++++++++------------
.../edge/consumer/EdgeServiceGovernanceTest.java | 4 +-
.../demo/jaxrs/client/TestFileUploadSchema.java | 7 ++-
.../demo/jaxrs/server/CodeFirstJaxrs.java | 9 ----
.../resources/microservices/jaxrs/compute.yaml | 22 +++++++--
.../schemas/CodeFirstSpringmvcForSchema.yaml | 10 ++++-
.../apache/servicecomb/swagger/SwaggerUtils.java | 2 +
.../src/test/resources/pageSchema.yaml | 12 +++++
.../RequestAttributeAnnotationProcessor.java | 2 +-
.../springmvc/MethodMixupAnnotations.java | 8 +++-
.../test/resources/schemas/mixupAnnotations.yaml | 26 +++++++++++
.../swagger/invocation/response/ResponsesMeta.java | 14 ++----
.../invocation/response/TestResponsesMeta.java | 2 +-
.../TestConsumerResponseMapperFactorys.java | 6 ++-
.../TestProducerResponseMapperFactorys.java | 4 +-
.../response/TestJaxrsConsumerResponseMapper.java | 3 +-
21 files changed, 164 insertions(+), 90 deletions(-)
diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
index 954c57a76..a9333148e 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
@@ -372,14 +372,15 @@ public class SwaggerToProtoGenerator {
}
}
if (operation.getRequestBody() != null
- && operation.getRequestBody().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE) != null) {
- properties.put((String) operation.getRequestBody().getExtensions().get(SwaggerConst.EXT_BODY_NAME),
- operation.getRequestBody().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE).getSchema());
- }
- if (operation.getRequestBody() != null
- && operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE) != null) {
- operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE).getSchema().getProperties()
- .forEach((k, v) -> properties.put((String) k, (Schema) v));
+ && operation.getRequestBody().getContent().size() != 0) {
+ if (operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE) != null) {
+ operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE).getSchema().getProperties()
+ .forEach((k, v) -> properties.put((String) k, (Schema) v));
+ } else {
+ properties.put((String) operation.getRequestBody().getExtensions().get(SwaggerConst.EXT_BODY_NAME),
+ operation.getRequestBody().getContent().get(
+ operation.getRequestBody().getContent().keySet().iterator().next()).getSchema());
+ }
}
return properties;
}
@@ -388,22 +389,23 @@ public class SwaggerToProtoGenerator {
if (operation.getParameters() != null && operation.getParameters().size() == 1) {
return operation.getParameters().get(0).getSchema();
}
- if (operation.getRequestBody().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE) != null) {
- return operation.getRequestBody().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE).getSchema();
+ if (operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE) != null) {
+ return (Schema) operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE).getSchema()
+ .getProperties()
+ .values().iterator().next();
}
- return (Schema) operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE).getSchema()
- .getProperties()
- .values().iterator().next();
+ return operation.getRequestBody().getContent().get(
+ operation.getRequestBody().getContent().keySet().iterator().next()).getSchema();
}
private int parametersCount(Operation operation) {
int parameters = operation.getParameters() == null ? 0 : operation.getParameters().size();
if (operation.getRequestBody() != null) {
- if (operation.getRequestBody().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE) != null) {
- parameters = parameters + 1;
- } else if (operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE) != null) {
+ if (operation.getRequestBody().getContent().get(SwaggerConst.FORM_MEDIA_TYPE) != null) {
parameters = parameters + operation.getRequestBody()
.getContent().get(SwaggerConst.FORM_MEDIA_TYPE).getSchema().getProperties().size();
+ } else if (operation.getRequestBody().getContent().size() != 0) {
+ parameters = parameters + 1;
}
}
return parameters;
@@ -413,8 +415,9 @@ public class SwaggerToProtoGenerator {
for (Entry<String, ApiResponse> entry : operation.getResponses().entrySet()) {
Schema schema = null;
if (entry.getValue().getContent() != null &&
- entry.getValue().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE) != null) {
- schema = entry.getValue().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE).getSchema();
+ entry.getValue().getContent().size() != 0) {
+ schema = entry.getValue().getContent().get(
+ entry.getValue().getContent().keySet().iterator().next()).getSchema();
}
String type = convertSwaggerType(schema);
boolean wrapped = !messages.contains(type);
diff --git a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/model/ProtoSchema.java b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/model/ProtoSchema.java
index c8d6ada61..169e742c9 100644
--- a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/model/ProtoSchema.java
+++ b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/model/ProtoSchema.java
@@ -34,6 +34,7 @@ import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import jakarta.ws.rs.core.MediaType;
@RequestMapping(path = "/")
public class ProtoSchema implements ProtoSchemaIntf {
@@ -177,4 +178,9 @@ public class ProtoSchema implements ProtoSchemaIntf {
public FieldNeedWrap fieldNeedWrap(@RequestBody FieldNeedWrap fieldNeedWrap) {
return fieldNeedWrap;
}
+
+ @PostMapping(path = "/testTextPlain", consumes = MediaType.TEXT_PLAIN, produces = MediaType.TEXT_PLAIN)
+ public String testTextPlain(@RequestBody String fieldNeedWrap) {
+ return null;
+ }
}
diff --git a/common/common-protobuf/src/test/resources/ProtoSchema.proto b/common/common-protobuf/src/test/resources/ProtoSchema.proto
index 0380d4fff..fcdeea027 100644
--- a/common/common-protobuf/src/test/resources/ProtoSchema.proto
+++ b/common/common-protobuf/src/test/resources/ProtoSchema.proto
@@ -65,13 +65,13 @@ message BaseRequestWrap {
}
//@WrapProperty
-message BaseResponseWrap444 {
- Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 value = 1;
+message BaseResponseWrap200 {
+ int32 value = 1;
}
//@WrapProperty
-message BaseResponseWrap200 {
- int32 value = 1;
+message BaseResponseWrap444 {
+ Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 value = 1;
}
//@WrapArguments
@@ -274,6 +274,16 @@ message MapUserResponseWrap200 {
map<string, User> value = 1;
}
+//@WrapArguments
+message TestTextPlainRequestWrap {
+ string fieldNeedWrap = 1;
+}
+
+//@WrapProperty
+message TestTextPlainResponseWrap200 {
+ string value = 1;
+}
+
//@WrapArguments
message UserWrapInProtobufRequestWrap {
int32 ivalue = 1;
@@ -422,6 +432,9 @@ service MainService {
//@Rpc{"argTypeName":"Ref1","responses":{"200":{"typeName":"Ref2"}}}
rpc ref (Ref1) returns (Ref2);
+ //@Rpc{"argTypeName":"TestTextPlainRequestWrap","responses":{"200":{"typeName":"TestTextPlainResponseWrap200"}}}
+ rpc testTextPlain (TestTextPlainRequestWrap) returns (TestTextPlainResponseWrap200);
+
//@Rpc{"argTypeName":"User","responses":{"200":{"typeName":"User"}}}
rpc user (User) returns (User);
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
index cb1577447..4c58902eb 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
@@ -237,7 +237,8 @@ public class BodyProcessorCreator implements ParamValueProcessorCreator<RequestB
@Override
public ParamValueProcessor create(String parameterName, RequestBody parameter, Type genericParamType) {
- Schema model = parameter.getContent().get(MediaType.APPLICATION_JSON).getSchema();
+ String mediaType = parameter.getContent().keySet().iterator().next();
+ Schema model = parameter.getContent().get(mediaType).getSchema();
JavaType swaggerType = ConverterMgr.findJavaType(model.getType(), model.getFormat());
boolean isString = swaggerType != null && swaggerType.getRawClass().equals(String.class);
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
index 0415fba17..392112ec6 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
@@ -116,7 +116,7 @@ public class RestServerCodecFilter implements ProviderFilter {
return CompletableFuture.completedFuture(response);
}
- responseEx.setContentType(produceProcessor.getName() + "; charset=utf-8");
+ responseEx.setContentType(produceProcessor.getName());
try (BufferOutputStream output = new BufferOutputStream(Unpooled.compositeBuffer())) {
produceProcessor.encodeResponse(output, response.getResult());
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 45f67f70c..27d70d4e7 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
@@ -57,14 +57,14 @@ public class TestRestOperationMeta {
static class RestOperationMetaSchema {
@Path("/emptyProduces")
@GET
- @Produces("")
+ @Produces(value = MediaType.APPLICATION_JSON)
public String emptyProduces() {
return null;
}
@Path("/emptyProducesWithView")
@GET
- @Produces("")
+ @Produces(value = MediaType.APPLICATION_JSON)
@JsonView(Object.class)
public String emptyProducesWithView() {
return null;
@@ -72,14 +72,14 @@ public class TestRestOperationMeta {
@Path("/notSupport")
@GET
- @Produces("notSupport")
+ @Produces(value = MediaType.APPLICATION_JSON)
public void notSupport() {
}
@Path("/notSupportWithView")
@GET
- @Produces("notSupport")
+ @Produces(value = MediaType.APPLICATION_JSON)
@JsonView(Object.class)
public void notSupportWithView() {
@@ -117,14 +117,14 @@ public class TestRestOperationMeta {
@Path("/textCharJsonChar")
@GET
- @Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8", MediaType.TEXT_PLAIN + ";charset=UTF-8"})
+ @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})
public void textCharJsonChar() {
}
@Path("/textCharJsonCharWithView")
@GET
- @Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8", MediaType.TEXT_PLAIN + ";charset=UTF-8"})
+ @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})
@JsonView(Object.class)
public void textCharJsonCharWithView() {
@@ -297,7 +297,6 @@ public class TestRestOperationMeta {
public void testCreateProduceProcessorsNotSupported() {
findOperation("notSupport");
- // TODO: should produces text/plain for string
Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultProcessor(),
operationMeta.ensureFindProduceProcessor((String) null));
Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultProcessor(),
@@ -306,14 +305,13 @@ public class TestRestOperationMeta {
operationMeta.ensureFindProduceProcessor(ProduceProcessorManager.DEFAULT_TYPE));
Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultJsonProcessor(),
operationMeta.findProduceProcessor(MediaType.APPLICATION_JSON));
-// Assertions.assertNull(operationMeta.findProduceProcessor(MediaType.TEXT_PLAIN));
+ Assertions.assertNotNull(operationMeta.findProduceProcessor(MediaType.TEXT_PLAIN));
}
@Test
public void testCreateProduceProcessorsNotSupportedWithView() {
findOperation("notSupportWithView");
- // TODO: should produces text/plain for string
Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultProcessorByViewClass(Object.class),
operationMeta.ensureFindProduceProcessor((String) null));
Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultProcessorByViewClass(Object.class),
@@ -322,37 +320,35 @@ public class TestRestOperationMeta {
operationMeta.ensureFindProduceProcessor(ProduceProcessorManager.DEFAULT_TYPE));
Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultProcessorByViewClass(Object.class),
operationMeta.findProduceProcessor(MediaType.APPLICATION_JSON));
-// Assertions.assertNull(operationMeta.findProduceProcessor(MediaType.TEXT_PLAIN));
+ Assertions.assertNotNull(operationMeta.findProduceProcessor(MediaType.TEXT_PLAIN));
}
@Test
public void testCreateProduceProcessorsTextAndWildcard() {
findOperation("textPlain");
- // TODO: should produces text/plain for string
-// Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultPlainProcessor(),
-// operationMeta.ensureFindProduceProcessor(MediaType.WILDCARD));
-// Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultPlainProcessor(),
-// operationMeta.ensureFindProduceProcessor(MediaType.TEXT_PLAIN));
-// Assertions.assertNull(operationMeta.ensureFindProduceProcessor(MediaType.APPLICATION_JSON));
-// Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultPlainProcessor(),
-// operationMeta.ensureFindProduceProcessor(
-// MediaType.APPLICATION_JSON + "," + MediaType.APPLICATION_XML + "," + MediaType.WILDCARD));
+ Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultPlainProcessor(),
+ operationMeta.ensureFindProduceProcessor(MediaType.WILDCARD));
+ Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultPlainProcessor(),
+ operationMeta.ensureFindProduceProcessor(MediaType.TEXT_PLAIN));
+ Assertions.assertNull(operationMeta.ensureFindProduceProcessor(MediaType.APPLICATION_JSON));
+ Assertions.assertSame(ProduceProcessorManager.INSTANCE.findDefaultPlainProcessor(),
+ operationMeta.ensureFindProduceProcessor(
+ MediaType.APPLICATION_JSON + "," + MediaType.APPLICATION_XML + "," + MediaType.WILDCARD));
}
@Test
public void testCreateProduceProcessorsTextAndWildcardWithView() {
findOperation("textPlainWithView");
- // TODO: should produces text/plain for string
-// Assertions.assertSame(ProduceProcessorManager.INSTANCE.findPlainProcessorByViewClass(Object.class),
-// operationMeta.ensureFindProduceProcessor(MediaType.WILDCARD));
-// Assertions.assertSame(ProduceProcessorManager.INSTANCE.findPlainProcessorByViewClass(Object.class),
-// operationMeta.ensureFindProduceProcessor(MediaType.TEXT_PLAIN));
-// Assertions.assertNull(operationMeta.ensureFindProduceProcessor(MediaType.APPLICATION_JSON));
-// Assertions.assertSame(ProduceProcessorManager.INSTANCE.findPlainProcessorByViewClass(Object.class),
-// operationMeta.ensureFindProduceProcessor(
-// MediaType.APPLICATION_JSON + "," + MediaType.APPLICATION_XML + "," + MediaType.WILDCARD));
+ Assertions.assertSame(ProduceProcessorManager.INSTANCE.findPlainProcessorByViewClass(Object.class),
+ operationMeta.ensureFindProduceProcessor(MediaType.WILDCARD));
+ Assertions.assertSame(ProduceProcessorManager.INSTANCE.findPlainProcessorByViewClass(Object.class),
+ operationMeta.ensureFindProduceProcessor(MediaType.TEXT_PLAIN));
+ Assertions.assertNull(operationMeta.ensureFindProduceProcessor(MediaType.APPLICATION_JSON));
+ Assertions.assertSame(ProduceProcessorManager.INSTANCE.findPlainProcessorByViewClass(Object.class),
+ operationMeta.ensureFindProduceProcessor(
+ MediaType.APPLICATION_JSON + "," + MediaType.APPLICATION_XML + "," + MediaType.WILDCARD));
}
@Test
diff --git a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/EdgeServiceGovernanceTest.java b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/EdgeServiceGovernanceTest.java
index 9c9d3eaaa..cfb07abe3 100644
--- a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/EdgeServiceGovernanceTest.java
+++ b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/EdgeServiceGovernanceTest.java
@@ -69,7 +69,7 @@ public class EdgeServiceGovernanceTest implements CategorizedTestCase {
public void run() {
try {
String result = template.getForObject(url + "?name={1}", String.class, "hello");
- if (!"\"hello\"".equals(result)) {
+ if (!"hello".equals(result)) {
notExpectedFailed.set(true);
}
} catch (Exception e) {
@@ -108,7 +108,7 @@ public class EdgeServiceGovernanceTest implements CategorizedTestCase {
public void run() {
try {
String result = template.getForObject(url + "?name={1}", String.class, "hello");
- if (!"\"hello\"".equals(result)) {
+ if (!"hello".equals(result)) {
notExpectedFailed.set(true);
}
} catch (Exception e) {
diff --git a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestFileUploadSchema.java b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestFileUploadSchema.java
index 4713923c3..cfa900c45 100644
--- a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestFileUploadSchema.java
+++ b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestFileUploadSchema.java
@@ -52,16 +52,15 @@ public class TestFileUploadSchema implements CategorizedTestCase {
private void testFileUpload(RestTemplate template, String cseUrlPrefix, File file1, String file1Content)
throws IOException {
+ String result1 = template.postForObject(cseUrlPrefix + "/upload1", new HttpEntity<>(new HashMap<>()), String.class);
+ TestMgr.check("null file", result1);
+
Map<String, Object> map = new HashMap<>();
map.put("file1", new FileSystemResource(file1));
String file2Content = "Hello EveryOne";
File file2 = File.createTempFile("测试2", ".txt");
FileUtils.writeStringToFile(file2, file2Content, StandardCharsets.UTF_8, false);
map.put("file2", new FileSystemResource(file2));
-
- String result1 = template.postForObject(cseUrlPrefix + "/upload1", new HttpEntity<>(new HashMap<>()), String.class);
- TestMgr.check("null file", result1);
-
String expect = String.format("%s:%s:%s\n" + "%s:%s:%s",
file1.getName(),
MediaType.TEXT_PLAIN,
diff --git a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/CodeFirstJaxrs.java b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/CodeFirstJaxrs.java
index e1d0cea3f..b733ea029 100644
--- a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/CodeFirstJaxrs.java
+++ b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/CodeFirstJaxrs.java
@@ -30,7 +30,6 @@ import org.apache.servicecomb.core.Const;
import org.apache.servicecomb.demo.compute.Person;
import org.apache.servicecomb.demo.ignore.InputModelForTestIgnore;
import org.apache.servicecomb.demo.ignore.OutputModelForTestIgnore;
-import org.apache.servicecomb.demo.jaxbbean.JAXBPerson;
import org.apache.servicecomb.demo.server.User;
import org.apache.servicecomb.foundation.common.part.FilePart;
import org.apache.servicecomb.provider.rest.common.RestSchema;
@@ -97,14 +96,6 @@ public class CodeFirstJaxrs {
return body;
}
- @Path("/appXml")
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_XML)
- public JAXBPerson appXml(JAXBPerson body) {
- return body;
- }
-
@Path("/bytes")
@POST
public byte[] bytes(byte[] input) {
diff --git a/demo/demo-schema/src/main/resources/microservices/jaxrs/compute.yaml b/demo/demo-schema/src/main/resources/microservices/jaxrs/compute.yaml
index 6652895b3..32c4bf14e 100644
--- a/demo/demo-schema/src/main/resources/microservices/jaxrs/compute.yaml
+++ b/demo/demo-schema/src/main/resources/microservices/jaxrs/compute.yaml
@@ -59,7 +59,7 @@ paths:
"200":
description: response of 200
content:
- application/json:
+ text/plain:
schema:
type: string
/istrue:
@@ -79,14 +79,12 @@ paths:
- name: a
in: query
required: false
- explode: false
schema:
type: integer
format: int32
- name: b
in: query
required: false
- explode: false
schema:
type: integer
format: int32
@@ -117,6 +115,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Person'
+ application/protobuf:
+ schema:
+ $ref: '#/components/schemas/Person'
+ text/plain:
+ schema:
+ $ref: '#/components/schemas/Person'
x-name: user
responses:
"200":
@@ -162,6 +166,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Person'
+ application/protobuf:
+ schema:
+ $ref: '#/components/schemas/Person'
+ text/plain:
+ schema:
+ $ref: '#/components/schemas/Person'
x-name: user
responses:
"200":
@@ -178,6 +188,12 @@ paths:
application/json:
schema:
type: string
+ application/protobuf:
+ schema:
+ type: string
+ text/plain:
+ schema:
+ type: string
x-name: jsonInput
responses:
"200":
diff --git a/demo/demo-springmvc/springmvc-server/src/main/resources/schemas/CodeFirstSpringmvcForSchema.yaml b/demo/demo-springmvc/springmvc-server/src/main/resources/schemas/CodeFirstSpringmvcForSchema.yaml
index baf09a674..9ac86e2f7 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/resources/schemas/CodeFirstSpringmvcForSchema.yaml
+++ b/demo/demo-springmvc/springmvc-server/src/main/resources/schemas/CodeFirstSpringmvcForSchema.yaml
@@ -41,6 +41,7 @@ paths:
content:
multipart/form-data:
schema:
+ type: object
properties:
file:
type: string
@@ -52,5 +53,10 @@ paths:
application/json:
schema:
type: boolean
-components:
- schemas: {}
+ application/protobuf:
+ schema:
+ type: boolean
+ text/plain:
+ schema:
+ type: boolean
+components: {}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
index 6522335f8..bf9aa56b8 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
@@ -25,6 +25,7 @@ import java.lang.reflect.Type;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
@@ -332,6 +333,7 @@ public final class SwaggerUtils {
return (cls != String.class
&& cls != Date.class
&& cls != LocalDate.class
+ && cls != LocalDateTime.class
&& cls != byte[].class
&& cls != File.class
&& !cls.getName().equals("org.springframework.web.multipart.MultipartFile")
diff --git a/swagger/swagger-generator/generator-spring-data/src/test/resources/pageSchema.yaml b/swagger/swagger-generator/generator-spring-data/src/test/resources/pageSchema.yaml
index ff2cb70cf..8b9b4b188 100644
--- a/swagger/swagger-generator/generator-spring-data/src/test/resources/pageSchema.yaml
+++ b/swagger/swagger-generator/generator-spring-data/src/test/resources/pageSchema.yaml
@@ -31,6 +31,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PageString'
+ application/protobuf:
+ schema:
+ $ref: '#/components/schemas/PageString'
+ text/plain:
+ schema:
+ $ref: '#/components/schemas/PageString'
x-name: page
responses:
"200":
@@ -39,6 +45,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PageString'
+ application/protobuf:
+ schema:
+ $ref: '#/components/schemas/PageString'
+ text/plain:
+ schema:
+ $ref: '#/components/schemas/PageString'
components:
schemas:
PageString:
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
index 910306990..0b412afd9 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
@@ -55,7 +55,7 @@ public class RequestAttributeAnnotationProcessor extends
@Override
public void process(SwaggerGenerator swaggerGenerator, OperationGenerator operationGenerator,
ParameterGenerator parameterGenerator, RequestAttribute annotation) {
- parameterGenerator.setHttpParameterType(HttpParameterType.COOKIE);
+ parameterGenerator.setHttpParameterType(HttpParameterType.FORM);
if (StringUtils.isNotEmpty(getParameterName(annotation))) {
parameterGenerator.getParameterGeneratorContext().setParameterName(getParameterName(annotation));
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/MethodMixupAnnotations.java b/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/MethodMixupAnnotations.java
index 7df4c5748..2513b4e91 100644
--- a/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/MethodMixupAnnotations.java
+++ b/swagger/swagger-generator/generator-springmvc/src/test/java/org/apache/servicecomb/swagger/generator/springmvc/MethodMixupAnnotations.java
@@ -17,6 +17,8 @@
package org.apache.servicecomb.swagger.generator.springmvc;
+import java.time.LocalDateTime;
+
import org.apache.servicecomb.foundation.test.scaffolding.model.User;
import org.apache.servicecomb.swagger.generator.SwaggerConst;
import org.springframework.http.MediaType;
@@ -46,7 +48,6 @@ import jakarta.servlet.http.Part;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
-// TODO: Now not support consumes User as text/plain. This test case should fail.
@SuppressWarnings("unused")
@RequestMapping(path = "MethodMixupAnnotations")
public class MethodMixupAnnotations {
@@ -165,4 +166,9 @@ public class MethodMixupAnnotations {
@Min(value = 20) @Max(value = 30) @RequestParam(name = "d", required = false) int d) {
return "Hello " + a + b + c + d + e;
}
+
+ @GetMapping(path = "/testLocalDateTime")
+ public LocalDateTime testLocalDateTime(@RequestParam("date") LocalDateTime date) {
+ return date;
+ }
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/mixupAnnotations.yaml b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/mixupAnnotations.yaml
index 1644797b0..121f96127 100644
--- a/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/mixupAnnotations.yaml
+++ b/swagger/swagger-generator/generator-springmvc/src/test/resources/schemas/mixupAnnotations.yaml
@@ -266,6 +266,32 @@ paths:
text/plain:
schema:
type: string
+ /testLocalDateTime:
+ get:
+ operationId: testLocalDateTime
+ parameters:
+ - name: date
+ in: query
+ required: true
+ schema:
+ type: string
+ format: date-time
+ responses:
+ "200":
+ description: response of 200
+ content:
+ application/json:
+ schema:
+ type: string
+ format: date-time
+ application/protobuf:
+ schema:
+ type: string
+ format: date-time
+ text/plain:
+ schema:
+ type: string
+ format: date-time
/uploadFileAndAttribute:
post:
operationId: uploadFileAndAttribute
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
index 8f0a1be61..aa9e75796 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/response/ResponsesMeta.java
@@ -23,7 +23,6 @@ import java.util.Map.Entry;
import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.apache.servicecomb.swagger.SwaggerUtils;
import org.apache.servicecomb.swagger.converter.ConverterMgr;
-import org.apache.servicecomb.swagger.generator.SwaggerConst;
import org.apache.servicecomb.swagger.invocation.context.HttpStatus;
import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData;
import org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory;
@@ -81,16 +80,15 @@ public class ResponsesMeta {
}
for (Entry<String, ApiResponse> entry : operation.getResponses().entrySet()) {
- if (entry.getValue().getContent() == null) {
- continue;
- }
- if (entry.getValue().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE) == null) {
+ if (entry.getValue().getContent() == null || entry.getValue().getContent().size() == 0) {
continue;
}
+ String mediaType = entry.getValue().getContent().keySet().iterator().next();
+
JavaType javaType = ConverterMgr.findJavaType(swagger,
SwaggerUtils.getSchema(swagger,
- entry.getValue().getContent().get(SwaggerConst.DEFAULT_MEDIA_TYPE).getSchema()));
+ entry.getValue().getContent().get(mediaType).getSchema()));
if ("default".equals(entry.getKey())) {
defaultResponse = javaType;
@@ -130,10 +128,6 @@ public class ResponsesMeta {
}
}
- public Map<Integer, JavaType> getResponseMap() {
- return responseMap;
- }
-
public JavaType findResponseType(int statusCode) {
JavaType responseType = responseMap.get(statusCode);
if (responseType == null) {
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
index f0e1bf483..972ce6d7e 100644
--- a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/TestResponsesMeta.java
@@ -33,7 +33,7 @@ import io.swagger.v3.oas.models.Operation;
public class TestResponsesMeta {
static class ResponseMetaImpl {
@ApiResponses({@ApiResponse(responseCode = "400", description = "",
- content = {@Content(schema = @Schema(type = "string"))}),
+ content = {@Content(schema = @Schema(implementation = String.class))}),
@ApiResponse(responseCode = "401", description = "",
content = {@Content(schema = @Schema(implementation = String.class))},
headers = {@Header(name = "h1", schema = @Schema(implementation = String.class))})
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/consumer/TestConsumerResponseMapperFactorys.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/consumer/TestConsumerResponseMapperFactorys.java
index 66733718b..af443db95 100644
--- a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/consumer/TestConsumerResponseMapperFactorys.java
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/consumer/TestConsumerResponseMapperFactorys.java
@@ -41,10 +41,12 @@ public class TestConsumerResponseMapperFactorys {
CompletableFuture<String> async();
- @ApiResponse(responseCode = "200", description = "", content = {@Content(schema = @Schema(type = "string"))})
+ @ApiResponse(responseCode = "200", description = "", content =
+ {@Content(schema = @Schema(implementation = String.class))})
Response scbResponse();
- @ApiResponse(responseCode = "200", description = "", content = {@Content(schema = @Schema(type = "string"))})
+ @ApiResponse(responseCode = "200", description = "", content =
+ {@Content(schema = @Schema(implementation = String.class))})
jakarta.ws.rs.core.Response jaxrsResponse();
Optional<String> optional();
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/producer/TestProducerResponseMapperFactorys.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/producer/TestProducerResponseMapperFactorys.java
index f7672dcfe..c576bae5d 100644
--- a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/producer/TestProducerResponseMapperFactorys.java
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/response/producer/TestProducerResponseMapperFactorys.java
@@ -45,13 +45,13 @@ public class TestProducerResponseMapperFactorys {
}
@ApiResponse(responseCode = "200", description = "",
- content = {@Content(schema = @Schema(type = "string"))})
+ content = {@Content(schema = @Schema(implementation = String.class))})
public Response scbResponse() {
return Response.ok("scb");
}
@ApiResponse(responseCode = "200", description = "",
- content = {@Content(schema = @Schema(type = "string"))})
+ content = {@Content(schema = @Schema(implementation = String.class))})
public jakarta.ws.rs.core.Response jaxrsResponse() {
return jakarta.ws.rs.core.Response.ok("jaxrs").build();
}
diff --git a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java
index 9deb84bfc..44f4f3cf7 100644
--- a/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java
+++ b/swagger/swagger-invocation/invocation-jaxrs/src/test/java/org/apache/servicecomb/swagger/invocation/jaxrs/response/TestJaxrsConsumerResponseMapper.java
@@ -37,7 +37,8 @@ import jakarta.ws.rs.core.Response;
public class TestJaxrsConsumerResponseMapper {
@Path("/")
interface ConsumerResponseForTest {
- @ApiResponse(responseCode = "200", description = "", content = @Content(schema = @Schema(type = "string")))
+ @ApiResponse(responseCode = "200", description = "", content = @Content(schema =
+ @Schema(implementation = String.class)))
@Path("/jaxrsResponse")
@GET
jakarta.ws.rs.core.Response jaxrsResponse();