You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/01/27 20:25:03 UTC
[05/37] olingo-odata2 git commit: [OLINGO-193] Reuse as much code as
possible between the spring and non-spring root locators.
[OLINGO-193] Reuse as much code as possible between the spring and non-spring root locators.
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/a339d295
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/a339d295
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/a339d295
Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: a339d2956d7dd892acd2f67893c1a608e796ad0e
Parents: fe1be5e
Author: Michael Bolz <mi...@sap.com>
Authored: Wed Nov 26 09:08:21 2014 +0100
Committer: Michael Bolz <mi...@sap.com>
Committed: Wed Nov 26 09:19:59 2014 +0100
----------------------------------------------------------------------
.../odata2/core/rest/ODataRootLocator.java | 92 +++++---------------
.../core/rest/spring/ODataRootLocator.java | 19 ++--
.../spring/OlingoServerDefinitionParser.java | 5 +-
3 files changed, 30 insertions(+), 86 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a339d295/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
index d9a91cc..64f9d4f 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataRootLocator.java
@@ -18,24 +18,13 @@
******************************************************************************/
package org.apache.olingo.odata2.core.rest;
-import java.util.List;
-
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.Request;
-import javax.ws.rs.core.UriInfo;
import org.apache.olingo.odata2.api.ODataServiceFactory;
-import org.apache.olingo.odata2.api.exception.ODataBadRequestException;
-import org.apache.olingo.odata2.api.exception.ODataException;
import org.apache.olingo.odata2.core.exception.ODataRuntimeException;
import org.apache.olingo.odata2.core.rest.app.AbstractODataApplication;
@@ -52,74 +41,37 @@ import org.apache.olingo.odata2.core.rest.app.AbstractODataApplication;
*
*/
@Path("/")
-public class ODataRootLocator {
+public class ODataRootLocator extends
+ org.apache.olingo.odata2.core.rest.spring.ODataRootLocator {
@Context
- private HttpHeaders httpHeaders;
- @Context
- private UriInfo uriInfo;
- @Context
- private Request request;
- @Context
private ServletConfig servletConfig;
- @Context
- private HttpServletRequest servletRequest;
-
- @Context
- private Application app;
-
- /**
- * Default root behavior which will delegate all paths to a ODataLocator.
- * @param pathSegments URI path segments - all segments have to be OData
- * @param xHttpMethod HTTP Header X-HTTP-Method for tunneling through POST
- * @param xHttpMethodOverride HTTP Header X-HTTP-Method-Override for tunneling through POST
- * @return a locator handling OData protocol
- * @throws ODataException
- * @throws ClassNotFoundException
- * @throws IllegalAccessException
- * @throws InstantiationException
- */
- @Path("/{pathSegments: .*}")
- public Object handleRequest(
- @Encoded @PathParam("pathSegments") final List<PathSegment> pathSegments,
- @HeaderParam("X-HTTP-Method") final String xHttpMethod,
- @HeaderParam("X-HTTP-Method-Override") final String xHttpMethodOverride)
- throws ODataException, ClassNotFoundException, InstantiationException, IllegalAccessException {
-
- if (xHttpMethod != null && xHttpMethodOverride != null) {
-
- /*
- * X-HTTP-Method-Override : implemented by CXF
- * X-HTTP-Method : implemented in ODataSubLocator:handlePost
- */
- if (!xHttpMethod.equalsIgnoreCase(xHttpMethodOverride)) {
- throw new ODataBadRequestException(ODataBadRequestException.AMBIGUOUS_XMETHOD);
- }
- }
-
- if (servletRequest.getPathInfo() == null) {
- return handleRedirect();
- }
+ @Override
+ public ODataServiceFactory getServiceFactory() {
+ return createServiceFactoryFromContext(app, servletRequest,
+ servletConfig);
+ }
- ODataServiceFactory serviceFactory = createServiceFactoryFromContext(app, servletRequest, servletConfig);
+ @Override
+ public void setServiceFactory(ODataServiceFactory serviceFactory) {
+ // Don't do anything
+ }
+ @Override
+ public int getPathSplit() {
int pathSplit = 0;
- final String pathSplitAsString = servletConfig.getInitParameter(ODataServiceFactory.PATH_SPLIT_LABEL);
+ final String pathSplitAsString = servletConfig
+ .getInitParameter(ODataServiceFactory.PATH_SPLIT_LABEL);
if (pathSplitAsString != null) {
pathSplit = Integer.parseInt(pathSplitAsString);
}
+ return pathSplit;
+ }
- final SubLocatorParameter param = new SubLocatorParameter();
- param.setServiceFactory(serviceFactory);
- param.setPathSegments(pathSegments);
- param.setHttpHeaders(httpHeaders);
- param.setUriInfo(uriInfo);
- param.setRequest(request);
- param.setServletRequest(servletRequest);
- param.setPathSplit(pathSplit);
-
- return ODataSubLocator.create(param);
+ @Override
+ public void setPathSplit(int pathSplit) {
+ // Don't do anything
}
public static ODataServiceFactory createServiceFactoryFromContext(final Application app,
@@ -148,8 +100,4 @@ public class ODataRootLocator {
throw new ODataRuntimeException("Exception during ODataServiceFactory creation occured.", e);
}
}
-
- private Object handleRedirect() {
- return new ODataRedirectLocator();
- }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a339d295/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
old mode 100755
new mode 100644
index 295dc9d..ea143e7
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/spring/ODataRootLocator.java
@@ -20,7 +20,6 @@ package org.apache.olingo.odata2.core.rest.spring;
import java.util.List;
-import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Encoded;
import javax.ws.rs.HeaderParam;
@@ -62,12 +61,10 @@ public class ODataRootLocator {
@Context
private Request request;
@Context
- private ServletConfig servletConfig;
- @Context
- private HttpServletRequest servletRequest;
+ protected HttpServletRequest servletRequest;
@Context
- private Application app;
+ protected Application app;
// These next two members are exposed so that they can be injected with Spring
private ODataServiceFactory serviceFactory;
@@ -108,13 +105,13 @@ public class ODataRootLocator {
}
final SubLocatorParameter param = new SubLocatorParameter();
- param.setServiceFactory(serviceFactory);
+ param.setServiceFactory(getServiceFactory());
param.setPathSegments(pathSegments);
param.setHttpHeaders(httpHeaders);
param.setUriInfo(uriInfo);
param.setRequest(request);
param.setServletRequest(servletRequest);
- param.setPathSplit(pathSplit);
+ param.setPathSplit(getPathSplit());
return ODataSubLocator.create(param);
}
@@ -124,18 +121,18 @@ public class ODataRootLocator {
}
public ODataServiceFactory getServiceFactory() {
- return serviceFactory;
+ return serviceFactory;
}
public void setServiceFactory(ODataServiceFactory serviceFactory) {
- this.serviceFactory = serviceFactory;
+ this.serviceFactory = serviceFactory;
}
public int getPathSplit() {
- return pathSplit;
+ return pathSplit;
}
public void setPathSplit(int pathSplit) {
- this.pathSplit = pathSplit;
+ this.pathSplit = pathSplit;
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a339d295/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
----------------------------------------------------------------------
diff --git a/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java b/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
index fdb6e18..a8e7f77 100755
--- a/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
+++ b/odata2-spring/src/main/java/org/apache/olingo/odata2/spring/OlingoServerDefinitionParser.java
@@ -71,9 +71,8 @@ public class OlingoServerDefinitionParser extends JAXRSServerFactoryBeanDefiniti
builder.addPropertyValue("pathSplit", element.getAttribute("pathsplit"));
}
AbstractBeanDefinition definition = builder.getBeanDefinition();
- BeanDefinitionHolder holder =
- new BeanDefinitionHolder(definition, "OlingoODataRootLocator-" + element.getAttribute("id") + "-" + element.getAttribute("factory"),
- new String[0]);
+ BeanDefinitionHolder holder = new BeanDefinitionHolder(definition,
+ "OlingoODataRootLocator-" + element.getAttribute("id") + "-" + element.getAttribute("factory"), new String[0]);
registerBeanDefinition(holder, parserContext.getRegistry());
ManagedList<BeanDefinition> services = new ManagedList<BeanDefinition>(3);