You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2013/10/17 16:00:26 UTC
git commit: [OLINGO-34] fix port caching issue
Updated Branches:
refs/heads/master c3714148f -> a54a8302e
[OLINGO-34] fix port caching issue
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/a54a8302
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/a54a8302
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/a54a8302
Branch: refs/heads/master
Commit: a54a8302e7cbc608fe1e04fe4225458bab0e74b6
Parents: c371414
Author: Stephan Klevenz <sk...@apache.org>
Authored: Fri Oct 11 15:36:28 2013 +0200
Committer: Stephan Klevenz <sk...@apache.org>
Committed: Thu Oct 17 15:59:44 2013 +0200
----------------------------------------------------------------------
.../olingo/odata2/core/rest/RestUtil.java | 31 +++++++++++++----
.../odata2/fit/basic/issues/TestIssue105.java | 36 ++++++++++++++++++++
.../testutil/fit/FitStaticServiceFactory.java | 8 +++++
3 files changed, 68 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a54a8302/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/RestUtil.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/RestUtil.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/RestUtil.java
index 410e261..37703e7 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/RestUtil.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/RestUtil.java
@@ -37,7 +37,6 @@ import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.UriBuilder;
-import javax.ws.rs.core.UriInfo;
import org.apache.olingo.odata2.api.commons.HttpHeaders;
import org.apache.olingo.odata2.api.exception.ODataBadRequestException;
@@ -169,10 +168,10 @@ public class RestUtil {
}
public static PathInfoImpl buildODataPathInfo(final SubLocatorParameter param) throws ODataException {
- final UriInfo uriInfo = param.getUriInfo();
PathInfoImpl pathInfo = splitPath(param);
- pathInfo.setServiceRoot(buildBaseUri(param.getServletRequest(), uriInfo, pathInfo.getPrecedingSegments()));
- pathInfo.setRequestUri(uriInfo.getRequestUri());
+
+ pathInfo.setServiceRoot(buildBaseUri(param.getServletRequest(), pathInfo.getPrecedingSegments()));
+ pathInfo.setRequestUri(buildRequestUri(param.getServletRequest()));
return pathInfo;
}
@@ -215,10 +214,10 @@ public class RestUtil {
return pathInfo;
}
- private static URI buildBaseUri(final HttpServletRequest request, final javax.ws.rs.core.UriInfo uriInfo,
+ private static URI buildBaseUri(final HttpServletRequest request,
final List<PathSegment> precedingPathSegments) throws ODataException {
try {
- UriBuilder uriBuilder = uriInfo.getBaseUriBuilder();
+ UriBuilder uriBuilder = UriBuilder.fromUri(request.getServletPath());
for (final PathSegment ps : precedingPathSegments) {
uriBuilder = uriBuilder.path(ps.getPath());
for (final String key : ps.getMatrixParameters().keySet()) {
@@ -230,7 +229,8 @@ public class RestUtil {
/*
* workaround because of host name is cached by uriInfo
*/
- uriBuilder.host(request.getServerName());
+ uriBuilder.host(request.getServerName()).port(request.getServerPort());
+ uriBuilder.scheme(request.getScheme());
String uriString = uriBuilder.build().toString();
if (!uriString.endsWith("/")) {
@@ -243,6 +243,23 @@ public class RestUtil {
}
}
+ private static URI buildRequestUri(HttpServletRequest servletRequest) {
+ URI requestUri;
+
+ StringBuffer buf = servletRequest.getRequestURL();
+ String queryString = servletRequest.getQueryString();
+
+ if (queryString != null) {
+ buf.append("?");
+ buf.append(queryString);
+ }
+
+ String requestUriString = buf.toString();
+
+ requestUri = URI.create(requestUriString);
+ return requestUri;
+ }
+
private static List<PathSegment> convertPathSegmentList(final List<javax.ws.rs.core.PathSegment> pathSegments) {
ArrayList<PathSegment> converted = new ArrayList<PathSegment>();
for (final javax.ws.rs.core.PathSegment pathSegment : pathSegments) {
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a54a8302/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/issues/TestIssue105.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/issues/TestIssue105.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/issues/TestIssue105.java
index 219a334..48db095 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/issues/TestIssue105.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/issues/TestIssue105.java
@@ -38,6 +38,7 @@ import org.apache.olingo.odata2.api.processor.ODataSingleProcessor;
import org.apache.olingo.odata2.api.processor.part.MetadataProcessor;
import org.apache.olingo.odata2.api.uri.info.GetMetadataUriInfo;
import org.apache.olingo.odata2.fit.basic.AbstractBasicTest;
+import org.apache.olingo.odata2.testutil.fit.FitStaticServiceFactory;
import org.junit.Test;
/**
@@ -79,4 +80,39 @@ public class TestIssue105 extends AbstractBasicTest {
assertEquals(uri2.getHost(), serviceRoot2.getHost());
}
+ @Test
+ public void checkContextForDifferentWithHostHeader() throws ClientProtocolException, IOException,
+ ODataException, URISyntaxException {
+ try {
+ FitStaticServiceFactory.bindService("123", getService());
+
+ // 1st request: cache uri
+ URI uri = URI.create(getEndpoint().toString() + "$metadata");
+ HttpGet get1 = new HttpGet(uri);
+ HttpResponse response1 = getHttpClient().execute(get1);
+ assertNotNull(response1);
+
+ URI serviceRoot1 = getService().getProcessor().getContext().getPathInfo().getServiceRoot();
+ assertEquals(uri.getHost(), serviceRoot1.getHost());
+
+ get1.reset();
+
+ HttpGet get2 = new HttpGet(uri);
+ get2.addHeader("Host", "bla:123");
+ HttpResponse response2 = getHttpClient().execute(get2);
+ assertNotNull(response2);
+
+ URI serviceRoot2 = getService().getProcessor().getContext().getPathInfo().getServiceRoot();
+ assertEquals("bla", serviceRoot2.getHost());
+ assertEquals(123, serviceRoot2.getPort());
+
+ URI requestUri = getService().getProcessor().getContext().getPathInfo().getRequestUri();
+ assertEquals("bla", requestUri.getHost());
+ assertEquals(123, requestUri.getPort());
+
+ } finally {
+ FitStaticServiceFactory.unbindService("123");
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/a54a8302/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/fit/FitStaticServiceFactory.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/fit/FitStaticServiceFactory.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/fit/FitStaticServiceFactory.java
index b484661..8b34c49 100644
--- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/fit/FitStaticServiceFactory.java
+++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/fit/FitStaticServiceFactory.java
@@ -51,6 +51,14 @@ public class FitStaticServiceFactory extends ODataServiceFactory {
private static Map<String, ODataService> PORT_2_SERVICE = Collections
.synchronizedMap(new HashMap<String, ODataService>());
+ public static void bindService(String key, final ODataService service) {
+ PORT_2_SERVICE.put(key, service);
+ }
+
+ public static void unbindService(String key) {
+ PORT_2_SERVICE.remove(key);
+ }
+
public static void bindService(final TestServer server, final ODataService service) {
PORT_2_SERVICE.put(createId(server), service);
}