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 2014/05/19 15:28:02 UTC
[13/50] [abbrv] git commit: [OLINGO-266] ODataHandler
[OLINGO-266] ODataHandler
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/bb48147b
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/bb48147b
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/bb48147b
Branch: refs/heads/master
Commit: bb48147bc200f13157730932a49bcde63fa55af4
Parents: f92ab0a
Author: Stephan Klevenz <st...@sap.com>
Authored: Wed May 14 16:04:11 2014 +0200
Committer: Stephan Klevenz <st...@sap.com>
Committed: Mon May 19 14:27:04 2014 +0200
----------------------------------------------------------------------
.../apache/olingo/server/api/ODataHandler.java | 28 ----
.../olingo/server/api/ODataHttpHandler.java | 28 ++++
.../apache/olingo/server/api/ODataServer.java | 2 +-
.../apache/olingo/server/core/ODataHandler.java | 52 +++++++
.../olingo/server/core/ODataHandlerImpl.java | 142 ------------------
.../server/core/ODataHttpHandlerImpl.java | 146 +++++++++++++++++++
.../olingo/server/core/ODataResponse.java | 33 +++++
.../olingo/server/core/ODataServerImpl.java | 6 +-
.../olingo/server/tecsvc/TechnicalServlet.java | 4 +-
9 files changed, 265 insertions(+), 176 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java
deleted file mode 100644
index ff0ab06..0000000
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHandler.java
+++ /dev/null
@@ -1,28 +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.server.api;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public interface ODataHandler {
-
- void process(HttpServletRequest request, HttpServletResponse response);
-
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
new file mode 100644
index 0000000..82210b8
--- /dev/null
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataHttpHandler.java
@@ -0,0 +1,28 @@
+/*
+ * 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.server.api;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public interface ODataHttpHandler {
+
+ void process(HttpServletRequest request, HttpServletResponse response);
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java
index 2d35100..48aa5a7 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServer.java
@@ -48,7 +48,7 @@ public abstract class ODataServer {
public abstract ODataSerializer createSerializer(ODataFormat format);
- public abstract ODataHandler createHandler(Edm edm);
+ public abstract ODataHttpHandler createHandler(Edm edm);
public abstract Edm createEdm(EdmProvider edmProvider);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
new file mode 100644
index 0000000..fc92d6a
--- /dev/null
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
@@ -0,0 +1,52 @@
+/*
+ * 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.server.core;
+
+import java.io.InputStream;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.server.api.ODataServer;
+import org.apache.olingo.server.api.serializer.ODataFormat;
+import org.apache.olingo.server.api.serializer.ODataSerializer;
+
+public class ODataHandler {
+
+ private ODataServer server;
+ private Edm edm;
+
+ public ODataHandler(ODataServer server, Edm edm) {
+ this.server = server;
+ this.edm = edm;
+ }
+
+ public ODataResponse process(ODataRequest odRequest) {
+ ODataResponse response = new ODataResponse();
+
+ ODataSerializer serializer = server.createSerializer(ODataFormat.JSON);
+ InputStream responseEntity = serializer.serviceDocument(edm, "http//:root");
+
+ response.setStatusCode(200);
+ response.setHeader("Content-Type", "application/json");
+ response.setContent(responseEntity);
+
+ return response;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java
deleted file mode 100644
index a516689..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerImpl.java
+++ /dev/null
@@ -1,142 +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.server.core;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.olingo.commons.api.ODataRuntimeException;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.http.HttpMethod;
-import org.apache.olingo.server.api.ODataHandler;
-import org.apache.olingo.server.api.ODataServer;
-import org.apache.olingo.server.api.serializer.ODataFormat;
-import org.apache.olingo.server.api.serializer.ODataSerializer;
-
-public class ODataHandlerImpl implements ODataHandler {
-
- private Edm edm;
- private ODataServer server;
-
- public ODataHandlerImpl(ODataServer server, Edm edm) {
- this.edm = edm;
- this.server = server;
- }
-
- @Override
- public void process(HttpServletRequest request, HttpServletResponse response) {
- ODataRequest odRequest = createODataRequest(request);
- ODataResponse odResponse;
-
- // odResponse = process(odRequest);
-// convertToHttp(response, odResponse);
- }
-
- private ODataRequest createODataRequest(HttpServletRequest request) {
- try {
- ODataRequest odRequest = new ODataRequest();
-
- odRequest.setBody(request.getInputStream());
- odRequest.setHeaders(extractHeaders(request));
- odRequest.setQueryParameters(extractQueryParameters(request.getQueryString()));
- odRequest.setMethod(HttpMethod.valueOf(request.getMethod()));
-
- return odRequest;
- } catch (Exception e) {
- throw new ODataRuntimeException(e);
- }
- }
-
- public void processx(HttpServletRequest request, HttpServletResponse response) {
- try {
- InputStream responseEntity = null;
- if (request.getPathInfo().contains("$metadata")) {
- ODataSerializer serializer = server.createSerializer(ODataFormat.XML);
- responseEntity = serializer.metadataDocument(edm);
- } else {
- ODataSerializer serializer = server.createSerializer(ODataFormat.JSON);
- responseEntity = serializer.serviceDocument(edm, "http//:root");
- }
-
- response.setStatus(200);
- response.setContentType("application/json");
-
- if (responseEntity != null) {
- ServletOutputStream out = response.getOutputStream();
- int curByte = -1;
- if (responseEntity instanceof InputStream) {
- while ((curByte = ((InputStream) responseEntity).read()) != -1) {
- out.write((char) curByte);
- }
- ((InputStream) responseEntity).close();
- }
-
- out.flush();
- out.close();
- }
-
- } catch (Exception e) {
- throw new ODataRuntimeException(e);
- }
- }
-
- private Map<String, String> extractQueryParameters(final String queryString) {
- Map<String, String> queryParametersMap = new HashMap<String, String>();
- if (queryString != null) {
- // At first the queryString will be decoded.
- List<String> queryParameters = Arrays.asList(Decoder.decode(queryString).split("\\&"));
- for (String param : queryParameters) {
- int indexOfEqualSign = param.indexOf("=");
- if (indexOfEqualSign < 0) {
- queryParametersMap.put(param, "");
- } else {
- queryParametersMap.put(param.substring(0, indexOfEqualSign), param.substring(indexOfEqualSign + 1));
- }
- }
- }
- return queryParametersMap;
- }
-
- private Map<String, List<String>> extractHeaders(final HttpServletRequest req) {
- Map<String, List<String>> requestHeaders = new HashMap<String, List<String>>();
- for (Enumeration<String> headerNames = req.getHeaderNames(); headerNames.hasMoreElements();) {
- String headerName = headerNames.nextElement();
- List<String> headerValues = new ArrayList<String>();
- for (Enumeration<String> headers = req.getHeaders(headerName); headers.hasMoreElements();) {
- String value = headers.nextElement();
- headerValues.add(value);
- }
- if (requestHeaders.containsKey(headerName)) {
- requestHeaders.get(headerName).addAll(headerValues);
- } else {
- requestHeaders.put(headerName, headerValues);
- }
- }
- return requestHeaders;
- }
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
new file mode 100644
index 0000000..dca4229
--- /dev/null
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
@@ -0,0 +1,146 @@
+/*
+ * 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.server.core;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.olingo.commons.api.ODataRuntimeException;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.http.HttpMethod;
+import org.apache.olingo.server.api.ODataHttpHandler;
+import org.apache.olingo.server.api.ODataServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ODataHttpHandlerImpl implements ODataHttpHandler {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ODataHttpHandlerImpl.class);
+
+ private Edm edm;
+ private ODataServer server;
+
+ public ODataHttpHandlerImpl(ODataServer server, Edm edm) {
+ this.edm = edm;
+ this.server = server;
+ }
+
+ @Override
+ public void process(HttpServletRequest request, HttpServletResponse response) {
+ ODataRequest odRequest = createODataRequest(request);
+
+ ODataHandler handler = new ODataHandler(server, edm);
+ ODataResponse odResponse = handler.process(odRequest);
+ convertToHttp(response, odResponse);
+ }
+
+ private void convertToHttp(HttpServletResponse response, ODataResponse odResponse) {
+ response.setStatus(odResponse.getStatusCode());
+
+ for (Entry<String, String> entry : odResponse.getHeaders().entrySet()) {
+ response.setHeader(entry.getKey(), entry.getValue());
+ }
+
+ InputStream in = odResponse.getContent();
+ try
+ {
+ byte[] buffer = new byte[1024];
+ int bytesRead = 0;
+
+ do
+ {
+ bytesRead = in.read(buffer, 0, buffer.length);
+ response.getOutputStream().write(buffer, 0, bytesRead);
+ } while (bytesRead == buffer.length);
+
+ response.getOutputStream().flush();
+ } catch (IOException e) {
+ LOG.error(e.getMessage(), e);
+ throw new ODataRuntimeException(e);
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ throw new ODataRuntimeException(e);
+ }
+ }
+ }
+ }
+
+ private ODataRequest createODataRequest(HttpServletRequest request) {
+ try {
+ ODataRequest odRequest = new ODataRequest();
+
+ odRequest.setBody(request.getInputStream());
+ odRequest.setHeaders(extractHeaders(request));
+ odRequest.setQueryParameters(extractQueryParameters(request.getQueryString()));
+ odRequest.setMethod(HttpMethod.valueOf(request.getMethod()));
+
+ return odRequest;
+ } catch (Exception e) {
+ throw new ODataRuntimeException(e);
+ }
+ }
+
+ private Map<String, String> extractQueryParameters(final String queryString) {
+ Map<String, String> queryParametersMap = new HashMap<String, String>();
+ if (queryString != null) {
+ List<String> queryParameters = Arrays.asList(Decoder.decode(queryString).split("\\&"));
+ for (String param : queryParameters) {
+ int indexOfEqualSign = param.indexOf("=");
+ if (indexOfEqualSign < 0) {
+ queryParametersMap.put(param, "");
+ } else {
+ queryParametersMap.put(param.substring(0, indexOfEqualSign), param.substring(indexOfEqualSign + 1));
+ }
+ }
+ }
+ return queryParametersMap;
+ }
+
+ private Map<String, List<String>> extractHeaders(final HttpServletRequest req) {
+ Map<String, List<String>> requestHeaders = new HashMap<String, List<String>>();
+
+ for (Enumeration<?> headerNames = req.getHeaderNames(); headerNames.hasMoreElements();) {
+ String headerName = (String) headerNames.nextElement();
+ List<String> headerValues = new ArrayList<String>();
+ for (Enumeration<?> headers = req.getHeaders(headerName); headers.hasMoreElements();) {
+ String value = (String) headers.nextElement();
+ headerValues.add(value);
+ }
+ if (requestHeaders.containsKey(headerName)) {
+ requestHeaders.get(headerName).addAll(headerValues);
+ } else {
+ requestHeaders.put(headerName, headerValues);
+ }
+ }
+ return requestHeaders;
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataResponse.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataResponse.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataResponse.java
index 7bcf7d3..71c3719 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataResponse.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataResponse.java
@@ -18,6 +18,39 @@
*/
package org.apache.olingo.server.core;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
public class ODataResponse {
+ private int statusCode;
+ private Map<String, String> headers = new HashMap<String, String>();
+ private InputStream content;
+
+ public void setStatusCode(int statusCode) {
+ this.statusCode = statusCode;
+ }
+
+ public void setHeader(String name, String value) {
+ headers.put(name, value);
+ }
+
+ public void setContent(InputStream content) {
+ this.content = content;
+ }
+
+ public int getStatusCode() {
+ return statusCode;
+ }
+
+ public Map<String, String> getHeaders() {
+ return Collections.unmodifiableMap(headers);
+ }
+
+ public InputStream getContent() {
+ return content;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java
index 5ac9d37..cac5f50 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataServerImpl.java
@@ -20,7 +20,7 @@ package org.apache.olingo.server.core;
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.server.api.ODataHandler;
+import org.apache.olingo.server.api.ODataHttpHandler;
import org.apache.olingo.server.api.ODataServer;
import org.apache.olingo.server.api.edm.provider.EdmProvider;
import org.apache.olingo.server.api.serializer.ODataFormat;
@@ -49,8 +49,8 @@ public class ODataServerImpl extends ODataServer {
}
@Override
- public ODataHandler createHandler(Edm edm) {
- return new ODataHandlerImpl(this, edm);
+ public ODataHttpHandler createHandler(Edm edm) {
+ return new ODataHttpHandlerImpl(this, edm);
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/bb48147b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
index 1f6b6bf..c7bb0e0 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
@@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.server.api.ODataHandler;
+import org.apache.olingo.server.api.ODataHttpHandler;
import org.apache.olingo.server.api.ODataServer;
import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.slf4j.Logger;
@@ -45,7 +45,7 @@ public class TechnicalServlet extends HttpServlet {
ODataServer server = ODataServer.newInstance();
Edm edm = server.createEdm(new EdmTechProvider());
- ODataHandler handler = server.createHandler(edm);
+ ODataHttpHandler handler = server.createHandler(edm);
handler.process(req, resp);
}
}