mirror of
https://github.com/apache/olingo-odata4.git
synced 2025-02-20 17:05:39 +00:00
[OLINGO-818] All verbs are allowed for individual requests in batch requests
This commit is contained in:
parent
734ea91988
commit
303c4e869f
@ -43,8 +43,6 @@ public class BatchDeserializerException extends DeserializerException {
|
|||||||
/** parameter: line */
|
/** parameter: line */
|
||||||
INVALID_METHOD,
|
INVALID_METHOD,
|
||||||
/** parameter: line */
|
/** parameter: line */
|
||||||
INVALID_QUERY_OPERATION_METHOD,
|
|
||||||
/** parameter: line */
|
|
||||||
INVALID_STATUS_LINE,
|
INVALID_STATUS_LINE,
|
||||||
/** parameter: line */
|
/** parameter: line */
|
||||||
INVALID_URI,
|
INVALID_URI,
|
||||||
|
@ -33,7 +33,6 @@ import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerExceptio
|
|||||||
public class HttpRequestStatusLine {
|
public class HttpRequestStatusLine {
|
||||||
private static final Pattern PATTERN_RELATIVE_URI = Pattern.compile("([^/][^?]*)(?:\\?(.*))?");
|
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",
|
private static final Set<String> HTTP_CHANGE_SET_METHODS = new HashSet<String>(Arrays.asList(new String[] { "POST",
|
||||||
"PUT", "DELETE", "PATCH" }));
|
"PUT", "DELETE", "PATCH" }));
|
||||||
private static final String HTTP_VERSION = "HTTP/1.1";
|
private static final String HTTP_VERSION = "HTTP/1.1";
|
||||||
@ -144,17 +143,9 @@ public class HttpRequestStatusLine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void validateHttpMethod(final boolean isChangeSet) throws BatchDeserializerException {
|
public void validateHttpMethod(final boolean isChangeSet) throws BatchDeserializerException {
|
||||||
Set<String> validMethods = (isChangeSet) ? HTTP_CHANGE_SET_METHODS : HTTP_BATCH_METHODS;
|
if(isChangeSet && !HTTP_CHANGE_SET_METHODS.contains(getMethod().toString())) {
|
||||||
|
|
||||||
if (!validMethods.contains(getMethod().toString())) {
|
|
||||||
if (isChangeSet) {
|
|
||||||
throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
|
throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
|
||||||
Integer.toString(statusLine.getLineNumber()));
|
Integer.toString(statusLine.getLineNumber()));
|
||||||
} else {
|
|
||||||
throw new BatchDeserializerException("Invalid query operation method",
|
|
||||||
MessageKeys.INVALID_QUERY_OPERATION_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_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_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_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_STATUS_LINE=Invalid HTTP status line at line '%1$s'.
|
||||||
BatchDeserializerException.INVALID_URI=Invalid URI at line '%1$s'.
|
BatchDeserializerException.INVALID_URI=Invalid URI at line '%1$s'.
|
||||||
BatchDeserializerException.FORBIDDEN_HEADER=Forbidden header 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.commons.api.http.HttpMethod;
|
||||||
import org.apache.olingo.server.api.ODataRequest;
|
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;
|
||||||
|
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.BatchOptions;
|
||||||
import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
|
import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
|
||||||
import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException.MessageKeys;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class BatchRequestParserTest {
|
public class BatchRequestParserTest {
|
||||||
@ -437,16 +437,67 @@ public class BatchRequestParserTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInvalidMethodForBatch() throws Exception {
|
public void testMethodsForIndividualRequests() throws Exception {
|
||||||
final String batch = "--batch_8194-cf13-1f56" + CRLF
|
final String batch = "--batch_8194-cf13-1f56" + CRLF
|
||||||
+ MIME_HEADERS
|
+ MIME_HEADERS
|
||||||
+ CRLF
|
+ 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
|
||||||
+ CRLF
|
+ CRLF
|
||||||
+ "--batch_8194-cf13-1f56--";
|
+ "--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
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user