diff --git a/pom.xml b/pom.xml
index a9ce992..433de1d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
4.0.0
com.mservicetech
openapi-schema-validation
- 1.0.2
+ 1.0.3
jar
openapi schema for openpai 3.*
https://github.com/mservicetech/openapi-schema-validation
diff --git a/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java b/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java
index 763bedc..a76b115 100644
--- a/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java
+++ b/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java
@@ -182,7 +182,8 @@ private Status validatePathParameters(final RequestEntity requestEntity, final N
return result.getStatus();
}
if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) {
- return new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original());
+ return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original()))
+ .filter(s->s != null).findFirst().get();
}
return null;
}
@@ -231,7 +232,8 @@ private Status validateQueryParameters(final RequestEntity requestEntity, final
return result.getStatus();
}
if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) {
- return new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original());
+ return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original()))
+ .filter(s->s != null).findFirst().get();
}
return null;
}
@@ -260,7 +262,8 @@ private Optional validatePathLevelHeaders(final RequestEntity requestEnt
return Optional.ofNullable(result.getStatus());
}
if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) {
- return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original()));
+ return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original()))
+ .filter(s->s != null).findFirst();
}
return Optional.ofNullable(null);
}
@@ -274,7 +277,8 @@ private Optional validateOperationLevelHeaders(final RequestEntity reque
return Optional.ofNullable(result.getStatus());
}
if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) {
- return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original()));
+ return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original()))
+ .filter(s->s != null).findFirst();
}
return Optional.ofNullable(null);
}
@@ -300,7 +304,8 @@ private Optional validatePathLevelCookies(final RequestEntity requestEnt
return Optional.ofNullable(result.getStatus());
}
if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) {
- return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original()));
+ return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original()))
+ .filter(s->s != null).findFirst();
}
return Optional.ofNullable(null);
}
@@ -314,7 +319,8 @@ private Optional validateOperationLevelCookies(final RequestEntity reque
return Optional.ofNullable(result.getStatus());
}
if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) {
- return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original()));
+ return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original()))
+ .filter(s->s != null).findFirst();
}
return Optional.ofNullable(null);
}
@@ -367,7 +373,7 @@ public Status getStatus() {
return statuses.isEmpty()?null:statuses.get(0);
}
- public List getAllStatueses(){
+ public List getAllStatues(){
return Collections.unmodifiableList(statuses);
}
}
diff --git a/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java b/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java
index da5d34b..9781881 100644
--- a/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java
+++ b/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java
@@ -132,13 +132,28 @@ public void testRequestPath4() {
}
@Test
- public void testRequestQueryMissNotRequired() {
+ public void testRequestQueryMissRequired() {
RequestEntity requestEntity = new RequestEntity();
Map queryMap = new HashMap<>();
requestEntity.setQueryParameters(queryMap);
Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity);
- Assert.assertNull(status);
+ Assert.assertNotNull(status);
+ Assert.assertEquals( status.getCode(), "ERR11001");
+ // {"statusCode":400,"code":"ERR11001","message":"VALIDATOR_REQUEST_PARAMETER_MISSING","description":"Parameter limit is required but is missing.","severity":"ERROR"}
+ }
+
+ @Test
+ public void testRequestQueryRequiredWithEmpty() {
+
+ RequestEntity requestEntity = new RequestEntity();
+ Map queryMap = new HashMap<>();
+ requestEntity.setQueryParameters(queryMap);
+ queryMap.put("limit", null);
+ Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity);
+ Assert.assertEquals( status.getCode(), "ERR11001");
+ //{"statusCode":400,"code":"ERR11001","message":"VALIDATOR_REQUEST_PARAMETER_MISSING","description":"Parameter limit is required but is missing.","severity":"ERROR"}
+ Assert.assertNotNull(status);
}
@Test
@@ -171,6 +186,7 @@ public void testRequestQueryBooleanType() {
RequestEntity requestEntity = new RequestEntity();
Map queryMap = new HashMap<>();
queryMap.put("includeCode", "true");
+ queryMap.put("limit", 12);
requestEntity.setQueryParameters(queryMap);
Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity);
Assert.assertNull(status);
@@ -182,6 +198,7 @@ public void testRequestQueryBooleanTypeWithError() {
RequestEntity requestEntity = new RequestEntity();
Map queryMap = new HashMap<>();
queryMap.put("includeCode", "yes");
+ queryMap.put("limit", 12);
requestEntity.setQueryParameters(queryMap);
Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity);
Assert.assertNotNull(status);
diff --git a/src/test/resources/openapi.yaml b/src/test/resources/openapi.yaml
index 33176f6..ec1be50 100644
--- a/src/test/resources/openapi.yaml
+++ b/src/test/resources/openapi.yaml
@@ -17,7 +17,7 @@ paths:
- name: limit
in: query
description: How many items to return at one time (max 100)
- required: false
+ required: true
schema:
type: integer
format: int32