This is an automated email from the ASF dual-hosted git repository.
ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git
The following commit(s) were added to refs/heads/master by this push:
new 1342d11 [OLINGO-1479]Allow system query option select and expand for
PUT/PATCH requests
1342d11 is described below
commit 1342d11438242ef4b9294121200b599601b534e3
Author: ramya vasanth <[email protected]>
AuthorDate: Thu Aug 27 11:30:06 2020 +0530
[OLINGO-1479]Allow system query option select and expand for PUT/PATCH
requests
---
.../server/core/uri/validator/UriValidator.java | 14 +++++++++--
.../core/uri/validator/UriValidatorTest.java | 28 ++++++++++++++++++----
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
index c38d372..3aedfc0 100644
---
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
+++
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
@@ -391,7 +391,7 @@ public class UriValidator {
}
}
- } else if (!options.isEmpty()) {
+ } else if (!options.isEmpty() && !checkIfSelectOrExpand(options,
httpMethod)) {
StringBuilder optionsString = new StringBuilder();
for (final SystemQueryOption option : options) {
optionsString.append(option.getName()).append(' ');
@@ -403,7 +403,17 @@ public class UriValidator {
}
}
- private boolean isAction(final UriInfo uriInfo) {
+ private boolean checkIfSelectOrExpand(List<SystemQueryOption> options,
HttpMethod httpMethod) {
+ boolean isSelectOrExpand = false;
+ for (SystemQueryOption queryOption : options) {
+ isSelectOrExpand = ((queryOption.getKind() ==
SystemQueryOptionKind.EXPAND) ||
+ (queryOption.getKind() ==
SystemQueryOptionKind.SELECT)) &&
+ (httpMethod == HttpMethod.PUT || httpMethod ==
HttpMethod.PATCH);
+ }
+ return isSelectOrExpand;
+}
+
+private boolean isAction(final UriInfo uriInfo) {
List<UriResource> uriResourceParts = uriInfo.getUriResourceParts();
return !uriResourceParts.isEmpty()
&& UriResourceKind.action ==
uriResourceParts.get(uriResourceParts.size() - 1).getKind();
diff --git
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
index 3c39c41..25acb29 100644
---
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
+++
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
@@ -353,20 +353,38 @@ public class UriValidatorTest {
}
@Test
- public void systemQueryOptionsNotAllowedForHttpPostPutPatchDelete() throws
Exception {
+ public void systemQueryOptionsNotAllowedForHttpPostDelete() throws Exception
{
final String[] queryOptions =
{ QO_FILTER, QO_FORMAT, QO_EXPAND, QO_COUNT, QO_ORDERBY, QO_SEARCH,
QO_SELECT, QO_SKIP, QO_TOP, QO_SKIPTOKEN };
for (int i = 0; i < queryOptions.length; i++) {
validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.POST,
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
- validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PUT,
-
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
- validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PATCH,
-
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.DELETE,
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
}
}
+
+ @Test
+ public void systemQueryOptionsExpandAndSelectAllowedForHttpPutAndPatch()
throws Exception {
+ final String[] queryOptions =
+ { QO_SELECT, QO_EXPAND };
+ for (int i = 0; i < queryOptions.length; i++) {
+ validate(URI_ENTITY, queryOptions[i], HttpMethod.PUT);
+ validate(URI_ENTITY, queryOptions[i], HttpMethod.PATCH);
+ }
+ }
+
+ @Test
+ public void systemQueryOptionsNotAllowedForHttpPutAndPatch() throws
Exception {
+ final String[] queryOptions =
+ { QO_FILTER, QO_FORMAT, QO_COUNT, QO_ORDERBY, QO_SEARCH, QO_SKIP,
QO_TOP, QO_SKIPTOKEN };
+ for (int i = 0; i < queryOptions.length; i++) {
+ validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PUT,
+
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
+ validateWrong(URI_ENTITY, queryOptions[i], HttpMethod.PATCH,
+
UriValidationException.MessageKeys.SYSTEM_QUERY_OPTION_NOT_ALLOWED_FOR_HTTP_METHOD);
+ }
+ }
@Test
public void systemQueryOptionIDAllowedForDELETEReferencesOnly() throws
Exception {