mirror of
https://github.com/apache/olingo-odata4.git
synced 2025-02-15 14:36:53 +00:00
[OLINGO-818] All verbs are allowed for individual requests in batch requests
This commit is contained in:
parent
734ea91988
commit
303c4e869f
lib
server-api/src/main/java/org/apache/olingo/server/api/deserializer/batch
server-core/src
main
java/org/apache/olingo/server/core/deserializer/batch
resources
test/java/org/apache/olingo/server/core/deserializer/batch
@ -43,8 +43,6 @@ public class BatchDeserializerException extends DeserializerException {
|
||||
/** parameter: line */
|
||||
INVALID_METHOD,
|
||||
/** parameter: line */
|
||||
INVALID_QUERY_OPERATION_METHOD,
|
||||
/** parameter: line */
|
||||
INVALID_STATUS_LINE,
|
||||
/** parameter: line */
|
||||
INVALID_URI,
|
||||
|
@ -33,7 +33,6 @@ import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerExceptio
|
||||
public class HttpRequestStatusLine {
|
||||
private static final Pattern PATTERN_RELATIVE_URI = Pattern.compile("([^/][^?]*)(?:\\?(.*))?");
|
||||
|
||||
private static final Set<String> HTTP_BATCH_METHODS = new HashSet<String>(Arrays.asList(new String[] { "GET" }));
|
||||
private static final Set<String> HTTP_CHANGE_SET_METHODS = new HashSet<String>(Arrays.asList(new String[] { "POST",
|
||||
"PUT", "DELETE", "PATCH" }));
|
||||
private static final String HTTP_VERSION = "HTTP/1.1";
|
||||
@ -144,17 +143,9 @@ public class HttpRequestStatusLine {
|
||||
}
|
||||
|
||||
public void validateHttpMethod(final boolean isChangeSet) throws BatchDeserializerException {
|
||||
Set<String> validMethods = (isChangeSet) ? HTTP_CHANGE_SET_METHODS : HTTP_BATCH_METHODS;
|
||||
|
||||
if (!validMethods.contains(getMethod().toString())) {
|
||||
if (isChangeSet) {
|
||||
throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
|
||||
Integer.toString(statusLine.getLineNumber()));
|
||||
} else {
|
||||
throw new BatchDeserializerException("Invalid query operation method",
|
||||
MessageKeys.INVALID_QUERY_OPERATION_METHOD,
|
||||
Integer.toString(statusLine.getLineNumber()));
|
||||
}
|
||||
if(isChangeSet && !HTTP_CHANGE_SET_METHODS.contains(getMethod().toString())) {
|
||||
throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
|
||||
Integer.toString(statusLine.getLineNumber()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,6 @@ BatchDeserializerException.UNEXPECTED_CONTENT_TYPE=Content-Type at line '%1$s' s
|
||||
BatchDeserializerException.INVALID_CONTENT_ID=Invalid Content-ID HTTP header at line '%1$s'.
|
||||
BatchDeserializerException.INVALID_HTTP_VERSION=The HTTP version must be HTTP/1.1 at line '%1$s'.
|
||||
BatchDeserializerException.INVALID_METHOD=Invalid HTTP method at line '%1$s'.
|
||||
BatchDeserializerException.INVALID_QUERY_OPERATION_METHOD=The query operation at line '%1$s' can only contain retrieve requests.
|
||||
BatchDeserializerException.INVALID_STATUS_LINE=Invalid HTTP status line at line '%1$s'.
|
||||
BatchDeserializerException.INVALID_URI=Invalid URI at line '%1$s'.
|
||||
BatchDeserializerException.FORBIDDEN_HEADER=Forbidden header at line '%1$s'.
|
||||
|
@ -33,9 +33,9 @@ import org.apache.olingo.commons.api.http.HttpHeader;
|
||||
import org.apache.olingo.commons.api.http.HttpMethod;
|
||||
import org.apache.olingo.server.api.ODataRequest;
|
||||
import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException;
|
||||
import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException.MessageKeys;
|
||||
import org.apache.olingo.server.api.deserializer.batch.BatchOptions;
|
||||
import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
|
||||
import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException.MessageKeys;
|
||||
import org.junit.Test;
|
||||
|
||||
public class BatchRequestParserTest {
|
||||
@ -437,16 +437,67 @@ public class BatchRequestParserTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidMethodForBatch() throws Exception {
|
||||
public void testMethodsForIndividualRequests() throws Exception {
|
||||
final String batch = "--batch_8194-cf13-1f56" + CRLF
|
||||
+ MIME_HEADERS
|
||||
+ CRLF
|
||||
+ "POST Employees('1')/EmployeeName HTTP/1.1" + CRLF
|
||||
+ "POST Employees HTTP/1.1" + CRLF
|
||||
+ "Content-Type: application/json" + CRLF
|
||||
+ CRLF
|
||||
+ "{ \"Name\": \"Foo\" }"
|
||||
+ CRLF
|
||||
+ "--batch_8194-cf13-1f56" + CRLF
|
||||
+ MIME_HEADERS
|
||||
+ CRLF
|
||||
+ "DELETE Employees('1') HTTP/1.1" + CRLF
|
||||
+ CRLF
|
||||
+ CRLF
|
||||
+ "--batch_8194-cf13-1f56" + CRLF
|
||||
+ MIME_HEADERS
|
||||
+ CRLF
|
||||
+ "PATCH Employees('1') HTTP/1.1" + CRLF
|
||||
+ "Content-Type: application/json" + CRLF
|
||||
+ CRLF
|
||||
+ "{ \"Name\": \"Foo\" }" + CRLF
|
||||
+ "--batch_8194-cf13-1f56" + CRLF
|
||||
+ MIME_HEADERS
|
||||
+ CRLF
|
||||
+ "PUT Employees('1') HTTP/1.1" + CRLF
|
||||
+ "Content-Type: application/json" + CRLF
|
||||
+ CRLF
|
||||
+ "{ \"Name\": \"Foo\" }" + CRLF
|
||||
+ "--batch_8194-cf13-1f56" + CRLF
|
||||
+ MIME_HEADERS
|
||||
+ CRLF
|
||||
+ "GET Employees('1') HTTP/1.1" + CRLF
|
||||
+ "Accept: application/json" + CRLF
|
||||
+ CRLF
|
||||
+ CRLF
|
||||
+ "--batch_8194-cf13-1f56--";
|
||||
|
||||
parseInvalidBatchBody(batch, BatchDeserializerException.MessageKeys.INVALID_QUERY_OPERATION_METHOD);
|
||||
|
||||
List<BatchRequestPart> requests = parse(batch);
|
||||
assertEquals(HttpMethod.POST, requests.get(0).getRequests().get(0).getMethod());
|
||||
assertEquals("/Employees", requests.get(0).getRequests().get(0).getRawODataPath());
|
||||
assertEquals("{ \"Name\": \"Foo\" }", IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
|
||||
|
||||
requests = parse(batch);
|
||||
assertEquals(HttpMethod.DELETE, requests.get(1).getRequests().get(0).getMethod());
|
||||
assertEquals("/Employees('1')", requests.get(1).getRequests().get(0).getRawODataPath());
|
||||
|
||||
requests = parse(batch);
|
||||
assertEquals(HttpMethod.PATCH, requests.get(2).getRequests().get(0).getMethod());
|
||||
assertEquals("{ \"Name\": \"Foo\" }", IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
|
||||
assertEquals("/Employees('1')", requests.get(2).getRequests().get(0).getRawODataPath());
|
||||
|
||||
requests = parse(batch);
|
||||
assertEquals(HttpMethod.PUT, requests.get(3).getRequests().get(0).getMethod());
|
||||
assertEquals("{ \"Name\": \"Foo\" }", IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
|
||||
assertEquals("/Employees('1')", requests.get(3).getRequests().get(0).getRawODataPath());
|
||||
|
||||
requests = parse(batch);
|
||||
assertEquals(HttpMethod.GET, requests.get(4).getRequests().get(0).getMethod());
|
||||
assertEquals("/Employees('1')", requests.get(4).getRequests().get(0).getRawODataPath());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
Loading…
x
Reference in New Issue
Block a user