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 2014/12/03 16:28:11 UTC
[2/2] olingo-odata4 git commit: [OLINGO-472] Absolute Uris are not
longer allowed
[OLINGO-472] Absolute Uris are not longer allowed
Signed-off-by: Christian Amend <ch...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/297950a8
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/297950a8
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/297950a8
Branch: refs/heads/master
Commit: 297950a8d0d577d99acdac8ed42d09129a65add7
Parents: 520acbc
Author: Christian Holzer <c....@sap.com>
Authored: Mon Dec 1 17:18:05 2014 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Wed Dec 3 16:20:56 2014 +0100
----------------------------------------------------------------------
.../fit/tecsvc/client/BatchClientITCase.java | 7 +-
.../olingo/client/api/CommonODataClient.java | 4 +-
.../apache/olingo/client/api/Configuration.java | 16 +-
.../apache/olingo/client/api/uri/UriFormat.java | 38 ++++
.../olingo/client/api/v3/ODataClient.java | 5 +-
.../olingo/client/api/v4/ODataClient.java | 5 +-
.../olingo/client/core/ConfigurationImpl.java | 13 ++
.../client/core/uri/AbstractURIBuilder.java | 43 +++--
.../client/core/uri/v3/BatchURIBuilderImpl.java | 35 ++++
.../client/core/uri/v4/BatchURIBuilderImpl.java | 36 ++++
.../olingo/client/core/v3/ODataClientImpl.java | 8 +-
.../olingo/client/core/v4/ODataClientImpl.java | 8 +-
.../exception/BatchDeserializerException.java | 3 +-
.../BatchReferenceRewriter.java | 15 +-
.../batch/BatchRequestTransformator.java | 15 +-
.../batch/HttpRequestStatusLine.java | 185 +++++++------------
.../server-core-exceptions-i18n.properties | 1 +
.../batchhandler/MockedBatchHandlerTest.java | 23 +--
.../deserializer/BatchRequestParserTest.java | 34 +---
.../src/test/resources/batchWithPost.batch | 2 +-
20 files changed, 289 insertions(+), 207 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/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 3d6fba9..1ba00d5 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
@@ -42,6 +42,7 @@ import org.apache.olingo.client.api.communication.response.ODataBatchResponse;
import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
import org.apache.olingo.client.api.communication.response.ODataResponse;
+import org.apache.olingo.client.api.uri.UriFormat;
import org.apache.olingo.client.api.uri.v4.URIBuilder;
import org.apache.olingo.client.core.communication.request.batch.ODataChangesetResponseItem;
import org.apache.olingo.client.core.uri.URIUtils;
@@ -65,6 +66,7 @@ public class BatchClientITCase extends AbstractTestITCase {
@Before
public void setup() {
client.getConfiguration().setContinueOnError(false);
+ client.getConfiguration().setBatchUriFormat(UriFormat.RELATIVE);
}
@Test
@@ -162,7 +164,6 @@ public class BatchClientITCase extends AbstractTestITCase {
@Test
public void testErrorWithContinueOnErrorPreferHeader() {
client.getConfiguration().setContinueOnError(true);
-
final ODataBatchRequest request = client.getBatchRequestFactory().getBatchRequest(SERVICE_URI);
request.setAccept(ACCEPT);
@@ -446,9 +447,9 @@ public class BatchClientITCase extends AbstractTestITCase {
}
private void appendGetRequest(final BatchManager manager, final String segment, final Object key) {
- URIBuilder targetURI = client.newURIBuilder(SERVICE_URI);
+ URIBuilder targetURI = client.newBatchURIBuilder(SERVICE_URI);
targetURI.appendEntitySetSegment(segment).appendKeySegment(key);
-
+
ODataEntityRequest<ODataEntity> queryReq = client.getRetrieveRequestFactory().getEntityRequest(targetURI.build());
queryReq.setFormat(ODataFormat.JSON);
manager.addRequest(queryReq);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
index 336fa6f..7d8efbe 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
@@ -52,7 +52,9 @@ public interface CommonODataClient<UT extends CommonUpdateType> {
ODataPreferences newPreferences();
CommonURIBuilder<?> newURIBuilder(String serviceRoot);
-
+
+ CommonURIBuilder<?> newBatchURIBuilder(String serviceRoot);
+
CommonFilterFactory getFilterFactory();
ODataSerializer getSerializer(ODataFormat format);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-api/src/main/java/org/apache/olingo/client/api/Configuration.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/Configuration.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/Configuration.java
index 2dcc059..9fedc56 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/Configuration.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/Configuration.java
@@ -22,6 +22,7 @@ import java.util.concurrent.ExecutorService;
import org.apache.olingo.client.api.http.HttpClientFactory;
import org.apache.olingo.client.api.http.HttpUriRequestFactory;
+import org.apache.olingo.client.api.uri.UriFormat;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.commons.api.format.ODataFormat;
@@ -269,5 +270,18 @@ public interface Configuration {
* @param executorService new executor services.
*/
void setExecutor(ExecutorService executorService);
-
+
+ /**
+ * Returns the current URI format
+ *
+ * @return current URI format
+ */
+ UriFormat getUriFormat();
+
+ /**
+ * Sets the current URI format
+ *
+ * @param format new URI format
+ */
+ void setBatchUriFormat(UriFormat format);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/UriFormat.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/UriFormat.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/UriFormat.java
new file mode 100644
index 0000000..242d214
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/uri/UriFormat.java
@@ -0,0 +1,38 @@
+/*
+ * 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.client.api.uri;
+
+/**
+ * Determines if absolute or relative URIs are used
+ */
+public enum UriFormat {
+ /**
+ * Relative URI
+ *
+ * Example People(1)
+ */
+ RELATIVE,
+
+ /**
+ * Absolute URI
+ *
+ * Example https://host:1234/path/service/People(1)
+ */
+ ABSOLUTE;
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
index 4e8acb1..b45becd 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
@@ -44,7 +44,10 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
@Override
URIBuilder newURIBuilder(String serviceRoot);
-
+
+ @Override
+ URIBuilder newBatchURIBuilder(String serviceRoot);
+
@Override
FilterFactory getFilterFactory();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
index 2c9ba90..ed6ecf5 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
@@ -46,7 +46,10 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
@Override
URIBuilder newURIBuilder(String serviceRoot);
-
+
+ @Override
+ URIBuilder newBatchURIBuilder(String serviceRoot);
+
@Override
FilterFactory getFilterFactory();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-core/src/main/java/org/apache/olingo/client/core/ConfigurationImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/ConfigurationImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/ConfigurationImpl.java
index cd17ad0..0385878 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/ConfigurationImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/ConfigurationImpl.java
@@ -26,6 +26,7 @@ import java.util.concurrent.Executors;
import org.apache.olingo.client.api.Configuration;
import org.apache.olingo.client.api.http.HttpClientFactory;
import org.apache.olingo.client.api.http.HttpUriRequestFactory;
+import org.apache.olingo.client.api.uri.UriFormat;
import org.apache.olingo.client.core.http.DefaultHttpClientFactory;
import org.apache.olingo.client.core.http.DefaultHttpUriRequestFactory;
import org.apache.olingo.commons.api.format.ContentType;
@@ -59,6 +60,8 @@ public class ConfigurationImpl implements Configuration {
private static final String CONTINUE_ON_ERROR = "continueOnError";
+ private static final String BATCH_URI_FORMAT = "batchUriFormat";
+
private final Map<String, Object> CONF = new HashMap<String, Object>();
private transient ExecutorService executor = Executors.newFixedThreadPool(10);
@@ -230,4 +233,14 @@ public class ConfigurationImpl implements Configuration {
public void setExecutor(final ExecutorService executorService) {
executor = executorService;
}
+
+ @Override
+ public UriFormat getUriFormat() {
+ return (UriFormat) getProperty(BATCH_URI_FORMAT, UriFormat.ABSOLUTE);
+ }
+
+ @Override
+ public void setBatchUriFormat(UriFormat format) {
+ setProperty(BATCH_URI_FORMAT, format);
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
index f865f47..07153ad 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java
@@ -1,18 +1,18 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
+ * or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
+ * 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
- *
+ * 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
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
@@ -62,6 +62,7 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
return value;
}
}
+
/**
* Logger.
*/
@@ -90,10 +91,11 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
* service.
*/
protected AbstractURIBuilder(
- final ODataServiceVersion version, final Configuration configuration, final String serviceRoot) {
+ final ODataServiceVersion version, final Configuration configuration, final String serviceRoot) {
this.version = version;
this.configuration = configuration;
+
segments.add(new Segment(SegmentType.SERVICEROOT, serviceRoot));
}
@@ -137,8 +139,8 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
final String segValue = URIUtils.escape(version, val);
segments.add(configuration.isKeyAsSegment()
- ? new Segment(SegmentType.KEY_AS_SEGMENT, segValue)
- : new Segment(SegmentType.KEY, "(" + segValue + ")"));
+ ? new Segment(SegmentType.KEY_AS_SEGMENT, segValue)
+ : new Segment(SegmentType.KEY, "(" + segValue + ")"));
return getThis();
}
@@ -187,7 +189,7 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
@Override
public UB appendOperationCallSegment(final String operation) {
segments.add(new Segment(
- segments.size() == 1 ? SegmentType.UNBOUND_OPERATION : SegmentType.BOUND_OPERATION, operation));
+ segments.size() == 1 ? SegmentType.UNBOUND_OPERATION : SegmentType.BOUND_OPERATION, operation));
return getThis();
}
@@ -268,17 +270,18 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
@Override
public URI build() {
final StringBuilder segmentsBuilder = new StringBuilder();
+
for (Segment seg : segments) {
if (segmentsBuilder.length() > 0 && seg.getType() != SegmentType.KEY) {
switch (seg.getType()) {
- case BOUND_OPERATION:
- segmentsBuilder.append(getBoundOperationSeparator());
- break;
-
- default:
- if (segmentsBuilder.length() > 0 && segmentsBuilder.charAt(segmentsBuilder.length() - 1) != '/') {
- segmentsBuilder.append('/');
- }
+ case BOUND_OPERATION:
+ segmentsBuilder.append(getBoundOperationSeparator());
+ break;
+
+ default:
+ if (segmentsBuilder.length() > 0 && segmentsBuilder.charAt(segmentsBuilder.length() - 1) != '/') {
+ segmentsBuilder.append('/');
+ }
}
}
@@ -330,7 +333,7 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme
final StringBuilder keyBuilder = new StringBuilder().append('(');
for (Map.Entry<String, Object> entry : segmentValues.entrySet()) {
keyBuilder.append(entry.getKey()).append('=').append(
- escape ? URIUtils.escape(version, entry.getValue()) : entry.getValue());
+ escape ? URIUtils.escape(version, entry.getValue()) : entry.getValue());
keyBuilder.append(',');
}
keyBuilder.deleteCharAt(keyBuilder.length() - 1).append(')');
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/BatchURIBuilderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/BatchURIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/BatchURIBuilderImpl.java
new file mode 100644
index 0000000..3a860fb
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v3/BatchURIBuilderImpl.java
@@ -0,0 +1,35 @@
+/*
+ * 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.client.core.uri.v3;
+
+import org.apache.olingo.client.api.Configuration;
+import org.apache.olingo.client.api.uri.UriFormat;
+import org.apache.olingo.client.api.uri.v3.URIBuilder;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+public class BatchURIBuilderImpl extends URIBuilderImpl implements URIBuilder {
+
+ public BatchURIBuilderImpl(ODataServiceVersion version, Configuration configuration, String serviceRoot) {
+ super(version, configuration, serviceRoot);
+
+ if (configuration.getUriFormat() == UriFormat.RELATIVE && segments.size() >= 0) {
+ segments.remove(0);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/BatchURIBuilderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/BatchURIBuilderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/BatchURIBuilderImpl.java
new file mode 100644
index 0000000..e5d725d
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/v4/BatchURIBuilderImpl.java
@@ -0,0 +1,36 @@
+/*
+ * 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.client.core.uri.v4;
+
+import org.apache.olingo.client.api.Configuration;
+import org.apache.olingo.client.api.uri.UriFormat;
+import org.apache.olingo.client.api.uri.v4.URIBuilder;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+public class BatchURIBuilderImpl extends URIBuilderImpl implements URIBuilder {
+
+ public BatchURIBuilderImpl(ODataServiceVersion version, Configuration configuration, String serviceRoot) {
+ super(version, configuration, serviceRoot);
+
+ if(configuration.getUriFormat() == UriFormat.RELATIVE && segments.size() >= 0) {
+ segments.remove(0);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
index caaf423..470fc9d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
@@ -40,6 +40,7 @@ import org.apache.olingo.client.core.communication.request.retrieve.v3.RetrieveR
import org.apache.olingo.client.core.serialization.v3.ODataBinderImpl;
import org.apache.olingo.client.core.serialization.v3.ODataDeserializerImpl;
import org.apache.olingo.client.core.serialization.v3.ODataReaderImpl;
+import org.apache.olingo.client.core.uri.v3.BatchURIBuilderImpl;
import org.apache.olingo.client.core.uri.v3.FilterFactoryImpl;
import org.apache.olingo.client.core.uri.v3.URIBuilderImpl;
import org.apache.olingo.commons.api.domain.v3.ODataObjectFactory;
@@ -86,7 +87,12 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
public URIBuilder newURIBuilder(final String serviceRoot) {
return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
}
-
+
+ @Override
+ public URIBuilder newBatchURIBuilder(String serviceRoot) {
+ return new BatchURIBuilderImpl(getServiceVersion(), getConfiguration(), serviceRoot);
+ }
+
@Override
public FilterFactory getFilterFactory() {
return filterFactory;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
index c1a4f1d..29f0b42 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
@@ -43,6 +43,7 @@ import org.apache.olingo.client.core.communication.request.v4.AsyncRequestFactor
import org.apache.olingo.client.core.serialization.v4.ODataBinderImpl;
import org.apache.olingo.client.core.serialization.v4.ODataDeserializerImpl;
import org.apache.olingo.client.core.serialization.v4.ODataReaderImpl;
+import org.apache.olingo.client.core.uri.v4.BatchURIBuilderImpl;
import org.apache.olingo.client.core.uri.v4.FilterFactoryImpl;
import org.apache.olingo.client.core.uri.v4.URIBuilderImpl;
import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory;
@@ -92,7 +93,12 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
public URIBuilder newURIBuilder(final String serviceRoot) {
return new URIBuilderImpl(getServiceVersion(), getConfiguration(), serviceRoot);
}
-
+
+ @Override
+ public URIBuilder newBatchURIBuilder(String serviceRoot) {
+ return new BatchURIBuilderImpl(getServiceVersion(), getConfiguration(), serviceRoot);
+ }
+
@Override
public FilterFactory getFilterFactory() {
return filterFactory;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/exception/BatchDeserializerException.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/exception/BatchDeserializerException.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/exception/BatchDeserializerException.java
index 48f3815..060d475 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/exception/BatchDeserializerException.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/batch/exception/BatchDeserializerException.java
@@ -39,7 +39,8 @@ public class BatchDeserializerException extends BatchException {
MISSING_CONTENT_TRANSFER_ENCODING,
MISSING_CONTENT_TYPE,
MISSING_MANDATORY_HEADER,
- FORBIDDEN_HEADER;
+ FORBIDDEN_HEADER,
+ FORBIDDEN_ABSOLUTE_URI;
@Override
public String getKey() {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
index 195dca7..772fd9d 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
@@ -29,8 +29,8 @@ import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
+import org.apache.olingo.server.api.batch.exception.BatchDeserializerException.MessageKeys;
import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
-import org.apache.olingo.server.core.deserializer.batch.HttpRequestStatusLine.ODataURI;
public class BatchReferenceRewriter {
private static final String REG_EX_REFERENCE = "\\$(.*)(/.*)?";
@@ -78,8 +78,7 @@ public class BatchReferenceRewriter {
if (request.getMethod() == HttpMethod.POST) {
// Create entity
// The URI of the new resource will be generated by the server and published in the location header
- ODataURI uri = new ODataURI(response.getHeaders().get(HttpHeader.LOCATION), request.getRawBaseUri());
- resourceUri = uri.getRawODataPath();
+ resourceUri = parseODataPath(response.getHeaders().get(HttpHeader.LOCATION), request.getRawBaseUri());
} else {
// Update, Upsert (PUT, PATCH, Delete)
// These methods still addresses a given resource, so we use the URI given by the request
@@ -89,6 +88,16 @@ public class BatchReferenceRewriter {
return resourceUri;
}
+ private String parseODataPath(String uri, String rawBaseUri) throws BatchDeserializerException {
+ int index = uri.indexOf(rawBaseUri);
+
+ if(index == 0) {
+ return uri.substring(rawBaseUri.length());
+ } else {
+ throw new BatchDeserializerException("Invalid base uri or uri", MessageKeys.INVALID_URI, 0);
+ }
+ }
+
private String removeSlash(String rawODataPath, boolean first) {
final int indexOfSlash = rawODataPath.indexOf("/");
if (first) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestTransformator.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestTransformator.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestTransformator.java
index 3c5fd36..6da8de8 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestTransformator.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestTransformator.java
@@ -30,7 +30,6 @@ import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
import org.apache.olingo.server.api.batch.exception.BatchDeserializerException.MessageKeys;
import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
-import org.apache.olingo.server.core.deserializer.batch.HttpRequestStatusLine.ODataURI;
public class BatchRequestTransformator {
private final String baseUri;
@@ -101,10 +100,8 @@ public class BatchRequestTransformator {
final boolean isChangeSet)
throws BatchDeserializerException {
final HttpRequestStatusLine statusLine =
- new HttpRequestStatusLine(operation.getHttpStatusLine(), baseUri, rawServiceResolutionUri, operation
- .getHeaders());
+ new HttpRequestStatusLine(operation.getHttpStatusLine(), baseUri, rawServiceResolutionUri);
statusLine.validateHttpMethod(isChangeSet);
- final ODataURI uri = statusLine.getUri();
validateBody(statusLine, operation);
InputStream bodyStrean = getBodyStream(operation, statusLine);
@@ -114,11 +111,11 @@ public class BatchRequestTransformator {
final ODataRequest request = new ODataRequest();
request.setBody(bodyStrean);
request.setMethod(statusLine.getMethod());
- request.setRawBaseUri(uri.getRawBaseUri());
- request.setRawODataPath(uri.getRawODataPath());
- request.setRawQueryPath(uri.getRawQueryPath());
- request.setRawRequestUri(uri.getRawRequestUri());
- request.setRawServiceResolutionUri(uri.getRawServiceResolutionUri());
+ request.setRawBaseUri(statusLine.getRawBaseUri());
+ request.setRawODataPath(statusLine.getRawODataPath());
+ request.setRawQueryPath(statusLine.getRawQueryPath());
+ request.setRawRequestUri(statusLine.getRawRequestUri());
+ request.setRawServiceResolutionUri(statusLine.getRawServiceResolutionUri());
for (final HeaderField field : operation.getHeaders()) {
request.addHeader(field.getFieldName(), field.getValues());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
index 1e52ebc..36b18a8 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
@@ -6,9 +6,9 @@
* 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
@@ -18,23 +18,20 @@
*/
package org.apache.olingo.server.core.deserializer.batch;
-import java.util.ArrayList;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
import org.apache.olingo.server.api.batch.exception.BatchDeserializerException.MessageKeys;
public class HttpRequestStatusLine {
private static final Pattern PATTERN_RELATIVE_URI = Pattern.compile("([^/][^?]*)(?:\\?(.*))?");
- private static final Pattern PATTERN_ABSOLUTE_URI_WITH_HOST = Pattern.compile("(/[^?]*)(?:\\?(.*))?");
- private static final Pattern PATTERN_ABSOLUTE_URI = Pattern.compile("(http[s]?://[^?]*)(?:\\?(.*))?");
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",
@@ -46,15 +43,16 @@ public class HttpRequestStatusLine {
private HttpMethod method;
private String httpVersion;
- private Header header;
- private ODataURI uri;
-
- public HttpRequestStatusLine(final Line httpStatusLine, final String baseUri, final String serviceResolutionUri,
- final Header requestHeader)
- throws BatchDeserializerException {
+ private String rawServiceResolutionUri;
+ private String rawQueryPath;
+ private String rawODataPath;
+ private String rawBaseUri;
+ private String rawRequestUri;
+
+ public HttpRequestStatusLine(final Line httpStatusLine, final String baseUri, final String serviceResolutionUrir)
+ throws BatchDeserializerException {
statusLine = httpStatusLine;
requestBaseUri = baseUri;
- header = requestHeader;
parse();
}
@@ -64,7 +62,8 @@ public class HttpRequestStatusLine {
if (parts.length == 3) {
method = parseMethod(parts[0]);
- uri = new ODataURI(parts[1], requestBaseUri, statusLine.getLineNumber(), header.getHeaders(HttpHeader.HOST));
+ // uri = new ODataURI(parts[1], requestBaseUri, statusLine.getLineNumber(), header.getHeaders(HttpHeader.HOST));
+ parseUri(parts[1], requestBaseUri);
httpVersion = parseHttpVersion(parts[2]);
} else {
throw new BatchDeserializerException("Invalid status line", MessageKeys.INVALID_STATUS_LINE, statusLine
@@ -72,6 +71,40 @@ public class HttpRequestStatusLine {
}
}
+ private void parseUri(String rawUri, String baseUrl) throws BatchDeserializerException {
+ try {
+ final URI uri = new URI(rawUri);
+
+ if (uri.isAbsolute()) {
+ throw new BatchDeserializerException("Forbidden absolute uri", MessageKeys.FORBIDDEN_ABSOLUTE_URI, statusLine
+ .getLineNumber());
+ } else {
+ final Matcher relativeUriMatcher = PATTERN_RELATIVE_URI.matcher(rawUri);
+
+ if (relativeUriMatcher.matches()) {
+ buildUri(relativeUriMatcher.group(1), relativeUriMatcher.group(2));
+ } else {
+ throw new BatchDeserializerException("Malformed uri", MessageKeys.INVALID_URI, statusLine.getLineNumber());
+ }
+ }
+ } catch (URISyntaxException e) {
+ throw new BatchDeserializerException("Malformed uri", MessageKeys.INVALID_URI, statusLine.getLineNumber());
+ }
+ }
+
+ private void buildUri(final String oDataPath, final String queryOptions) throws BatchDeserializerException {
+ rawBaseUri = requestBaseUri;
+ rawODataPath = "/" + oDataPath;
+ rawRequestUri = requestBaseUri + rawODataPath;
+
+ if (queryOptions != null) {
+ rawRequestUri += "?" + queryOptions;
+ rawQueryPath = queryOptions;
+ } else {
+ rawQueryPath = "";
+ }
+ }
+
private HttpMethod parseMethod(final String method) throws BatchDeserializerException {
try {
return HttpMethod.valueOf(method.trim());
@@ -96,8 +129,7 @@ public class HttpRequestStatusLine {
if (!validMethods.contains(getMethod().toString())) {
if (isChangeSet) {
throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
- statusLine
- .getLineNumber());
+ statusLine.getLineNumber());
} else {
throw new BatchDeserializerException("Invalid query operation method",
MessageKeys.INVALID_QUERY_OPERATION_METHOD,
@@ -118,114 +150,27 @@ public class HttpRequestStatusLine {
return statusLine.getLineNumber();
}
- public ODataURI getUri() {
- return uri;
+ public String getRequestBaseUri() {
+ return requestBaseUri;
}
- public static class ODataURI {
- private String rawServiceResolutionUri;
- private String rawQueryPath;
- private String rawODataPath;
- private String rawBaseUri;
- private String rawRequestUri;
- private final String requestBaseUri;
- private final int lineNumber;
-
- public ODataURI(final String rawUri, final String requestBaseUri) throws BatchDeserializerException {
- this(rawUri, requestBaseUri, 0, new ArrayList<String>());
- }
-
- public ODataURI(final String rawUri, final String requestBaseUri, final int lineNumber,
- final List<String> hostHeader)
- throws BatchDeserializerException {
- this.lineNumber = lineNumber;
- this.requestBaseUri = requestBaseUri;
-
- final Matcher absoluteUriMatcher = PATTERN_ABSOLUTE_URI.matcher(rawUri);
- final Matcher absoluteUriWtithHostMatcher = PATTERN_ABSOLUTE_URI_WITH_HOST.matcher(rawUri);
- final Matcher relativeUriMatcher = PATTERN_RELATIVE_URI.matcher(rawUri);
-
- if (absoluteUriMatcher.matches()) {
- buildUri(absoluteUriMatcher.group(1), absoluteUriMatcher.group(2));
-
- } else if (absoluteUriWtithHostMatcher.matches()) {
- if (hostHeader != null && hostHeader.size() == 1) {
- buildUri(hostHeader.get(0) + absoluteUriWtithHostMatcher.group(1), absoluteUriWtithHostMatcher.group(2));
- } else {
- throw new BatchDeserializerException("Exactly one host header is required",
- MessageKeys.MISSING_MANDATORY_HEADER,
- lineNumber);
- }
-
- } else if (relativeUriMatcher.matches()) {
- buildUri(requestBaseUri + "/" + relativeUriMatcher.group(1), relativeUriMatcher.group(2));
-
- } else {
- throw new BatchDeserializerException("Invalid uri", MessageKeys.INVALID_URI, lineNumber);
- }
- }
-
- private void buildUri(final String resourceUri, final String queryOptions) throws BatchDeserializerException {
- if (!resourceUri.startsWith(requestBaseUri)) {
- throw new BatchDeserializerException("Host do not match", MessageKeys.INVALID_URI, lineNumber);
- }
-
- final int oDataPathIndex = resourceUri.indexOf(requestBaseUri);
-
- rawBaseUri = requestBaseUri;
- rawODataPath = resourceUri.substring(oDataPathIndex + requestBaseUri.length());
- rawRequestUri = requestBaseUri + rawODataPath;
-
- if (queryOptions != null) {
- rawRequestUri += "?" + queryOptions;
- rawQueryPath = queryOptions;
- } else {
- rawQueryPath = "";
- }
- }
-
- public String getRawServiceResolutionUri() {
- return rawServiceResolutionUri;
- }
-
- public void setRawServiceResolutionUri(final String rawServiceResolutionUri) {
- this.rawServiceResolutionUri = rawServiceResolutionUri;
- }
-
- public String getRawQueryPath() {
- return rawQueryPath;
- }
-
- public void setRawQueryPath(final String rawQueryPath) {
- this.rawQueryPath = rawQueryPath;
- }
-
- public String getRawODataPath() {
- return rawODataPath;
- }
-
- public void setRawODataPath(final String rawODataPath) {
- this.rawODataPath = rawODataPath;
- }
-
- public String getRawBaseUri() {
- return rawBaseUri;
- }
+ public String getRawServiceResolutionUri() {
+ return rawServiceResolutionUri;
+ }
- public void setRawBaseUri(final String rawBaseUri) {
- this.rawBaseUri = rawBaseUri;
- }
+ public String getRawQueryPath() {
+ return rawQueryPath;
+ }
- public String getRawRequestUri() {
- return rawRequestUri;
- }
+ public String getRawODataPath() {
+ return rawODataPath;
+ }
- public void setRawRequestUri(final String rawRequestUri) {
- this.rawRequestUri = rawRequestUri;
- }
+ public String getRawBaseUri() {
+ return rawBaseUri;
+ }
- public String getRequestBaseUri() {
- return requestBaseUri;
- }
+ public String getRawRequestUri() {
+ return rawRequestUri;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
index 296d554..ebba201 100644
--- a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
+++ b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
@@ -116,5 +116,6 @@ BatchDeserializerException.MISSING_CONTENT_ID=Missing content-id at line '%1$s'.
BatchDeserializerException.MISSING_CONTENT_TRANSFER_ENCODING=Missing content transfer encoding at line '%1$s'.
BatchDeserializerException.MISSING_CONTENT_TYPE=Missing content-type at line '%1$s'.
BatchDeserializerException.MISSING_MANDATORY_HEADER=Missing mandatory header at line '%1$s'.
+BatchDeserializerException.FORBIDDEN_ABSOLUTE_URI=Forbidden absolute request URI at line '%1$s'.
BatchSerializerExecption.MISSING_CONTENT_ID=Each request within a change set required exactly one content id.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/test/java/org/apache/olingo/server/core/batchhandler/MockedBatchHandlerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/batchhandler/MockedBatchHandlerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/batchhandler/MockedBatchHandlerTest.java
index b2f5a2b..3ba0714 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/batchhandler/MockedBatchHandlerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/batchhandler/MockedBatchHandlerTest.java
@@ -89,7 +89,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 3" + CRLF
+ CRLF
- + "PUT ESAllPrim(1) HTTP/1.1" + CRLF // Relative URI
+ + "PUT ESAllPrim(1) HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -98,8 +98,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 4" + CRLF
+ CRLF
- + "PUT /$3/PropertyInt32 HTTP/1.1" + CRLF // Absolute URI with separate Host header and ref.
- + "Host: http://localhost:8080/odata" + CRLF
+ + "PUT $3/PropertyInt32 HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -108,7 +107,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 1" + CRLF
+ CRLF
- + "POST http://localhost:8080/odata/ESAllPrim HTTP/1.1" + CRLF // Absolute URI
+ + "POST ESAllPrim HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -117,7 +116,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 5" + CRLF
+ CRLF
- + "POST http://localhost:8080/odata/$1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF // Absolute URI with ref.
+ + "POST $1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -126,7 +125,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 2" + CRLF
+ CRLF
- + "POST $1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF // Relative URI with ref.
+ + "POST $1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -135,8 +134,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 6" + CRLF
+ CRLF
- + "PUT /ESAllPrim(1) HTTP/1.1" + CRLF // Absolute URI with separate Host header
- + "Host: http://localhost:8080/odata"
+ + "PUT ESAllPrim(1) HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -264,8 +262,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 2" + CRLF
+ CRLF
- + "POST /$1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
- + "Host: http://localhost:8080/odata" + CRLF
+ + "POST $1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -288,8 +285,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 2" + CRLF
+ CRLF
- + "POST /$1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
- + "Host: http://localhost:8080/odata" + CRLF
+ + "POST $1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
@@ -390,8 +386,7 @@ public class MockedBatchHandlerTest {
+ "Content-Transfer-Encoding: binary" + CRLF
+ "Content-Id: 2" + CRLF
+ CRLF
- + "POST /$1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
- + "Host: http://localhost:8080/odata" + CRLF
+ + "POST $1/NavPropertyETTwoPrimMany HTTP/1.1" + CRLF
+ "Content-Type: application/json;odata=verbose" + CRLF
+ CRLF
+ CRLF
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/BatchRequestParserTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/BatchRequestParserTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/BatchRequestParserTest.java
index 7beda1d..7a63874 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/BatchRequestParserTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/BatchRequestParserTest.java
@@ -602,7 +602,7 @@ public class BatchRequestParserTest {
}
@Test
- public void testInvalidUri() throws Exception {
+ public void testAbsoluteUri() throws Exception {
final String batch = ""
+ "--batch_8194-cf13-1f56" + CRLF
+ MIME_HEADERS
@@ -612,7 +612,7 @@ public class BatchRequestParserTest {
+ CRLF
+ "--batch_8194-cf13-1f56--";
- parseInvalidBatchBody(batch, BatchDeserializerException.MessageKeys.INVALID_URI);
+ parseInvalidBatchBody(batch, BatchDeserializerException.MessageKeys.FORBIDDEN_ABSOLUTE_URI);
}
@Test
@@ -627,17 +627,7 @@ public class BatchRequestParserTest {
+ CRLF
+ "--batch_8194-cf13-1f56--";
- final List<BatchRequestPart> parts = parse(batch);
- assertEquals(1, parts.size());
-
- final BatchRequestPart part = parts.get(0);
- assertEquals(1, part.getRequests().size());
- final ODataRequest request = part.getRequests().get(0);
-
- assertEquals("http://localhost/odata/Employees('1')/EmployeeName", request.getRawRequestUri());
- assertEquals("http://localhost/odata", request.getRawBaseUri());
- assertEquals("/Employees('1')/EmployeeName", request.getRawODataPath());
- assertEquals("", request.getRawQueryPath());
+ parseInvalidBatchBody(batch, BatchDeserializerException.MessageKeys.INVALID_URI);
}
@Test
@@ -651,23 +641,7 @@ public class BatchRequestParserTest {
+ CRLF
+ "--batch_8194-cf13-1f56--";
- parseInvalidBatchBody(batch, MessageKeys.MISSING_MANDATORY_HEADER);
- }
-
- @Test
- public void testUriWithAbsolutePathMissingHostDulpicatedHeader() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET /odata/Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Host: http://localhost" + CRLF
- + "Host: http://localhost/odata" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
-
- parseInvalidBatchBody(batch, MessageKeys.MISSING_MANDATORY_HEADER);
+ parseInvalidBatchBody(batch, MessageKeys.INVALID_URI);
}
@Test
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/297950a8/lib/server-core/src/test/resources/batchWithPost.batch
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/resources/batchWithPost.batch b/lib/server-core/src/test/resources/batchWithPost.batch
index b7038e9..227c3d3 100644
--- a/lib/server-core/src/test/resources/batchWithPost.batch
+++ b/lib/server-core/src/test/resources/batchWithPost.batch
@@ -2,7 +2,7 @@
Content-Type: application/http
Content-Transfer-Encoding: binary
-GET http://localhost/odata/Employees('2')/EmployeeName?$format=json HTTP/1.1
+GET Employees('2')/EmployeeName?$format=json HTTP/1.1
Accept: application/atomsvc+xml;q=0.8, application/json;odata=verbose;q=0.5, */*;q=0.1
Accept-Language:en-US,en;q=0.7,en-UK;q=0.9
MaxDataServiceVersion: 2.0