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/05/05 09:58:20 UTC
git commit: [OLINGO-272]fix NonRepeatableRequestException by using
repeatable entity
Repository: olingo-odata4
Updated Branches:
refs/heads/master 6e72b1f3d -> d76580170
[OLINGO-272]fix NonRepeatableRequestException by using repeatable entity
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/d7658017
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/d7658017
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/d7658017
Branch: refs/heads/master
Commit: d76580170b9be6aad9d0763c372a512cfe196660
Parents: 6e72b1f
Author: challenh <ch...@microsoft.com>
Authored: Mon May 5 15:45:49 2014 +0800
Committer: challenh <ch...@microsoft.com>
Committed: Mon May 5 15:45:49 2014 +0800
----------------------------------------------------------------------
.../communication/request/AbstractRequest.java | 16 +++++----
.../http/ProxyWrapperHttpClientFactory.java | 4 +++
.../apache/olingo/client/core/uri/URIUtils.java | 36 ++++++++++++++++----
.../commons/core/data/AbstractODataError.java | 19 +++++++++++
4 files changed, 63 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d7658017/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractRequest.java
index 5779e08..31b65b3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractRequest.java
@@ -16,6 +16,8 @@
package org.apache.olingo.client.core.communication.request;
import java.io.IOException;
+
+import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
@@ -68,15 +70,13 @@ public abstract class AbstractRequest {
protected void checkResponse(
final CommonODataClient<?> odataClient, final HttpResponse response, final String accept) {
- if (response.getStatusLine().getStatusCode() >= 500) {
- throw new ODataServerErrorException(response.getStatusLine());
- } else if (response.getStatusLine().getStatusCode() >= 400) {
+ if (response.getStatusLine().getStatusCode() >= 400) {
try {
final HttpEntity httpEntity = response.getEntity();
if (httpEntity == null) {
throw new ODataClientErrorException(response.getStatusLine());
} else {
- final boolean isXML = accept.contains("json");
+ final boolean isXML = !accept.contains("json");
ODataError error;
try {
error = odataClient.getReader().readError(httpEntity.getContent(), isXML);
@@ -87,8 +87,12 @@ public abstract class AbstractRequest {
response.getStatusLine().getReasonPhrase(),
isXML);
}
-
- throw new ODataClientErrorException(response.getStatusLine(), error);
+
+ if (response.getStatusLine().getStatusCode() >= 500) {
+ throw new ODataServerErrorException(response.getStatusLine());
+ } else {
+ throw new ODataClientErrorException(response.getStatusLine(), error);
+ }
}
} catch (IOException e) {
throw new HttpClientException(
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d7658017/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
index ab57901..f76b083 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
@@ -62,6 +62,10 @@ public class ProxyWrapperHttpClientFactory implements HttpClientFactory {
this.proxyPassword = proxyPassword;
this.wrapped = wrapped;
}
+
+ public DefaultHttpClientFactory getWrappedHttpClientFactory(){
+ return this.wrapped;
+ }
@Override
public HttpClient createHttpClient(final HttpMethod method, final URI uri) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d7658017/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
index 1cce282..a4cfce3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
@@ -18,7 +18,6 @@
*/
package org.apache.olingo.client.core.uri;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
@@ -32,13 +31,20 @@ import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Pattern;
+
import javax.xml.datatype.Duration;
+
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.http.entity.AbstractHttpEntity;
+import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.InputStreamEntity;
import org.apache.olingo.client.api.CommonODataClient;
+import org.apache.olingo.client.api.http.HttpClientFactory;
+import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory;
+import org.apache.olingo.client.core.http.ProxyWrapperHttpClientFactory;
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
@@ -383,9 +389,26 @@ public final class URIUtils {
return value;
}
- public static InputStreamEntity buildInputStreamEntity(final CommonODataClient<?> client, final InputStream input) {
- InputStreamEntity entity;
- if (client.getConfiguration().isUseChuncked()) {
+ private static boolean shouldUseRepeatableHttpBodyEntry(final CommonODataClient<?> client)
+ {
+ // returns true for authentication request in case of http401 which needs retry so requires being repeatable.
+ HttpClientFactory httpclientFactory = client.getConfiguration().getHttpClientFactory();
+ if(httpclientFactory instanceof BasicAuthHttpClientFactory){
+ return true;
+ } else if (httpclientFactory instanceof ProxyWrapperHttpClientFactory){
+ ProxyWrapperHttpClientFactory tmp = (ProxyWrapperHttpClientFactory)httpclientFactory;
+ if(tmp.getWrappedHttpClientFactory() instanceof BasicAuthHttpClientFactory){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static AbstractHttpEntity buildInputStreamEntity(final CommonODataClient<?> client, final InputStream input) {
+ AbstractHttpEntity entity = null;
+ boolean repeatableRequired= shouldUseRepeatableHttpBodyEntry(client);
+ if (!repeatableRequired) {
entity = new InputStreamEntity(input, -1);
} else {
byte[] bytes = new byte[0];
@@ -395,10 +418,11 @@ public final class URIUtils {
LOG.error("While reading input for not chunked encoding", e);
}
- entity = new InputStreamEntity(new ByteArrayInputStream(bytes), bytes.length);
+ entity = new ByteArrayEntity(bytes);
}
+
+ // both entities can be sent in chunked way or not
entity.setChunked(client.getConfiguration().isUseChuncked());
-
return entity;
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d7658017/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractODataError.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractODataError.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractODataError.java
index e5324d8..931a38b 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractODataError.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractODataError.java
@@ -20,6 +20,25 @@ package org.apache.olingo.commons.core.data;
import org.apache.olingo.commons.api.domain.ODataError;
+// TODO p2 supports V4:
+// {
+// "error": {
+// "code": "501",
+// "message": "Unsupported functionality",
+// "target": "query",
+// "details": [
+// {
+// "code": "301",
+// "target": "$search"
+// "message": "$search query option not supported",
+// }
+// ]
+// "innererror": {
+// "trace": [...],
+// "context": {...}
+// }
+// }
+// }
public abstract class AbstractODataError implements ODataError {
private String code;