You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/06/29 13:54:37 UTC
[33/34] olingo-odata4 git commit: [OLINGO-659] support for
OData-EntityID header, more clean-up
[OLINGO-659] support for OData-EntityID header, more clean-up
Change-Id: I168a6efac6fc9ad85865f71dd534fd850d8e777e
Signed-off-by: Christian Amend <ch...@sap.com>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/abf5bf79
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/abf5bf79
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/abf5bf79
Branch: refs/heads/olingo712
Commit: abf5bf79aa865c6dbcd5e0af8b521a7ae6341af2
Parents: 2a84155
Author: Klaus Straubinger <kl...@sap.com>
Authored: Fri Jun 26 15:34:23 2015 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Fri Jun 26 16:38:46 2015 +0200
----------------------------------------------------------------------
.../fit/tecsvc/client/ActionImportITCase.java | 20 ++++
.../BasicHttpExceptionHandlingITCase.java | 4 +-
.../olingo/fit/tecsvc/client/BasicITCase.java | 14 +--
.../fit/tecsvc/client/BatchClientITCase.java | 96 ++++++++++----------
.../tecsvc/client/EdmEnabledClientITCase.java | 63 -------------
.../fit/tecsvc/client/ExpandSelectITCase.java | 12 +++
.../fit/tecsvc/http/BasicBatchITCase.java | 15 ++-
.../olingo/fit/tecsvc/http/BasicHttpITCase.java | 89 +++++++-----------
.../fit/tecsvc/http/EntityReferenceITCase.java | 54 ++++-------
.../olingo/fit/tecsvc/http/PingITCase.java | 12 +--
.../olingo/fit/v4/EntityRetrieveTestITCase.java | 3 +-
.../api/domain/ClientEntitySetIterator.java | 14 +--
.../olingo/client/core/ODataClientImpl.java | 12 +--
.../invoke/AbstractODataInvokeRequest.java | 7 +-
.../ClientODataDeserializerImpl.java | 11 ++-
.../apache/olingo/client/core/AbstractTest.java | 5 +-
.../olingo/client/core/v4/EntityTest.java | 3 +-
.../olingo/commons/api/format/AcceptType.java | 26 ++----
.../olingo/commons/api/format/ContentType.java | 85 ++++-------------
.../olingo/commons/api/format/TypeUtil.java | 36 ++++++--
.../olingo/commons/api/http/HttpHeader.java | 20 ++--
.../commons/api/format/ContentTypeTest.java | 1 -
.../processor/TechnicalActionProcessor.java | 9 +-
.../processor/TechnicalEntityProcessor.java | 6 +-
.../tecsvc/processor/TechnicalProcessor.java | 4 +-
25 files changed, 259 insertions(+), 362 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java
index 22aea29..2a05021 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java
@@ -45,6 +45,7 @@ import org.apache.olingo.client.api.domain.ClientValue;
import org.apache.olingo.client.core.ODataClientFactory;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.fit.AbstractBaseTestITCase;
import org.apache.olingo.fit.tecsvc.TecSvcConst;
@@ -304,6 +305,25 @@ public class ActionImportITCase extends AbstractBaseTestITCase {
getClient().getInvokeRequestFactory().getActionInvokeRequest(actionURI, ClientEntity.class, parameters)
.execute();
assertEquals(HttpStatusCode.CREATED.getStatusCode(), response.getStatusCode());
+ assertEquals(TecSvcConst.BASE_URI + "/ESAllPrim(1)", response.getHeader(HttpHeader.LOCATION).iterator().next());
+ }
+
+ @Test
+ public void entityActionETAllPrimNoContent() throws Exception {
+ final URI actionURI = getClient().newURIBuilder(TecSvcConst.BASE_URI)
+ .appendActionCallSegment("AIRTESAllPrimParam").build();
+ final Map<String, ClientValue> parameters = Collections.singletonMap(
+ "ParameterDate",
+ (ClientValue) getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("2000-02-29"));
+ ODataInvokeRequest<ClientEntity> request = getClient().getInvokeRequestFactory()
+ .getActionInvokeRequest(actionURI, ClientEntity.class, parameters);
+ request.setPrefer(getClient().newPreferences().returnMinimal());
+ final ODataInvokeResponse<ClientEntity> response = request.execute();
+ assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode());
+ assertEquals("return=minimal", response.getHeader(HttpHeader.PREFERENCE_APPLIED).iterator().next());
+ final String location = TecSvcConst.BASE_URI + "/ESAllPrim(1)";
+ assertEquals(location, response.getHeader(HttpHeader.LOCATION).iterator().next());
+ assertEquals(location, response.getHeader(HttpHeader.ODATA_ENTITY_ID).iterator().next());
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicHttpExceptionHandlingITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicHttpExceptionHandlingITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicHttpExceptionHandlingITCase.java
index 2166235..c0b1c69 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicHttpExceptionHandlingITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicHttpExceptionHandlingITCase.java
@@ -25,6 +25,7 @@ import java.net.URL;
import org.apache.olingo.client.api.ODataClient;
import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.fit.AbstractBaseTestITCase;
import org.apache.olingo.fit.tecsvc.TecSvcConst;
import org.junit.Test;
@@ -44,8 +45,7 @@ public class BasicHttpExceptionHandlingITCase extends AbstractBaseTestITCase {
connection.setRequestProperty(HttpHeader.X_HTTP_METHOD_OVERRIDE, "differentValue");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(400, code);
+ assertEquals(HttpStatusCode.BAD_REQUEST.getStatusCode(), connection.getResponseCode());
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
index 3466d46..2efba8a 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
@@ -84,18 +84,18 @@ import org.junit.Test;
public class BasicITCase extends AbstractBaseTestITCase {
- private static final String CONTENT_TYPE_JSON_IEEE754_COMPATIBLE = "application/json;odata.metadata=minimal;"
- + "IEEE754Compatible=true";
+ private static final String CONTENT_TYPE_JSON_IEEE754_COMPATIBLE =
+ ContentType.create(ContentType.JSON, ContentType.PARAMETER_IEEE754_COMPATIBLE, "true").toContentTypeString();
private static final String SERVICE_NAMESPACE = "olingo.odata.test1";
private static final String ET_ALL_PRIM_NAME = "ETAllPrim";
private static final FullQualifiedName ET_ALL_PRIM = new FullQualifiedName(SERVICE_NAMESPACE, ET_ALL_PRIM_NAME);
-
+
private static final String PROPERTY_INT16 = "PropertyInt16";
private static final String PROPERTY_INT64 = "PropertyInt64";
private static final String PROPERTY_DECIMAL = "PropertyDecimal";
private static final String PROPERTY_COMP_ALL_PRIM = "PropertyCompAllPrim";
private static final String NAV_PROPERTY_ET_TWO_PRIM_ONE = "NavPropertyETTwoPrimOne";
-
+
private static final String SERVICE_URI = TecSvcConst.BASE_URI;
private static final String ES_ALL_PRIM = "ESAllPrim";
private static final String ES_TWO_PRIM = "ESTwoPrim";
@@ -435,7 +435,9 @@ public class BasicITCase extends AbstractBaseTestITCase {
final ODataEntityCreateResponse<ClientEntity> response = request.execute();
assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), response.getStatusCode());
assertEquals("return=minimal", response.getHeader(HeaderName.preferenceApplied).iterator().next());
- assertEquals(SERVICE_URI + "/ESTwoPrim(1)", response.getHeader(HttpHeader.LOCATION).iterator().next());
+ final String location = SERVICE_URI + "/ESTwoPrim(1)";
+ assertEquals(location, response.getHeader(HttpHeader.LOCATION).iterator().next());
+ assertEquals(location, response.getHeader(HttpHeader.ODATA_ENTITY_ID).iterator().next());
}
@Test
@@ -1291,7 +1293,7 @@ public class BasicITCase extends AbstractBaseTestITCase {
assertEquals(BigDecimal.valueOf(34), response.getBody().getPrimitiveValue().toValue());
}
-
+
@Override
protected ODataClient getClient() {
ODataClient odata = ODataClientFactory.getClient();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java
index 0039db6..3ab94da 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BatchClientITCase.java
@@ -48,6 +48,7 @@ import org.apache.olingo.client.api.domain.ClientObjectFactory;
import org.apache.olingo.client.api.http.HttpClientException;
import org.apache.olingo.client.api.uri.URIBuilder;
import org.apache.olingo.client.core.communication.request.batch.ODataChangesetResponseItem;
+import org.apache.olingo.commons.api.ODataPreferenceNames;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.format.ContentType;
@@ -160,14 +161,14 @@ public class BatchClientITCase extends AbstractTestITCase {
ODataBatchResponseItem item = iter.next();
assertFalse(item.isChangeset());
- ODataResponse oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResonse.getStatusCode());
- assertEquals(1, oDataResonse.getHeader("OData-Version").size());
- assertEquals("4.0", oDataResonse.getHeader("OData-Version").toArray()[0]);
- assertEquals(1, oDataResonse.getHeader("Content-Length").size());
- assertEquals("605", oDataResonse.getHeader("Content-Length").toArray()[0]);
- assertEquals("application/json;odata.metadata=minimal", oDataResonse.getContentType());
+ ODataResponse oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResponse.getStatusCode());
+ assertEquals(1, oDataResponse.getHeader("OData-Version").size());
+ assertEquals("4.0", oDataResponse.getHeader("OData-Version").toArray()[0]);
+ assertEquals(1, oDataResponse.getHeader("Content-Length").size());
+ assertEquals("605", oDataResponse.getHeader("Content-Length").toArray()[0]);
+ assertEquals(ContentType.JSON.toContentTypeString(), oDataResponse.getContentType());
}
@Test
@@ -191,14 +192,14 @@ public class BatchClientITCase extends AbstractTestITCase {
ODataBatchResponseItem item = iter.next();
assertFalse(item.isChangeset());
- ODataResponse oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResonse.getStatusCode());
- assertEquals(1, oDataResonse.getHeader("OData-Version").size());
- assertEquals("4.0", oDataResonse.getHeader("OData-Version").toArray()[0]);
- assertEquals(1, oDataResonse.getHeader("Content-Length").size());
- assertEquals("605", oDataResonse.getHeader("Content-Length").toArray()[0]);
- assertEquals("application/json;odata.metadata=minimal", oDataResonse.getContentType());
+ ODataResponse oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResponse.getStatusCode());
+ assertEquals(1, oDataResponse.getHeader("OData-Version").size());
+ assertEquals("4.0", oDataResponse.getHeader("OData-Version").toArray()[0]);
+ assertEquals(1, oDataResponse.getHeader("Content-Length").size());
+ assertEquals("605", oDataResponse.getHeader("Content-Length").toArray()[0]);
+ assertEquals(ContentType.JSON.toContentTypeString(), oDataResponse.getContentType());
}
@Test
@@ -222,23 +223,23 @@ public class BatchClientITCase extends AbstractTestITCase {
ODataBatchResponseItem item = iter.next();
assertFalse(item.isChangeset());
- ODataResponse oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResonse.getStatusCode());
- assertEquals(1, oDataResonse.getHeader("OData-Version").size());
- assertEquals("4.0", oDataResonse.getHeader("OData-Version").toArray()[0]);
- assertEquals(1, oDataResonse.getHeader("Content-Length").size());
- assertEquals("605", oDataResonse.getHeader("Content-Length").toArray()[0]);
- assertEquals("application/json;odata.metadata=minimal", oDataResonse.getContentType());
+ ODataResponse oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResponse.getStatusCode());
+ assertEquals(1, oDataResponse.getHeader("OData-Version").size());
+ assertEquals("4.0", oDataResponse.getHeader("OData-Version").toArray()[0]);
+ assertEquals(1, oDataResponse.getHeader("Content-Length").size());
+ assertEquals("605", oDataResponse.getHeader("Content-Length").toArray()[0]);
+ assertEquals(ContentType.JSON.toContentTypeString(), oDataResponse.getContentType());
// Check second get request
assertTrue(iter.hasNext());
item = iter.next();
assertFalse(item.isChangeset());
- oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), oDataResonse.getStatusCode());
+ oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), oDataResponse.getStatusCode());
// Check if third request is available
assertFalse(iter.hasNext());
@@ -310,7 +311,8 @@ public class BatchClientITCase extends AbstractTestITCase {
// Fetch result
final ODataBatchResponse response = payload.getResponse();
assertEquals(HttpStatusCode.ACCEPTED.getStatusCode(), response.getStatusCode());
- assertEquals("odata.continue-on-error", response.getHeader(HttpHeader.PREFERENCE_APPLIED).iterator().next());
+ assertEquals(ODataPreferenceNames.CONTINUE_ON_ERROR.toString(),
+ response.getHeader(HttpHeader.PREFERENCE_APPLIED).iterator().next());
final Iterator<ODataBatchResponseItem> bodyIterator = response.getBody();
@@ -319,37 +321,37 @@ public class BatchClientITCase extends AbstractTestITCase {
ODataBatchResponseItem item = bodyIterator.next();
assertFalse(item.isChangeset());
- ODataResponse oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResonse.getStatusCode());
- assertEquals(1, oDataResonse.getHeader(HttpHeader.ODATA_VERSION).size());
- assertEquals("4.0", oDataResonse.getHeader(HttpHeader.ODATA_VERSION).toArray()[0]);
- assertEquals(1, oDataResonse.getHeader(HttpHeader.CONTENT_LENGTH).size());
- assertEquals("605", oDataResonse.getHeader(HttpHeader.CONTENT_LENGTH).toArray()[0]);
- assertEquals("application/json;odata.metadata=minimal", oDataResonse.getContentType());
+ ODataResponse oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResponse.getStatusCode());
+ assertEquals(1, oDataResponse.getHeader(HttpHeader.ODATA_VERSION).size());
+ assertEquals("4.0", oDataResponse.getHeader(HttpHeader.ODATA_VERSION).toArray()[0]);
+ assertEquals(1, oDataResponse.getHeader(HttpHeader.CONTENT_LENGTH).size());
+ assertEquals("605", oDataResponse.getHeader(HttpHeader.CONTENT_LENGTH).toArray()[0]);
+ assertEquals(ContentType.JSON.toContentTypeString(), oDataResponse.getContentType());
// Check second get request
assertTrue(bodyIterator.hasNext());
item = bodyIterator.next();
assertFalse(item.isChangeset());
- oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), oDataResonse.getStatusCode());
+ oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), oDataResponse.getStatusCode());
// Check if third request is available
assertTrue(bodyIterator.hasNext());
item = bodyIterator.next();
assertFalse(item.isChangeset());
- oDataResonse = item.next();
- assertNotNull(oDataResonse);
- assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResonse.getStatusCode());
- assertEquals(1, oDataResonse.getHeader(HttpHeader.ODATA_VERSION).size());
- assertEquals("4.0", oDataResonse.getHeader(HttpHeader.ODATA_VERSION).toArray()[0]);
- assertEquals(1, oDataResonse.getHeader(HttpHeader.CONTENT_LENGTH).size());
- assertEquals("513", oDataResonse.getHeader(HttpHeader.CONTENT_LENGTH).toArray()[0]);
- assertEquals("application/json;odata.metadata=minimal", oDataResonse.getContentType());
+ oDataResponse = item.next();
+ assertNotNull(oDataResponse);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), oDataResponse.getStatusCode());
+ assertEquals(1, oDataResponse.getHeader(HttpHeader.ODATA_VERSION).size());
+ assertEquals("4.0", oDataResponse.getHeader(HttpHeader.ODATA_VERSION).toArray()[0]);
+ assertEquals(1, oDataResponse.getHeader(HttpHeader.CONTENT_LENGTH).size());
+ assertEquals("513", oDataResponse.getHeader(HttpHeader.CONTENT_LENGTH).toArray()[0]);
+ assertEquals(ContentType.JSON.toContentTypeString(), oDataResponse.getContentType());
}
@Test
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/EdmEnabledClientITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/EdmEnabledClientITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/EdmEnabledClientITCase.java
deleted file mode 100644
index 05622bf..0000000
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/EdmEnabledClientITCase.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.fit.tecsvc.client;
-
-import static org.junit.Assert.*;
-
-import java.net.URI;
-
-import org.apache.olingo.client.api.EdmEnabledODataClient;
-import org.apache.olingo.client.api.ODataClient;
-import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.client.api.domain.ClientEntity;
-import org.apache.olingo.client.core.ODataClientFactory;
-import org.apache.olingo.fit.AbstractBaseTestITCase;
-import org.apache.olingo.fit.tecsvc.TecSvcConst;
-import org.junit.Test;
-
-public class EdmEnabledClientITCase extends AbstractBaseTestITCase {
-
- private static final String SERVICE_URI = TecSvcConst.BASE_URI;
- private static final String ES_KEY_NAV = "ESKeyNav";
- private static final String NAV_PROPERTY_ET_KEY_NAV_ONE = "NavPropertyETKeyNavOne";
-
- @Test
- public void readSingleValuedNavigationPropertyWithNullValue() {
- final ODataClient client = getClient();
- final URI uri = client.newURIBuilder(SERVICE_URI)
- .appendEntitySetSegment(ES_KEY_NAV)
- .appendKeySegment(3)
- .expand(NAV_PROPERTY_ET_KEY_NAV_ONE)
- .build();
-
-
- final ODataRetrieveResponse<ClientEntity> response = getClient().getRetrieveRequestFactory()
- .getEntityRequest(uri)
- .execute();
-
- assertEquals(0, response.getBody().getNavigationLinks().size());
- assertNull(response.getBody().getNavigationLink(NAV_PROPERTY_ET_KEY_NAV_ONE));
- }
-
- @Override
- protected ODataClient getClient() {
- final EdmEnabledODataClient client = ODataClientFactory.getEdmEnabledClient(SERVICE_URI);
- return client;
- }
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ExpandSelectITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ExpandSelectITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ExpandSelectITCase.java
index 1ae1f22..df95a6e 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ExpandSelectITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ExpandSelectITCase.java
@@ -149,6 +149,18 @@ public final class ExpandSelectITCase extends AbstractBaseTestITCase {
assertEquals("Test String4", innerEntity.getProperty("PropertyString").getPrimitiveValue().toValue());
}
+ @Test
+ public void expandSingleValuedNavigationPropertyWithNullValue() {
+ final ODataClient client = getClient();
+ final ODataRetrieveResponse<ClientEntity> response = client.getRetrieveRequestFactory()
+ .getEntityRequest(client.newURIBuilder(TecSvcConst.BASE_URI)
+ .appendEntitySetSegment("ESKeyNav").appendKeySegment(3).expand("NavPropertyETKeyNavOne").build())
+ .execute();
+
+ assertEquals(0, response.getBody().getNavigationLinks().size());
+ assertNull(response.getBody().getNavigationLink("NavPropertyETKeyNavOne"));
+ }
+
@Override
protected ODataClient getClient() {
return ODataClientFactory.getEdmEnabledClient(TecSvcConst.BASE_URI);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicBatchITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicBatchITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicBatchITCase.java
index 65d8830..38b3cf6 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicBatchITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicBatchITCase.java
@@ -31,6 +31,7 @@ import java.net.ProtocolException;
import java.net.URL;
import org.apache.olingo.client.api.ODataClient;
+import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.commons.api.http.HttpStatusCode;
@@ -40,12 +41,16 @@ import org.junit.Test;
public class BasicBatchITCase extends AbstractBaseTestITCase {
- private static final String HEADER_CONTENT_TRANSFER_ENCODING_BINARY = "Content-Transfer-Encoding: binary";
- private static final String HEADER_CONTENT_TYPE_HTTP = "Content-Type: application/http";
private static final String SERVICE_URI = TecSvcConst.BASE_URI + "/";
- private static final String CONTENT_TYPE_HEADER_VALUE = " multipart/mixed;boundary=batch_123";
+
+ private static final String HEADER_CONTENT_TRANSFER_ENCODING_BINARY = "Content-Transfer-Encoding: binary";
+ private static final String HEADER_CONTENT_TYPE_HTTP =
+ HttpHeader.CONTENT_TYPE + ": " + ContentType.APPLICATION_HTTP.toContentTypeString();
+ private static final String CONTENT_TYPE_HEADER_VALUE = " "
+ + ContentType.create(ContentType.MULTIPART_MIXED, "boundary", "batch_123").toContentTypeString();
+ private static final String ACCEPT_HEADER_VALUE = ContentType.APPLICATION_JSON.toContentTypeString();
+
private static final String CRLF = "\r\n";
- private static final String ACCEPT_HEADER_VALUE = "application/json";
@Test
public void test() throws IOException {
@@ -110,7 +115,7 @@ public class BasicBatchITCase extends AbstractBaseTestITCase {
}
private void blankLine(final BufferedReader reader) throws IOException {
- assertEquals("", reader.readLine()); // CRLF becomes to an empty string
+ assertEquals("", reader.readLine()); // CRLF becomes an empty string
}
private String getRequest(final String uri) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java
index dc32808..e097581 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/BasicHttpITCase.java
@@ -21,18 +21,17 @@ package org.apache.olingo.fit.tecsvc.http;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.io.InputStream;
-import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
+import org.apache.commons.io.IOUtils;
import org.apache.olingo.client.api.ODataClient;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.fit.AbstractBaseTestITCase;
import org.apache.olingo.fit.tecsvc.TecSvcConst;
-import org.apache.olingo.server.core.deserializer.batch.BufferedReaderIncludingLineEndings;
import org.junit.Test;
public class BasicHttpITCase extends AbstractBaseTestITCase {
@@ -44,13 +43,11 @@ public class BasicHttpITCase extends AbstractBaseTestITCase {
URL url = new URL(SERVICE_URI + "?$format=json");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
- String ct = connection.getHeaderField(HttpHeader.CONTENT_TYPE);
- assertEquals(ContentType.create("application/json;odata.metadata=minimal"), ContentType.create(ct));
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+ assertEquals(ContentType.JSON, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
}
@Test
@@ -59,15 +56,13 @@ public class BasicHttpITCase extends AbstractBaseTestITCase {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "application/json;q=0.2;odata.metadata=minimal");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
- String ct = connection.getHeaderField(HttpHeader.CONTENT_TYPE);
- assertEquals(ContentType.create("application/json;odata.metadata=minimal"), ContentType.create(ct));
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+ assertEquals(ContentType.JSON, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
}
@Test
@@ -76,15 +71,13 @@ public class BasicHttpITCase extends AbstractBaseTestITCase {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "application/json");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
- String ct = connection.getHeaderField(HttpHeader.CONTENT_TYPE);
- assertEquals(ContentType.create("application/json;odata.metadata=minimal"), ContentType.create(ct));
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+ assertEquals(ContentType.JSON, ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
}
@Test
@@ -93,15 +86,14 @@ public class BasicHttpITCase extends AbstractBaseTestITCase {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "application/json;q=0.2;odata.metadata=minimal;charset=utf-8");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
- String ct = connection.getHeaderField(HttpHeader.CONTENT_TYPE);
- assertEquals(ContentType.create("application/json;odata.metadata=minimal;charset=utf-8"), ContentType.create(ct));
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+ assertEquals(ContentType.create(ContentType.JSON, ContentType.PARAMETER_CHARSET, "utf-8"),
+ ContentType.create(connection.getHeaderField(HttpHeader.CONTENT_TYPE)));
}
@Test
@@ -110,65 +102,50 @@ public class BasicHttpITCase extends AbstractBaseTestITCase {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ODATA_MAX_VERSION, "4.0");
connection.setRequestProperty(HttpHeader.ACCEPT, "*/*");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
- String v = connection.getHeaderField(HttpHeader.ODATA_VERSION);
- assertEquals("4.0", v);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+ assertEquals("4.0", connection.getHeaderField(HttpHeader.ODATA_VERSION));
}
-
+
@Test
public void testIEEE754ParameterContentNegotiation() throws Exception {
final URL url = new URL(SERVICE_URI + "/ESAllPrim(32767)?$format=application/json;IEEE754Compatible=true");
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "application/json;IEEE754Compatible=false");
connection.connect();
-
+
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
- assertEquals(ContentType.create("application/json;IEEE754Compatible=true;odata.metadata=minimal"),
- ContentType.create(connection.getContentType()));
- final String content = inputStreamToString(connection.getInputStream());
-
+ assertEquals(ContentType.create(ContentType.JSON, ContentType.PARAMETER_IEEE754_COMPATIBLE, "true"),
+ ContentType.create(connection.getContentType()));
+ final String content = IOUtils.toString(connection.getInputStream());
+
assertTrue(content.contains("\"PropertyDecimal\":\"34\""));
assertTrue(content.contains("\"PropertyInt64\":\"9223372036854775807\""));
}
-
+
@Test
public void testIEEE754ParameterViaAcceptHeader() throws Exception {
final URL url = new URL(SERVICE_URI + "/ESAllPrim(32767)");
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "application/json;IEEE754Compatible=true");
connection.connect();
-
+
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
- assertEquals(ContentType.create("application/json;IEEE754Compatible=true;odata.metadata=minimal"),
- ContentType.create(connection.getContentType()));
- final String content = inputStreamToString(connection.getInputStream());
-
+ assertEquals(ContentType.create(ContentType.JSON, ContentType.PARAMETER_IEEE754_COMPATIBLE, "true"),
+ ContentType.create(connection.getContentType()));
+ final String content = IOUtils.toString(connection.getInputStream());
+
assertTrue(content.contains("\"PropertyDecimal\":\"34\""));
assertTrue(content.contains("\"PropertyInt64\":\"9223372036854775807\""));
}
-
- private String inputStreamToString(final InputStream in) throws Exception {
- final BufferedReaderIncludingLineEndings reader = new BufferedReaderIncludingLineEndings(new InputStreamReader(in));
- final StringBuffer buffer = new StringBuffer();
- String current;
-
- while((current = reader.readLine()) != null) {
- buffer.append(current);
- }
-
- reader.close();
- return buffer.toString();
- }
-
+
@Override
protected ODataClient getClient() {
return null;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/EntityReferenceITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/EntityReferenceITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/EntityReferenceITCase.java
index bcfc096..359feb7 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/EntityReferenceITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/EntityReferenceITCase.java
@@ -21,16 +21,17 @@ package org.apache.olingo.fit.tecsvc.http;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import java.io.InputStream;
-import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
+import org.apache.commons.io.IOUtils;
import org.apache.olingo.client.api.ODataClient;
+import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpMethod;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.fit.AbstractBaseTestITCase;
import org.apache.olingo.fit.tecsvc.TecSvcConst;
-import org.apache.olingo.server.core.deserializer.batch.BufferedReaderIncludingLineEndings;
import org.junit.Test;
public class EntityReferenceITCase extends AbstractBaseTestITCase {
@@ -41,49 +42,34 @@ public class EntityReferenceITCase extends AbstractBaseTestITCase {
@Test
public void testContextURlSingleEntity() throws Exception {
- URL url = new URL(SERVICE_URI + "/ESAllPrim(0)/$ref");
+ URL url = new URL(SERVICE_URI + "/ESAllPrim(0)/$ref");
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestProperty(HttpHeader.ACCEPT, "application/json");
- connection.setRequestMethod("GET");
- connection.connect();
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestProperty(HttpHeader.ACCEPT, ContentType.APPLICATION_JSON.toContentTypeString());
+ connection.setRequestMethod(HttpMethod.GET.name());
+ connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
-
- final String content = getString(connection.getInputStream());
- assertTrue(content.contains(CONTEXT_ENTITY_REFERENCE));
- }
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+
+ final String content = IOUtils.toString(connection.getInputStream());
+ assertTrue(content.contains(CONTEXT_ENTITY_REFERENCE));
+ }
@Test
public void testContextURLEntityCollection() throws Exception {
URL url = new URL(SERVICE_URI + "/ESAllPrim/$ref");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestProperty(HttpHeader.ACCEPT, "application/json");
- connection.setRequestMethod("GET");
+ connection.setRequestProperty(HttpHeader.ACCEPT, ContentType.APPLICATION_JSON.toContentTypeString());
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
-
- final String content = getString(connection.getInputStream());
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
+
+ final String content = IOUtils.toString(connection.getInputStream());
assertTrue(content.contains(CONTEXT_COLLECTION_REFERENCE));
}
-
- private String getString(final InputStream in) throws Exception {
- final StringBuilder builder = new StringBuilder();
- final BufferedReaderIncludingLineEndings reader = new BufferedReaderIncludingLineEndings(new InputStreamReader(in));
-
- String line;
- while((line = reader.readLine()) != null) {
- builder.append(line);
- }
-
- reader.close();
- return builder.toString();
- }
-
+
@Override
protected ODataClient getClient() {
return null;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/PingITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/PingITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/PingITCase.java
index b016a4b..5a20f29 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/PingITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/http/PingITCase.java
@@ -25,6 +25,8 @@ import java.net.URL;
import org.apache.olingo.client.api.ODataClient;
import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpMethod;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.fit.AbstractBaseTestITCase;
import org.apache.olingo.fit.tecsvc.TecSvcConst;
import org.junit.Test;
@@ -41,12 +43,11 @@ public class PingITCase extends AbstractBaseTestITCase {
LOG.debug("ping request: " + SERVICE_URI);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "*/*");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
}
@Test
@@ -57,12 +58,11 @@ public class PingITCase extends AbstractBaseTestITCase {
LOG.debug("redirect request: " + REDIRECT_URI);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod("GET");
+ connection.setRequestMethod(HttpMethod.GET.name());
connection.setRequestProperty(HttpHeader.ACCEPT, "*/*");
connection.connect();
- int code = connection.getResponseCode();
- assertEquals(200, code);
+ assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
index 58fc160..7831bd7 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
@@ -70,7 +70,8 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
assertEquals("Edm.GeographyPoint", entity.getProperty("Home").getPrimitiveValue().getTypeName());
// In JSON with minimal metadata, links are not provided
- if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)
+ if (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)
|| (contentType.isCompatible(ContentType.JSON)
&& ContentType.VALUE_ODATA_METADATA_FULL
.equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA)))) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
index added7a..376404b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
@@ -85,7 +85,8 @@ public class ClientEntitySetIterator<ES extends ClientEntitySet, E extends Clien
this.contentType = contentType;
this.osEntitySet = new ByteArrayOutputStream();
- if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)) {
+ if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)) {
namespaces = getAllElementAttributes(stream, "feed", osEntitySet);
} else {
namespaces = null;
@@ -103,14 +104,12 @@ public class ClientEntitySetIterator<ES extends ClientEntitySet, E extends Clien
}
}
- /**
- * {@inheritDoc }
- */
- @Override
@SuppressWarnings("unchecked")
+ @Override
public boolean hasNext() {
if (available && cached == null) {
- if (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)) {
+ if (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)) {
cached = nextAtomEntityFromEntitySet(stream, osEntitySet, namespaces);
} else {
cached = nextJSONEntityFromEntitySet(stream, osEntitySet);
@@ -131,9 +130,6 @@ public class ClientEntitySetIterator<ES extends ClientEntitySet, E extends Clien
return available;
}
- /**
- * {@inheritDoc }
- */
@Override
public E next() {
if (hasNext()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
index b00d3a8..6c3bb4c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
@@ -95,7 +95,7 @@ public class ODataClientImpl implements ODataClient {
public ODataWriter getWriter() {
return writer;
}
-
+
@Override
public ODataServiceVersion getServiceVersion() {
return ODataServiceVersion.V40;
@@ -113,7 +113,7 @@ public class ODataClientImpl implements ODataClient {
public URIBuilder newURIBuilder(final String serviceRoot) {
return new URIBuilderImpl(getConfiguration(), serviceRoot);
}
-
+
@Override
public FilterFactory getFilterFactory() {
return filterFactory;
@@ -131,10 +131,10 @@ public class ODataClientImpl implements ODataClient {
@Override
public ODataSerializer getSerializer(final ContentType contentType) {
- return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML,
- ContentType.APPLICATION_XML) ?
- new AtomSerializer() : new JsonSerializer(false, contentType);
-
+ return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)
+ || contentType.isCompatible(ContentType.APPLICATION_XML) ?
+ new AtomSerializer() : new JsonSerializer(false, contentType);
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
index f28130d..8bd3363 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
@@ -96,9 +96,10 @@ public abstract class AbstractODataInvokeRequest<T extends ClientInvokeResult>
}
private String getActualFormat(final ContentType contentType) {
- return ((ClientProperty.class.isAssignableFrom(reference)
- && contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML))
- ? ContentType.APPLICATION_XML : contentType).toContentTypeString();
+ return (ClientProperty.class.isAssignableFrom(reference)
+ && (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)) ?
+ ContentType.APPLICATION_XML : contentType).toContentTypeString();
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
index b6c233f..4a2f078 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
@@ -54,13 +54,13 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class ClientODataDeserializerImpl implements ClientODataDeserializer {
private final ODataDeserializer deserializer;
-
private final ContentType contentType;
public ClientODataDeserializerImpl(final boolean serverMode, final ContentType contentType) {
this.contentType = contentType;
- if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML,
- ContentType.APPLICATION_XML )) {
+ if (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)
+ || contentType.isCompatible(ContentType.APPLICATION_XML)) {
deserializer = new AtomDeserializer();
} else {
deserializer = new JsonDeserializer(serverMode);
@@ -127,10 +127,11 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer {
@Override
public ResWrap<Delta> toDelta(final InputStream input) throws ODataDeserializerException {
try {
- return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML) ?
+ return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML) ?
new AtomDeserializer().delta(input) :
new JsonDeltaDeserializer(false).toDelta(input);
- } catch (XMLStreamException e) {
+ } catch (final XMLStreamException e) {
throw new ODataDeserializerException(e);
} catch (final EdmPrimitiveTypeException e) {
throw new ODataDeserializerException(e);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
index beeda7e..bc116a8 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
@@ -44,7 +44,8 @@ public abstract class AbstractTest {
}
protected String getSuffix(final ContentType contentType) {
- return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML,
- ContentType.APPLICATION_XML) ? "xml": "json";
+ return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)
+ || contentType.isCompatible(ContentType.APPLICATION_XML) ? "xml": "json";
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
index a21cc15..6b69135 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
@@ -102,7 +102,8 @@ public class EntityTest extends AbstractTest {
}
if ("Orders".equals(link.getName())) {
checked++;
- if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)) {
+ if (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC)
+ || contentType.isCompatible(ContentType.APPLICATION_ATOM_XML)) {
assertEquals(ClientLinkType.ENTITY_SET_NAVIGATION, link.getType());
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/AcceptType.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/AcceptType.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/AcceptType.java
index ec273be..caf52ba 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/AcceptType.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/AcceptType.java
@@ -24,7 +24,6 @@ import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.TreeMap;
/**
* Internally used {@link AcceptType} for OData library.
@@ -55,26 +54,17 @@ public class AcceptType {
final Float quality) {
this.type = type;
this.subtype = subtype;
- this.parameters = createParameterMap();
+ this.parameters = TypeUtil.createParameterMap();
this.parameters.putAll(parameters);
this.quality = quality;
}
- private static TreeMap<String, String> createParameterMap() {
- return new TreeMap<String, String>(new Comparator<String>() {
- @Override
- public int compare(final String o1, final String o2) {
- return o1.compareToIgnoreCase(o2);
- }
- });
- }
-
private AcceptType(final String type) {
if (type == null) {
throw new IllegalArgumentException("Type parameter MUST NOT be null.");
}
List<String> typeSubtype = new ArrayList<String>();
- parameters = createParameterMap();
+ parameters = TypeUtil.createParameterMap();
parse(type, typeSubtype, parameters);
this.type = typeSubtype.get(0);
@@ -122,15 +112,15 @@ public class AcceptType {
}
/**
- * Creates a list of {@link AcceptType} objects based on given input string (<code>format</code>).
- * @param contentType accept types, comma-separated, as specified for the HTTP header <code>Accept</code>
+ * Creates a list of {@link AcceptType} objects based on given input string.
+ * @param acceptTypes accept types, comma-separated, as specified for the HTTP header <code>Accept</code>
* @return a list of <code>AcceptType</code> objects
* @throws IllegalArgumentException if input string is not parseable
*/
- public static List<AcceptType> create(final String contentType) {
+ public static List<AcceptType> create(final String acceptTypes) {
List<AcceptType> result = new ArrayList<AcceptType>();
- String[] values = contentType.split(",");
+ String[] values = acceptTypes.split(",");
for (String value : values) {
result.add(new AcceptType(value.trim()));
}
@@ -220,12 +210,12 @@ public class AcceptType {
}
/**
- * Sort given list of Accept types
+ * Sorts given list of Accept types
* according to their quality-parameter values and their specificity
* as defined in RFC 7231, chapters 3.1.1.1, 5.3.1, and 5.3.2.
* @param toSort list which is sorted and hence re-arranged
*/
- private static void sort(final List<AcceptType> toSort) {
+ private static void sort(List<AcceptType> toSort) {
Collections.sort(toSort,
new Comparator<AcceptType>() {
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
index 473ff58..2ff035d 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
@@ -20,14 +20,12 @@ package org.apache.olingo.commons.api.format;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.TreeMap;
/**
* Internally used {@link ContentType} for OData library.
@@ -96,10 +94,9 @@ public final class ContentType {
/**
* Creates a content type from type, subtype, and parameters.
- *
- * @param type
- * @param subtype
- * @param parameters
+ * @param type type
+ * @param subtype subtype
+ * @param parameters parameters as map from names to values
*/
private ContentType(final String type, final String subtype, final Map<String, String> parameters) {
this.type = validateType(type);
@@ -108,17 +105,12 @@ public final class ContentType {
if (parameters == null) {
this.parameters = Collections.emptyMap();
} else {
- this.parameters = new TreeMap<String, String>(new Comparator<String>() {
- @Override
- public int compare(final String o1, final String o2) {
- return o1.compareToIgnoreCase(o2);
- }
- });
+ this.parameters = TypeUtil.createParameterMap();
this.parameters.putAll(parameters);
}
}
- private String validateType(final String type) {
+ private String validateType(final String type) throws IllegalArgumentException {
if (type == null || type.isEmpty() || "*".equals(type)) {
throw new IllegalArgumentException("Illegal type '" + type + "'.");
}
@@ -129,20 +121,6 @@ public final class ContentType {
}
/**
- * Validates if given <code>format</code> is parseable and can be used as input for {@link #create(String)} method.
- *
- * @param format to be validated string
- * @return <code>true</code> if format is parseable otherwise <code>false</code>
- */
- public static boolean isParseable(final String format) {
- try {
- return ContentType.create(format) != null;
- } catch (IllegalArgumentException e) {
- return false;
- }
- }
-
- /**
* Creates a content type from an existing content type and an additional parameter as key-value pair.
* @param contentType an existing content type
* @param parameterName the name of the additional parameter
@@ -150,17 +128,12 @@ public final class ContentType {
* @return a new {@link ContentType} object
*/
public static ContentType create(final ContentType contentType,
- final String parameterName, final String parameterValue) {
- if (parameterName == null || parameterName.isEmpty() || parameterName.indexOf(TypeUtil.WHITESPACE_CHAR) >= 0) {
- throw new IllegalArgumentException("Illegal parameter name '" + parameterName + "'.");
- }
- if (Character.isWhitespace(parameterValue.charAt(0))) {
- throw new IllegalArgumentException("Value of parameter '" + parameterName + "' starts with whitespace.");
- }
+ final String parameterName, final String parameterValue) throws IllegalArgumentException {
+ TypeUtil.validateParameterNameAndValue(parameterName, parameterValue);
- ContentType ct = new ContentType(contentType.type, contentType.subtype, contentType.parameters);
- ct.parameters.put(parameterName.toLowerCase(Locale.ROOT), parameterValue);
- return ct;
+ ContentType type = new ContentType(contentType.type, contentType.subtype, contentType.parameters);
+ type.parameters.put(parameterName.toLowerCase(Locale.ROOT), parameterValue);
+ return type;
}
/**
@@ -168,15 +141,15 @@ public final class ContentType {
* <code>Media Type</code> format as defined in RFC 7231, chapter 3.1.1.1.
*
* @param format a string in format as defined in RFC 7231, chapter 3.1.1.1
- * @return a new <code>ContentType</code> object
+ * @return a new {@link ContentType} object
* @throws IllegalArgumentException if input string is not parseable
*/
- public static ContentType create(final String format) {
+ public static ContentType create(final String format) throws IllegalArgumentException {
if (format == null) {
throw new IllegalArgumentException("Parameter format MUST NOT be NULL.");
}
- final List<String> typeSubtype = new ArrayList<String>();
- final Map<String, String> parameters = new HashMap<String, String>();
+ List<String> typeSubtype = new ArrayList<String>();
+ Map<String, String> parameters = new HashMap<String, String>();
parse(format, typeSubtype, parameters);
return new ContentType(typeSubtype.get(0), typeSubtype.get(1), parameters);
}
@@ -198,7 +171,8 @@ public final class ContentType {
}
}
- private static void parse(final String format, final List<String> typeSubtype, final Map<String, String> parameters) {
+ private static void parse(final String format, List<String> typeSubtype, Map<String, String> parameters)
+ throws IllegalArgumentException {
final String[] typesAndParameters = format.split(TypeUtil.PARAMETER_SEPARATOR, 2);
final String types = typesAndParameters[0];
final String params = (typesAndParameters.length > 1 ? typesAndParameters[1] : null);
@@ -246,8 +220,7 @@ public final class ContentType {
/**
* Returns the value of a given parameter.
- * If the parameter does not exists the method returns null.
- *
+ * If the parameter does not exist the method returns null.
* @param name the name of the parameter to get (case-insensitive)
* @return the value of the parameter or <code>null</code> if the parameter is not present
*/
@@ -311,25 +284,7 @@ public final class ContentType {
}
/**
- * <p>{@link ContentType}s are <b>compatible</b>
- * if <code>type</code> and <code>subtype</code> have the same value.</p>
- * <p>The set <code>parameters</code> are <b>always</b> ignored
- * (for compare with parameters see {@link #equals(Object)}).</p>
- * @return <code>true</code> if both instances are compatible (see definition above), otherwise <code>false</code>.
- */
- public boolean isCompatible(final ContentType... otherTypes) {
- for (final ContentType otherType : otherTypes) {
- if (isCompatible(otherType)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
* Checks whether both strings are equal ignoring the case of the strings.
- *
* @param first first string
* @param second second string
* @return <code>true</code> if both strings are equal (ignoring the case), otherwise <code>false</code>
@@ -340,10 +295,8 @@ public final class ContentType {
/**
* Gets {@link ContentType} as string as defined in
- * <a href="http://www.ietf.org/rfc/rfc7231.txt">RFC 7231</a>, chapter 3.1.1.1:
- * Media Type.
- *
- * @return string representation of <code>ContentType</code> object
+ * <a href="http://www.ietf.org/rfc/rfc7231.txt">RFC 7231</a>, chapter 3.1.1.1: Media Type.
+ * @return string representation of {@link ContentType} object
*/
public String toContentTypeString() {
final StringBuilder sb = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/TypeUtil.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/TypeUtil.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/TypeUtil.java
index 03fd078..64b2672 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/TypeUtil.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/TypeUtil.java
@@ -18,8 +18,10 @@
*/
package org.apache.olingo.commons.api.format;
+import java.util.Comparator;
import java.util.Locale;
import java.util.Map;
+import java.util.TreeMap;
class TypeUtil {
@@ -32,6 +34,16 @@ class TypeUtil {
static final String TYPE_SUBTYPE_SEPARATOR = "/";
static final String TYPE_SUBTYPE_WILDCARD = "*";
+ /** Creates a parameter map with predictable order. */
+ protected static Map<String, String> createParameterMap() {
+ return new TreeMap<String, String>(new Comparator<String>() {
+ @Override
+ public int compare(final String o1, final String o2) {
+ return o1.compareToIgnoreCase(o2);
+ }
+ });
+ }
+
/**
* Valid input are <code>;</code> separated <code>key=value</code> pairs
* without spaces between key and value.
@@ -60,19 +72,23 @@ class TypeUtil {
if (parameter.isEmpty()) {
throw new IllegalArgumentException("An empty parameter is not allowed.");
}
- String[] keyValue = parameter.trim().split(TypeUtil.PARAMETER_KEY_VALUE_SEPARATOR);
- if (keyValue.length != 2 || keyValue[0].isEmpty()) {
- throw new IllegalArgumentException(
- "Parameter '" + parameter + "' must have exactly one '" + TypeUtil.PARAMETER_KEY_VALUE_SEPARATOR +
- "' that separates the name and the value.");
+ String[] keyValue = parameter.trim().split(PARAMETER_KEY_VALUE_SEPARATOR);
+ if (keyValue.length != 2) {
+ throw new IllegalArgumentException("Parameter '" + parameter + "' must have exactly one '"
+ + PARAMETER_KEY_VALUE_SEPARATOR + "' that separates the name and the value.");
}
+ validateParameterNameAndValue(keyValue[0], keyValue[1]);
keyValue[0] = keyValue[0].toLowerCase(Locale.ENGLISH);
- if (keyValue[0].indexOf(WHITESPACE_CHAR) >= 0) {
- throw new IllegalArgumentException("Parameter name '" + keyValue[0] + "' contains whitespace.");
+ return keyValue;
+ }
+
+ protected static void validateParameterNameAndValue(final String parameterName, final String parameterValue)
+ throws IllegalArgumentException {
+ if (parameterName == null || parameterName.isEmpty() || parameterName.indexOf(WHITESPACE_CHAR) >= 0) {
+ throw new IllegalArgumentException("Illegal parameter name '" + parameterName + "'.");
}
- if (Character.isWhitespace(keyValue[1].charAt(0))) {
- throw new IllegalArgumentException("Value of parameter '" + keyValue[0] + "' starts with whitespace.");
+ if (Character.isWhitespace(parameterValue.charAt(0))) {
+ throw new IllegalArgumentException("Value of parameter '" + parameterName + "' starts with whitespace.");
}
- return keyValue;
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/commons-api/src/main/java/org/apache/olingo/commons/api/http/HttpHeader.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/http/HttpHeader.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/http/HttpHeader.java
index 1036b88..d9ebe1b 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/http/HttpHeader.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/http/HttpHeader.java
@@ -165,23 +165,15 @@ public interface HttpHeader {
*/
public static final String SET_COOKIE = "Set-Cookie";
- /**
- * non standard header
- */
+ /** Non standard header. */
public static final String X_HTTP_METHOD = "X-HTTP-Method";
-
- /**
- * non standard header
- */
+ /** Non standard header. */
public static final String X_HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override";
- /**
- * OData Custom Header
- */
+ /** Custom Header defined in the OData standard. */
public static final String ODATA_VERSION = "OData-Version";
-
- /**
- * OData Custom Header
- */
+ /** Custom Header defined in the OData standard. */
public static final String ODATA_MAX_VERSION = "OData-MaxVersion";
+ /** Custom Header defined in the OData standard. */
+ public static final String ODATA_ENTITY_ID = "OData-EntityID";
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/commons-api/src/test/java/org/apache/olingo/commons/api/format/ContentTypeTest.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/test/java/org/apache/olingo/commons/api/format/ContentTypeTest.java b/lib/commons-api/src/test/java/org/apache/olingo/commons/api/format/ContentTypeTest.java
index 6f7460b..f173a76 100644
--- a/lib/commons-api/src/test/java/org/apache/olingo/commons/api/format/ContentTypeTest.java
+++ b/lib/commons-api/src/test/java/org/apache/olingo/commons/api/format/ContentTypeTest.java
@@ -100,7 +100,6 @@ public class ContentTypeTest {
@Test
public void testParse() {
assertNull(ContentType.parse("a"));
- assertFalse(ContentType.isParseable("a"));
}
@Test(expected = IllegalArgumentException.class)
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
index 663a7eb..9eb836c 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
@@ -158,9 +158,12 @@ public class TechnicalActionProcessor extends TechnicalProcessor
PreferencesApplied.with().returnRepresentation(returnPreference).build().toValueString());
}
if (entityResult.isCreated()) {
- response.setHeader(HttpHeader.LOCATION,
- request.getRawBaseUri() + '/'
- + odata.createUriHelper().buildCanonicalURL(edmEntitySet, entityResult.getEntity()));
+ final String location = request.getRawBaseUri() + '/'
+ + odata.createUriHelper().buildCanonicalURL(edmEntitySet, entityResult.getEntity());
+ response.setHeader(HttpHeader.LOCATION, location);
+ if (returnPreference == Return.MINIMAL) {
+ response.setHeader(HttpHeader.ODATA_ENTITY_ID, location);
+ }
}
if (entityResult.getEntity().getETag() != null) {
response.setHeader(HttpHeader.ETAG, entityResult.getEntity().getETag());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index 9844d71..2904e18 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -164,6 +164,8 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
expand = deserializerResult.getExpandTree();
}
+ final String location = request.getRawBaseUri() + '/'
+ + odata.createUriHelper().buildCanonicalURL(edmEntitySet, entity);
final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn();
if (returnPreference == null || returnPreference == Return.REPRESENTATION) {
response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, responseFormat, expand, null)
@@ -172,13 +174,13 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
response.setStatusCode(HttpStatusCode.CREATED.getStatusCode());
} else {
response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode());
+ response.setHeader(HttpHeader.ODATA_ENTITY_ID, location);
}
if (returnPreference != null) {
response.setHeader(HttpHeader.PREFERENCE_APPLIED,
PreferencesApplied.with().returnRepresentation(returnPreference).build().toValueString());
}
- response.setHeader(HttpHeader.LOCATION,
- request.getRawBaseUri() + '/' + odata.createUriHelper().buildCanonicalURL(edmEntitySet, entity));
+ response.setHeader(HttpHeader.LOCATION, location);
if (entity.getETag() != null) {
response.setHeader(HttpHeader.ETAG, entity.getETag());
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/abf5bf79/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
index e9761dc..55c0761 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
@@ -50,12 +50,12 @@ import org.apache.olingo.server.tecsvc.data.DataProvider;
*/
public abstract class TechnicalProcessor implements Processor {
+ protected final DataProvider dataProvider;
protected OData odata;
- protected DataProvider dataProvider;
protected ServiceMetadata serviceMetadata;
protected TechnicalProcessor(final DataProvider dataProvider) {
- this.dataProvider = dataProvider;
+ this(dataProvider, null);
}
protected TechnicalProcessor(final DataProvider dataProvider, final ServiceMetadata serviceMetadata) {