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/07/22 16:50:13 UTC
[1/2] git commit: [OLINGO-348] Exceptionhandling on server side and
message texts
Repository: olingo-odata4
Updated Branches:
refs/heads/master a9ec75991 -> c58109466
[OLINGO-348] Exceptionhandling on server side and message texts
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/984ca341
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/984ca341
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/984ca341
Branch: refs/heads/master
Commit: 984ca3412b5fccc63c749b1a9f3fd8771e8342bf
Parents: a9ec759
Author: Christian Amend <ch...@apache.org>
Authored: Tue Jul 22 14:13:58 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Jul 22 16:45:13 2014 +0200
----------------------------------------------------------------------
.../apache/olingo/server/api/ODataResponse.java | 2 +-
.../server/api/ODataTranslatedException.java | 10 ++++
.../src/main/resources/i18n.properties | 6 ++-
.../apache/olingo/server/core/ODataHandler.java | 51 +++++++++++---------
.../server/core/ODataHttpHandlerImpl.java | 43 +++++++++++++----
.../server/core/ODataHttpHandlerImplTest.java | 22 ++++-----
.../olingo/server/core/ODataHandlerTest.java | 5 +-
7 files changed, 93 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
index c1a16c0..74d5c61 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
@@ -28,7 +28,7 @@ import java.util.Map;
*/
public class ODataResponse {
- private int statusCode;
+ private int statusCode = 0;
private Map<String, String> headers = new HashMap<String, String>();
private InputStream content;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
index 621c38c..d980467 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
@@ -36,6 +36,12 @@ public class ODataTranslatedException extends ODataException {
private static final String BUNDLE_NAME = "i18n";
private static final Locale DEFAULT_LOCALE = Locale.ENGLISH;
+ // MessageKeys
+ public static final String AMBIGUOUS_XHTTP_METHOD = "ODataTranslatedException.AMBIGUOUS_XHTTP_METHOD";
+ public static final String HTTP_METHOD_NOT_IMPLEMENTED = "ODataTranslatedException.HTTP_METHOD_NOT_IMPLEMENTED";
+ public static final String PROCESSOR_NOT_IMPLEMENTED = "ODataTranslatedException.PROCESSOR_NOT_IMPLEMENTED";
+ public static final String ODATA_VERSION_NOT_SUPPORTED = "ODataTranslatedException.ODATA_VERSION_NOT_SUPPORTED";
+
private String messageKey;
private Object[] parameters;
@@ -51,6 +57,10 @@ public class ODataTranslatedException extends ODataException {
this.parameters = parameters;
}
+ public String getMessageKey() {
+ return messageKey;
+ }
+
public String getTranslatedMessage(final Locale locale) {
if (messageKey == null) {
return getMessage();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/lib/server-api/src/main/resources/i18n.properties
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/resources/i18n.properties b/lib/server-api/src/main/resources/i18n.properties
index cb6f2d3..9b2133c 100644
--- a/lib/server-api/src/main/resources/i18n.properties
+++ b/lib/server-api/src/main/resources/i18n.properties
@@ -17,4 +17,8 @@
# under the License.
#-------------------------------------------------------------------------------
# Basic Apache Olingo exception messages
-#
\ No newline at end of file
+#
+ODataTranslatedException.AMBIGUOUS_XHTTP_METHOD=x-http-method header '%1$s' and x-http-method-override header '%2$s' are not the same.
+ODataTranslatedException.HTTP_METHOD_NOT_IMPLEMENTED=Invalid http method given: '%1$s'.
+ODataTranslatedException.PROCESSOR_NOT_IMPLEMENTED=No processor for interface '%1$s' registered.
+ODataTranslatedException.ODATA_VERSION_NOT_SUPPORTED=OData version '%1$s' is not supported.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/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
index a1f1911..b2ef568 100644
--- 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
@@ -18,6 +18,9 @@
*/
package org.apache.olingo.server.core;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
@@ -27,6 +30,7 @@ import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ODataTranslatedException;
import org.apache.olingo.server.api.processor.CollectionProcessor;
import org.apache.olingo.server.api.processor.DefaultProcessor;
import org.apache.olingo.server.api.processor.EntityProcessor;
@@ -39,19 +43,14 @@ import org.apache.olingo.server.api.uri.UriResourceNavigation;
import org.apache.olingo.server.api.uri.UriResourcePartTyped;
import org.apache.olingo.server.core.uri.parser.Parser;
import org.apache.olingo.server.core.uri.validator.UriValidator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.HashMap;
-import java.util.Map;
public class ODataHandler {
- private final static Logger LOG = LoggerFactory.getLogger(ODataHandler.class);
-
private final OData odata;
private final Edm edm;
- private Map<Class<? extends Processor>, Processor> processors = new HashMap<Class<? extends Processor>, Processor>();
+ private final ODataResponse response;
+ private final Map<Class<? extends Processor>, Processor> processors =
+ new HashMap<Class<? extends Processor>, Processor>();
public ODataHandler(final OData server, final Edm edm) {
odata = server;
@@ -59,12 +58,13 @@ public class ODataHandler {
register(new DefaultProcessor());
register(new DefaultRedirectProcessor());
+ response = new ODataResponse();
}
public ODataResponse process(final ODataRequest request) {
- try {
- ODataResponse response = new ODataResponse();
+ ContentType requestedContentType = null;
+ try {
validateODataVersion(request, response);
Parser parser = new Parser();
@@ -75,7 +75,6 @@ public class ODataHandler {
UriValidator validator = new UriValidator();
validator.validate(uriInfo, request.getMethod());
- ContentType requestedContentType = null;
switch (uriInfo.getKind()) {
case metadata:
MetadataProcessor mp = selectProcessor(MetadataProcessor.class);
@@ -105,16 +104,19 @@ public class ODataHandler {
default:
throw new ODataRuntimeException("not implemented");
}
-
- return response;
} catch (Exception e) {
- // TODO OData error message handling
- throw new RuntimeException(e);
+ ODataExceptionHandler exceptionHandler = new ODataExceptionHandler();
+ exceptionHandler.handle(response, e);
+// exceptionHandler.setRequestedContentType(requestedContentType);
+// exceptionHandler.setRequestedLocale();
+// exceptionHandler.setExceptionProcessor() or setExceptionCallback()
}
+ return response;
}
private void
- handleResourceDispatching(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo) {
+ handleResourceDispatching(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo)
+ throws ODataTranslatedException {
int lastPathSegmentIndex = uriInfo.getUriResourceParts().size() - 1;
UriResource lastPathSegment = uriInfo.getUriResourceParts().get(lastPathSegmentIndex);
ContentType requestedContentType = null;
@@ -175,31 +177,34 @@ public class ODataHandler {
}
}
- private void validateODataVersion(final ODataRequest request, final ODataResponse response) {
+ private void validateODataVersion(final ODataRequest request, final ODataResponse response)
+ throws ODataTranslatedException {
String maxVersion = request.getHeader(HttpHeader.ODATA_MAX_VERSION);
+ response.setHeader(HttpHeader.ODATA_VERSION, ODataServiceVersion.V40.toString());
if (maxVersion != null) {
if (ODataServiceVersion.isBiggerThan(ODataServiceVersion.V40.toString(), maxVersion)) {
- throw new ODataRuntimeException("400 Bad Request - ODataVersion not supported: " + maxVersion);
+ response.setStatusCode(400);
+ throw new ODataTranslatedException("ODataVersion not supported: " + maxVersion,
+ ODataTranslatedException.ODATA_VERSION_NOT_SUPPORTED, maxVersion);
}
}
-
- response.setHeader(HttpHeader.ODATA_VERSION, ODataServiceVersion.V40.toString());
}
- private <T extends Processor> T selectProcessor(final Class<T> cls) {
+ private <T extends Processor> T selectProcessor(final Class<T> cls) throws ODataTranslatedException {
@SuppressWarnings("unchecked")
T p = (T) processors.get(cls);
if (p == null) {
- throw new ODataRuntimeException("Not implemented");
+ response.setStatusCode(501);
+ throw new ODataTranslatedException("Processor: " + cls.getName() + " not registered.",
+ ODataTranslatedException.PROCESSOR_NOT_IMPLEMENTED, cls.getName());
}
return p;
}
public void register(final Processor processor) {
-
processor.init(odata, edm);
for (Class<?> cls : processor.getClass().getInterfaces()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/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
index 06f0559..891cb4c 100644
--- 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
@@ -22,10 +22,12 @@ import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataHttpHandler;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ODataTranslatedException;
import org.apache.olingo.server.api.processor.Processor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,13 +54,34 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
@Override
public void process(final HttpServletRequest request, final HttpServletResponse response) {
- ODataRequest odRequest = createODataRequest(request, 0);
-
- ODataResponse odResponse = handler.process(odRequest);
+ ODataRequest odRequest = null;
+ ODataResponse odResponse = null;
+ try {
+ odRequest = createODataRequest(request, 0);
+ odResponse = handler.process(odRequest);
+ // ALL future methods after process must not throw exceptions!
+ } catch (Exception e) {
+ odResponse = handleException(e);
+ }
convertToHttp(response, odResponse);
}
+ private ODataResponse handleException(Exception e) {
+ ODataResponse resp = new ODataResponse();
+ if (e instanceof ODataTranslatedException) {
+ ODataTranslatedException exp = (ODataTranslatedException) e;
+ if (exp.getMessageKey() == ODataTranslatedException.AMBIGUOUS_XHTTP_METHOD) {
+ resp.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
+ } else if (exp.getMessageKey() == ODataTranslatedException.HTTP_METHOD_NOT_IMPLEMENTED) {
+ resp.setStatusCode(HttpStatusCode.NOT_IMPLEMENTED.getStatusCode());
+ }
+ }
+ ODataExceptionHandler exceptionHandler = new ODataExceptionHandler();
+ exceptionHandler.handle(resp, e);
+ return resp;
+ }
+
static void convertToHttp(final HttpServletResponse response, final ODataResponse odResponse) {
response.setStatus(odResponse.getStatusCode());
@@ -91,7 +114,8 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
}
}
- private ODataRequest createODataRequest(final HttpServletRequest httpRequest, final int split) {
+ private ODataRequest createODataRequest(final HttpServletRequest httpRequest, final int split)
+ throws ODataTranslatedException {
try {
ODataRequest odRequest = new ODataRequest();
@@ -106,9 +130,9 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
}
}
- static void extractMethod(final ODataRequest odRequest, final HttpServletRequest httpRequest) {
+ static void extractMethod(final ODataRequest odRequest, final HttpServletRequest httpRequest)
+ throws ODataTranslatedException {
try {
-
HttpMethod httpRequestMethod = HttpMethod.valueOf(httpRequest.getMethod());
if (httpRequestMethod == HttpMethod.POST) {
@@ -123,7 +147,8 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
odRequest.setMethod(HttpMethod.valueOf(xHttpMethod));
} else {
if (!xHttpMethod.equalsIgnoreCase(xHttpMethodOverride)) {
- throw new ODataRuntimeException("!!! HTTP 400 !!! Ambiguous X-HTTP-Methods!");
+ throw new ODataTranslatedException("Ambiguous X-HTTP-Methods",
+ ODataTranslatedException.AMBIGUOUS_XHTTP_METHOD, xHttpMethod, xHttpMethodOverride);
}
odRequest.setMethod(HttpMethod.valueOf(xHttpMethod));
}
@@ -131,12 +156,12 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
odRequest.setMethod(httpRequestMethod);
}
} catch (IllegalArgumentException e) {
- throw new ODataRuntimeException("!!! HTTP 501 !!!");
+ throw new ODataTranslatedException("Invalid http method" + httpRequest.getMethod(),
+ ODataTranslatedException.HTTP_METHOD_NOT_IMPLEMENTED, httpRequest.getMethod());
}
}
static void extractUri(final ODataRequest odRequest, final HttpServletRequest httpRequest, final int split) {
-
String rawRequestUri = httpRequest.getRequestURL().toString();
String rawODataPath;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataHttpHandlerImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataHttpHandlerImplTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataHttpHandlerImplTest.java
index 9719a52..03fc0ea 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataHttpHandlerImplTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataHttpHandlerImplTest.java
@@ -18,26 +18,26 @@
*/
package org.apache.olingo.server.core;
-import org.apache.olingo.commons.api.ODataRuntimeException;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import javax.servlet.http.HttpServletRequest;
+
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.ODataRequest;
+import org.apache.olingo.server.api.ODataTranslatedException;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.servlet.http.HttpServletRequest;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
public class ODataHttpHandlerImplTest {
private final Logger LOG = LoggerFactory.getLogger(ODataHttpHandlerImplTest.class);
@Test
- public void extractMethod() {
+ public void extractMethod() throws Exception {
String[][] mm = {
{ "GET", null, null, "GET" },
{ "GET", "xxx", "yyy", "GET" },
@@ -72,7 +72,7 @@ public class ODataHttpHandlerImplTest {
}
@Test
- public void extractMethodFail() {
+ public void extractMethodFail() throws Exception {
String[][] mm = {
{ "POST", "bla", null },
{ "POST", "MERGE", "PATCH" },
@@ -92,7 +92,7 @@ public class ODataHttpHandlerImplTest {
try {
ODataHttpHandlerImpl.extractMethod(odr, hr);
fail();
- } catch (ODataRuntimeException e) {}
+ } catch (ODataTranslatedException e) {}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/984ca341/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
index 2566c32..86366b5 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
@@ -34,6 +34,8 @@ import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.junit.Before;
import org.junit.Test;
+import com.sun.org.apache.bcel.internal.generic.GETSTATIC;
+
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
@@ -172,7 +174,7 @@ public class ODataHandlerTest {
assertEquals(ODataServiceVersion.V40.toString(), response.getHeaders().get(HttpHeader.ODATA_VERSION));
}
- @Test(expected = Exception.class)
+ @Test
public void testMaxVersionNotSupported() {
ODataRequest request = new ODataRequest();
@@ -184,6 +186,7 @@ public class ODataHandlerTest {
assertNotNull(response);
assertEquals(ODataServiceVersion.V40.toString(), response.getHeaders().get(HttpHeader.ODATA_VERSION));
+ assertEquals(400, response.getStatusCode());
}
}
[2/2] git commit: [OLINGO-348] Exception refactoring on server side
Posted by ch...@apache.org.
[OLINGO-348] Exception refactoring on server side
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/c5810946
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/c5810946
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/c5810946
Branch: refs/heads/master
Commit: c58109466fec654dde0b29567d2b213a90a57b80
Parents: 984ca34
Author: Christian Amend <ch...@apache.org>
Authored: Tue Jul 22 16:28:39 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Jul 22 16:45:14 2014 +0200
----------------------------------------------------------------------
.../server/api/ODataApplicationException.java | 6 +-
.../olingo/server/api/ODataHttpHandler.java | 6 +
.../apache/olingo/server/api/ODataResponse.java | 4 +-
.../olingo/server/api/ODataServerError.java | 123 +++++++++++++++++++
.../server/api/ODataTranslatedException.java | 49 ++++++--
.../server/api/processor/DefaultProcessor.java | 43 ++++---
.../api/processor/ExceptionProcessor.java | 33 +++++
.../server/api/processor/MetadataProcessor.java | 12 +-
.../server/api/serializer/ODataSerializer.java | 8 +-
.../server/api/TranslatedExceptionsTest.java | 51 +++++---
.../server/core/ODataExceptionHandler.java | 52 ++++++++
.../server/core/ODataExceptionHelper.java | 59 +++++++++
.../apache/olingo/server/core/ODataHandler.java | 72 ++++++++---
.../server/core/ODataHttpHandlerImpl.java | 8 +-
.../core/serializer/ODataXmlSerializerImpl.java | 15 +--
.../serializer/json/ODataJsonSerializer.java | 4 +-
.../json/ODataErrorSerializerTest.java | 36 +++---
.../olingo/server/core/ODataHandlerTest.java | 20 ++-
18 files changed, 489 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataApplicationException.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataApplicationException.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataApplicationException.java
index 8816316..3fb6b4d 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataApplicationException.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataApplicationException.java
@@ -20,7 +20,9 @@ package org.apache.olingo.server.api;
import java.util.Locale;
-public class ODataApplicationException extends Exception {
+import org.apache.olingo.commons.api.ODataException;
+
+public class ODataApplicationException extends ODataException {
private static final long serialVersionUID = 5358683245923127425L;
private int statusCode = 500;
@@ -62,7 +64,7 @@ public class ODataApplicationException extends Exception {
return locale;
}
- public String getoDataErrorCode() {
+ public String getODataErrorCode() {
return oDataErrorCode;
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/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
index 03e5e38..9812927 100644
--- 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
@@ -42,4 +42,10 @@ public interface ODataHttpHandler {
*/
void register(Processor processor);
+ /**
+ * Sets the split parameter which is used for service resolution. Default is 0.
+ * @param split
+ */
+ void setSplit(int split);
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
index 74d5c61..b16f60c 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataResponse.java
@@ -23,12 +23,14 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
+
/**
* Response object to carry OData relevant http information (statusCode, content & response headers)
*/
public class ODataResponse {
- private int statusCode = 0;
+ private int statusCode = HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode();
private Map<String, String> headers = new HashMap<String, String>();
private InputStream content;
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServerError.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServerError.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServerError.java
new file mode 100644
index 0000000..434372a
--- /dev/null
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataServerError.java
@@ -0,0 +1,123 @@
+/*
+ * 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 java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.olingo.commons.api.domain.ODataError;
+import org.apache.olingo.commons.api.domain.ODataErrorDetail;
+
+public class ODataServerError extends ODataError {
+
+ private Exception exception;
+ private int statusCode;
+ private Locale locale;
+
+ /**
+ * @return the locale for the exception message
+ */
+ public Locale getLocale() {
+ return locale;
+ }
+
+ public ODataServerError setLocale(Locale locale) {
+ this.locale = locale;
+ return this;
+ }
+
+ /**
+ * @return the exception with its hierarchy
+ */
+ public Exception getException() {
+ return exception;
+ }
+
+ public ODataServerError setException(Exception exception) {
+ this.exception = exception;
+ return this;
+ }
+
+ /**
+ * @return the status code which this error results in.
+ */
+ public int getStatusCode() {
+ return statusCode;
+ }
+
+ public ODataServerError setStatusCode(int statusCode) {
+ this.statusCode = statusCode;
+ return this;
+ }
+
+ /**
+ * The value for the code name/value pair is a language-independent string. Its value is a service-defined error code.
+ * This code serves as a sub-status for the HTTP error code specified in the response. MAY be null.
+ * @param code
+ * @return this for method chaining
+ */
+ public ODataServerError setCode(String code) {
+ super.setCode(code);
+ return this;
+ }
+
+ /**
+ * The value for the message name/value pair MUST be a human-readable, language-dependent representation of the error.
+ * MUST not be null
+ * @param message
+ * @return this for method chaining
+ */
+ public ODataServerError setMessage(String message) {
+ super.setMessage(message);
+ return this;
+ }
+
+ /**
+ * The value for the target name/value pair is the target of the particular error (for example, the name of the
+ * property in error). MAY be null.
+ * @param target
+ * @return this for method chaining
+ */
+ public ODataServerError setTarget(String target) {
+ super.setTarget(target);
+ return this;
+ }
+
+ /**
+ * Sets error details.
+ *
+ * @return this for method chaining.
+ */
+ public ODataServerError setDetails(List<ODataErrorDetail> details) {
+ super.setDetails(details);
+ return this;
+ }
+
+ /**
+ * Sets server defined key-value pairs for debug environment only.
+ *
+ * @return this for method chaining.
+ */
+ public ODataServerError setInnerError(Map<String, String> innerError) {
+ super.setInnerError(innerError);
+ return this;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
index d980467..9eac1e1 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataTranslatedException.java
@@ -34,8 +34,8 @@ public class ODataTranslatedException extends ODataException {
private static final long serialVersionUID = -1210541002198287561L;
private static final Logger log = LoggerFactory.getLogger(ODataTranslatedException.class);
private static final String BUNDLE_NAME = "i18n";
- private static final Locale DEFAULT_LOCALE = Locale.ENGLISH;
-
+
+ public static final Locale DEFAULT_LOCALE = Locale.ENGLISH;
// MessageKeys
public static final String AMBIGUOUS_XHTTP_METHOD = "ODataTranslatedException.AMBIGUOUS_XHTTP_METHOD";
public static final String HTTP_METHOD_NOT_IMPLEMENTED = "ODataTranslatedException.HTTP_METHOD_NOT_IMPLEMENTED";
@@ -51,6 +51,11 @@ public class ODataTranslatedException extends ODataException {
this.parameters = parameters;
}
+ @Override
+ public String getLocalizedMessage() {
+ return getTranslatedMessage(DEFAULT_LOCALE).getMessage();
+ }
+
public ODataTranslatedException(String developmentMessage, Throwable cause, String messageKey, String... parameters) {
super(developmentMessage, cause);
this.messageKey = messageKey;
@@ -61,13 +66,13 @@ public class ODataTranslatedException extends ODataException {
return messageKey;
}
- public String getTranslatedMessage(final Locale locale) {
+ public ODataErrorMessage getTranslatedMessage(final Locale locale) {
if (messageKey == null) {
- return getMessage();
+ return new ODataErrorMessage(getMessage(), DEFAULT_LOCALE);
}
ResourceBundle bundle = createResourceBundle(locale);
if (bundle == null) {
- return getMessage();
+ return new ODataErrorMessage(getMessage(), DEFAULT_LOCALE);
}
return buildMessage(bundle, locale);
@@ -87,7 +92,7 @@ public class ODataTranslatedException extends ODataException {
return bundle;
}
- private String buildMessage(ResourceBundle bundle, Locale locale) {
+ private ODataErrorMessage buildMessage(ResourceBundle bundle, Locale locale) {
String message = null;
try {
@@ -96,14 +101,34 @@ public class ODataTranslatedException extends ODataException {
Formatter f = new Formatter(builder, locale);
f.format(message, parameters);
f.close();
-
- return builder.toString();
-
+ Locale usedLocale = bundle.getLocale();
+ if (usedLocale == Locale.ROOT || Locale.ROOT.equals(usedLocale)) {
+ usedLocale = DEFAULT_LOCALE;
+ }
+ return new ODataErrorMessage(builder.toString(), usedLocale);
} catch (MissingResourceException e) {
- return "Missing message for key '" + messageKey + "'!";
+ return new ODataErrorMessage("Missing message for key '" + messageKey + "'!", DEFAULT_LOCALE);
} catch (MissingFormatArgumentException e) {
- return "Missing replacement for place holder in message '" + message +
- "' for following arguments '" + Arrays.toString(parameters) + "'!";
+ return new ODataErrorMessage("Missing replacement for place holder in message '" + message +
+ "' for following arguments '" + Arrays.toString(parameters) + "'!", DEFAULT_LOCALE);
+ }
+ }
+
+ public class ODataErrorMessage {
+ String message;
+ Locale locale;
+
+ public ODataErrorMessage(String message, Locale usedLocale) {
+ this.message = message;
+ this.locale = usedLocale;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public Locale getLocale() {
+ return locale;
}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
index 4595385..548c902 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/DefaultProcessor.java
@@ -18,23 +18,26 @@
*/
package org.apache.olingo.server.api.processor;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.commons.api.format.ODataFormat;
import org.apache.olingo.commons.api.http.HttpHeader;
+import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ODataServerError;
import org.apache.olingo.server.api.serializer.ODataSerializer;
import org.apache.olingo.server.api.uri.UriInfo;
-import java.io.InputStream;
-
/**
- * Processor implementation for handling of metadata and service document. This implementation is registerd in the
+ * Processor implementation for handling of metadata and service document. This implementation is registerd in the
* ODataHandler by default. The default can be replaced by re-registering an custom implementation.
*/
-public class DefaultProcessor implements MetadataProcessor, ServiceDocumentProcessor {
+public class DefaultProcessor implements MetadataProcessor, ServiceDocumentProcessor, ExceptionProcessor {
private OData odata;
private Edm edm;
@@ -48,11 +51,8 @@ public class DefaultProcessor implements MetadataProcessor, ServiceDocumentProce
@Override
public void readServiceDocument(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo,
final ContentType requestedContentType) {
- ODataSerializer serializer;
- InputStream responseEntity;
-
- serializer = odata.createSerializer(ODataFormat.fromContentType(requestedContentType));
- responseEntity = serializer.serviceDocument(edm, request.getRawBaseUri());
+ ODataSerializer serializer = odata.createSerializer(ODataFormat.fromContentType(requestedContentType));
+ InputStream responseEntity = serializer.serviceDocument(edm, request.getRawBaseUri());
response.setStatusCode(200);
response.setContent(responseEntity);
@@ -63,14 +63,29 @@ public class DefaultProcessor implements MetadataProcessor, ServiceDocumentProce
@Override
public void readMetadata(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo,
final ContentType requestedContentType) {
- ODataSerializer serializer;
- InputStream responseEntity;
-
- serializer = odata.createSerializer(ODataFormat.fromContentType(requestedContentType));
- responseEntity = serializer.metadataDocument(edm);
+ ODataSerializer serializer = odata.createSerializer(ODataFormat.fromContentType(requestedContentType));
+ InputStream responseEntity = serializer.metadataDocument(edm);
response.setStatusCode(200);
response.setContent(responseEntity);
response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString());
}
+ @Override
+ public void processException(ODataRequest request, ODataResponse response, ODataServerError serverError,
+ ContentType requestedContentType) {
+ try {
+ ODataSerializer serializer = odata.createSerializer(ODataFormat.fromContentType(requestedContentType));
+ InputStream responseEntity = serializer.error(serverError);
+ response.setStatusCode(serverError.getStatusCode());
+ response.setContent(responseEntity);
+ response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString());
+ } catch (Exception e) {
+ // This should never happen but to be sure we have this catch here to prevent sending a stacktrace to a client.
+ String responseContent =
+ "An unexpected exception occoured during error processing with message: \"" + e.getMessage() + "\"";
+ response.setContent(new ByteArrayInputStream(responseContent.getBytes()));
+ response.setStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
+ response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.APPLICATION_JSON.toContentTypeString());
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ExceptionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ExceptionProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ExceptionProcessor.java
new file mode 100644
index 0000000..f4b4f3e
--- /dev/null
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/ExceptionProcessor.java
@@ -0,0 +1,33 @@
+/*
+ * 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.processor;
+
+import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.server.api.ODataRequest;
+import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ODataServerError;
+
+/**
+ * Processor which is called if any exception occurs inside the library or another processor
+ */
+public interface ExceptionProcessor extends Processor{
+
+ public void processException(ODataRequest request, ODataResponse response, ODataServerError serverError,
+ final ContentType requestedContentType);
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/MetadataProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/MetadataProcessor.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/MetadataProcessor.java
index b1caebd..331ba72 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/MetadataProcessor.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/processor/MetadataProcessor.java
@@ -19,6 +19,7 @@
package org.apache.olingo.server.api.processor;
import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.server.api.ODataApplicationException;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
import org.apache.olingo.server.api.uri.UriInfo;
@@ -30,10 +31,11 @@ public interface MetadataProcessor extends Processor {
/**
* Read data from persistency and puts serialized content and status into the response.
- * @param request - OData request object containing raw http information.
- * @param response - OData response object for collecting response data
- * @param uriInfo - information of a parsed OData uri
- * @param requestedContentType - requested content type after content negotiation
+ * @param request - OData request object containing raw http information.
+ * @param response - OData response object for collecting response data
+ * @param uriInfo - information of a parsed OData uri
+ * @param requestedContentType - requested content type after content negotiation
*/
- void readMetadata(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestedContentType);
+ void readMetadata(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType requestedContentType)
+ throws ODataApplicationException;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java
index 8f2bdd5..9206b4f 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java
@@ -18,14 +18,14 @@
*/
package org.apache.olingo.server.api.serializer;
+import java.io.InputStream;
+
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
-import org.apache.olingo.commons.api.domain.ODataError;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
-
-import java.io.InputStream;
+import org.apache.olingo.server.api.ODataServerError;
public interface ODataSerializer {
@@ -44,5 +44,5 @@ public interface ODataSerializer {
* @param error the main error
* @return inputStream containing the OData formatted error
*/
- InputStream error(ODataError error);
+ InputStream error(ODataServerError error);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-api/src/test/java/org/apache/olingo/server/api/TranslatedExceptionsTest.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/test/java/org/apache/olingo/server/api/TranslatedExceptionsTest.java b/lib/server-api/src/test/java/org/apache/olingo/server/api/TranslatedExceptionsTest.java
index 066dc80..55514fe 100644
--- a/lib/server-api/src/test/java/org/apache/olingo/server/api/TranslatedExceptionsTest.java
+++ b/lib/server-api/src/test/java/org/apache/olingo/server/api/TranslatedExceptionsTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
import java.util.Locale;
+import org.apache.olingo.server.api.ODataTranslatedException.ODataErrorMessage;
import org.junit.Test;
public class TranslatedExceptionsTest {
@@ -43,25 +44,28 @@ public class TranslatedExceptionsTest {
ODataTranslatedException exp = new ODataTranslatedException(DEV, BASIC);
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertEquals("Test Default", translatedMessage);
+ assertEquals("Test Default", translatedMessage.getMessage());
translatedMessage = exp.getTranslatedMessage(Locale.ENGLISH);
assertNotNull(translatedMessage);
- assertEquals("Test Default", translatedMessage);
+ assertEquals("Test Default", translatedMessage.getMessage());
+ assertEquals(Locale.ENGLISH, translatedMessage.getLocale());
translatedMessage = exp.getTranslatedMessage(Locale.UK);
assertNotNull(translatedMessage);
- assertEquals("Test Default", translatedMessage);
+ assertEquals("Test Default", translatedMessage.getMessage());
translatedMessage = exp.getTranslatedMessage(Locale.GERMAN);
assertNotNull(translatedMessage);
- assertEquals("Test DE", translatedMessage);
+ assertEquals("Test DE", translatedMessage.getMessage());
+ assertEquals(Locale.GERMAN, translatedMessage.getLocale());
translatedMessage = exp.getTranslatedMessage(Locale.GERMANY);
assertNotNull(translatedMessage);
- assertEquals("Test DE", translatedMessage);
+ assertEquals("Test DE", translatedMessage.getMessage());
+ assertEquals(Locale.GERMAN, translatedMessage.getLocale());
}
@Test
@@ -69,9 +73,9 @@ public class TranslatedExceptionsTest {
ODataTranslatedException exp = new ODataTranslatedException(DEV, BASIC, "unusedParam1", "unusedParam2");
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertEquals("Test Default", translatedMessage);
+ assertEquals("Test Default", translatedMessage.getMessage());
}
@Test
@@ -79,9 +83,9 @@ public class TranslatedExceptionsTest {
ODataTranslatedException exp = new ODataTranslatedException(DEV, ONEPARAM, "usedParam1");
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertEquals("Param1: usedParam1", translatedMessage);
+ assertEquals("Param1: usedParam1", translatedMessage.getMessage());
}
@Test
@@ -89,9 +93,9 @@ public class TranslatedExceptionsTest {
ODataTranslatedException exp = new ODataTranslatedException(DEV, ONEPARAM, "usedParam1", "unusedParam2");
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertEquals("Param1: usedParam1", translatedMessage);
+ assertEquals("Param1: usedParam1", translatedMessage.getMessage());
}
@Test
@@ -99,9 +103,9 @@ public class TranslatedExceptionsTest {
ODataTranslatedException exp = new ODataTranslatedException(DEV, TWOPARAM, "usedParam1", "usedParam2");
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertEquals("Param1: usedParam1 Param2: usedParam2", translatedMessage);
+ assertEquals("Param1: usedParam1 Param2: usedParam2", translatedMessage.getMessage());
}
@Test
@@ -109,19 +113,28 @@ public class TranslatedExceptionsTest {
ODataTranslatedException exp = new ODataTranslatedException(DEV, ONEPARAM);
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertTrue(translatedMessage.contains("Missing replacement for place holder in message"));
+ assertTrue(translatedMessage.getMessage().contains("Missing replacement for place holder in message"));
}
-
+
@Test
public void noMessageForKey() {
ODataTranslatedException exp = new ODataTranslatedException(DEV, "NOMESSAGE");
assertEquals(DEV, exp.getMessage());
- String translatedMessage = exp.getTranslatedMessage(null);
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(null);
assertNotNull(translatedMessage);
- assertTrue(translatedMessage.contains("Missing message for key"));
+ assertTrue(translatedMessage.getMessage().contains("Missing message for key"));
}
+ @Test
+ public void keyForRootBundleButNotPresentInDerivedBundle() {
+ ODataTranslatedException exp = new ODataTranslatedException(DEV, ONEPARAM, "param1");
+ assertEquals(DEV, exp.getMessage());
+
+ ODataErrorMessage translatedMessage = exp.getTranslatedMessage(Locale.GERMAN);
+ assertNotNull(translatedMessage);
+ assertEquals("Param1: param1", translatedMessage.getMessage());
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHandler.java
new file mode 100644
index 0000000..cb2d183
--- /dev/null
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHandler.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 java.util.Locale;
+
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ODataServerError;
+import org.apache.olingo.server.api.ODataTranslatedException;
+import org.apache.olingo.server.api.serializer.ODataSerializer;
+
+public class ODataExceptionHandler {
+
+ public Locale requestedLocale;
+ public ODataFormat requestedFormat = ODataFormat.JSON;
+
+ public void handle(ODataResponse resp, Exception e) {
+ if (resp.getStatusCode() == 0) {
+ resp.setStatusCode(500);
+ }
+ ODataServerError error = new ODataServerError();
+ if (e instanceof ODataTranslatedException) {
+ error.setMessage(((ODataTranslatedException) e).getTranslatedMessage(requestedLocale).getMessage());
+ } else {
+ error.setMessage(e.getMessage());
+ }
+
+ ODataSerializer serializer = OData.newInstance().createSerializer(requestedFormat);
+ InputStream errorStream = serializer.error(error);
+ resp.setContent(errorStream);
+ // Set header
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java
new file mode 100644
index 0000000..3ba30c7
--- /dev/null
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java
@@ -0,0 +1,59 @@
+/*
+ * 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.util.Locale;
+
+import org.apache.olingo.server.api.ODataApplicationException;
+import org.apache.olingo.server.api.ODataServerError;
+import org.apache.olingo.server.api.ODataTranslatedException;
+import org.apache.olingo.server.api.ODataTranslatedException.ODataErrorMessage;
+
+public class ODataExceptionHelper {
+
+ public static ODataServerError createServerErrorObject(Exception e, int statusCode) {
+ ODataServerError serverError = basicServerError(e);
+ serverError.setStatusCode(statusCode);
+ serverError.setLocale(Locale.ENGLISH);
+ return serverError;
+ }
+
+ public static ODataServerError createServerErrorObject(ODataTranslatedException e, int statusCode,
+ Locale requestedLocale) {
+ ODataServerError serverError = basicServerError(e);
+ ODataErrorMessage translatedMessage = e.getTranslatedMessage(requestedLocale);
+ serverError.setMessage(translatedMessage.getMessage());
+ serverError.setLocale(translatedMessage.getLocale());
+ serverError.setStatusCode(statusCode);
+ return serverError;
+ }
+
+ public static ODataServerError createServerErrorObject(ODataApplicationException e) {
+ ODataServerError serverError = basicServerError(e);
+ serverError.setStatusCode(e.getStatusCode());
+ serverError.setLocale(e.getLocale());
+ serverError.setCode(e.getODataErrorCode());
+ return serverError;
+ }
+
+ private static ODataServerError basicServerError(Exception e) {
+ ODataServerError serverError = new ODataServerError().setException(e).setMessage(e.getMessage());
+ return serverError;
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/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
index b2ef568..4f823bb 100644
--- 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
@@ -19,21 +19,26 @@
package org.apache.olingo.server.core;
import java.util.HashMap;
+import java.util.Locale;
import java.util.Map;
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.commons.api.format.ODataFormat;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataApplicationException;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ODataServerError;
import org.apache.olingo.server.api.ODataTranslatedException;
import org.apache.olingo.server.api.processor.CollectionProcessor;
import org.apache.olingo.server.api.processor.DefaultProcessor;
import org.apache.olingo.server.api.processor.EntityProcessor;
+import org.apache.olingo.server.api.processor.ExceptionProcessor;
import org.apache.olingo.server.api.processor.MetadataProcessor;
import org.apache.olingo.server.api.processor.Processor;
import org.apache.olingo.server.api.processor.ServiceDocumentProcessor;
@@ -48,7 +53,6 @@ public class ODataHandler {
private final OData odata;
private final Edm edm;
- private final ODataResponse response;
private final Map<Class<? extends Processor>, Processor> processors =
new HashMap<Class<? extends Processor>, Processor>();
@@ -58,15 +62,14 @@ public class ODataHandler {
register(new DefaultProcessor());
register(new DefaultRedirectProcessor());
- response = new ODataResponse();
}
public ODataResponse process(final ODataRequest request) {
ContentType requestedContentType = null;
-
+ ODataResponse response = new ODataResponse();
try {
validateODataVersion(request, response);
-
+
Parser parser = new Parser();
String odUri =
request.getRawODataPath() + (request.getRawQueryPath() == null ? "" : "?" + request.getRawQueryPath());
@@ -77,7 +80,7 @@ public class ODataHandler {
switch (uriInfo.getKind()) {
case metadata:
- MetadataProcessor mp = selectProcessor(MetadataProcessor.class);
+ MetadataProcessor mp = selectProcessor(MetadataProcessor.class, response);
requestedContentType =
ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(), request, mp, MetadataProcessor.class);
@@ -86,10 +89,10 @@ public class ODataHandler {
break;
case service:
if ("".equals(request.getRawODataPath())) {
- RedirectProcessor rdp = selectProcessor(RedirectProcessor.class);
+ RedirectProcessor rdp = selectProcessor(RedirectProcessor.class, response);
rdp.redirect(request, response);
} else {
- ServiceDocumentProcessor sdp = selectProcessor(ServiceDocumentProcessor.class);
+ ServiceDocumentProcessor sdp = selectProcessor(ServiceDocumentProcessor.class, response);
requestedContentType =
ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(), request, sdp,
@@ -104,16 +107,50 @@ public class ODataHandler {
default:
throw new ODataRuntimeException("not implemented");
}
+ } catch (ODataTranslatedException e) {
+ Locale requestedLocale = null;
+ ODataServerError serverError =
+ ODataExceptionHelper.createServerErrorObject(e, response.getStatusCode(), requestedLocale);
+ handleException(request, response, serverError, requestedContentType);
+ } catch (ODataApplicationException e) {
+ ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e);
+ handleException(request, response, serverError, requestedContentType);
} catch (Exception e) {
- ODataExceptionHandler exceptionHandler = new ODataExceptionHandler();
- exceptionHandler.handle(response, e);
-// exceptionHandler.setRequestedContentType(requestedContentType);
-// exceptionHandler.setRequestedLocale();
-// exceptionHandler.setExceptionProcessor() or setExceptionCallback()
+ ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, response.getStatusCode());
+ handleException(request, response, serverError, requestedContentType);
}
return response;
}
+ private void handleException(ODataRequest request, ODataResponse response, ODataServerError serverError,
+ ContentType requestedContentType) {
+ try {
+ ExceptionProcessor exceptionProcessor = selectProcessor(ExceptionProcessor.class, response);
+ if (requestedContentType == null) {
+ requestedContentType = ODataFormat.JSON.getContentType(ODataServiceVersion.V40);
+ }
+ exceptionProcessor.processException(request, response, serverError, requestedContentType);
+ } catch (ODataTranslatedException e1) {
+ throw new ODataRuntimeException("Could not instanciate ExceptionProcessor");
+ }
+ }
+
+// private void handleException(ODataRequest request, ODataResponse response, ODataTranslatedException e,
+// ContentType requestedContentType) {
+// try {
+// ExceptionProcessor exceptionProcessor = selectProcessor(ExceptionProcessor.class, response);
+// Locale requestedLocale = null;
+// ODataServerError serverError =
+// ODataExceptionHelper.createServerErrorObject(e, response.getStatusCode(), requestedLocale);
+// if (requestedContentType == null) {
+// requestedContentType = ODataFormat.JSON.getContentType(ODataServiceVersion.V40);
+// }
+// exceptionProcessor.processException(request, response, serverError, requestedContentType);
+// } catch (ODataTranslatedException e1) {
+// throw new ODataRuntimeException("Could not instanciate ExceptionProcessor", e);
+// }
+// }
+
private void
handleResourceDispatching(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo)
throws ODataTranslatedException {
@@ -125,7 +162,7 @@ public class ODataHandler {
case entitySet:
if (((UriResourcePartTyped) lastPathSegment).isCollection()) {
if (request.getMethod().equals(HttpMethod.GET)) {
- CollectionProcessor cp = selectProcessor(CollectionProcessor.class);
+ CollectionProcessor cp = selectProcessor(CollectionProcessor.class, response);
requestedContentType =
ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(), request, cp, CollectionProcessor.class);
@@ -136,7 +173,7 @@ public class ODataHandler {
}
} else {
if (request.getMethod().equals(HttpMethod.GET)) {
- EntityProcessor ep = selectProcessor(EntityProcessor.class);
+ EntityProcessor ep = selectProcessor(EntityProcessor.class, response);
requestedContentType =
ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(), request, ep, EntityProcessor.class);
@@ -150,7 +187,7 @@ public class ODataHandler {
case navigationProperty:
if (((UriResourceNavigation) lastPathSegment).isCollection()) {
if (request.getMethod().equals(HttpMethod.GET)) {
- CollectionProcessor cp = selectProcessor(CollectionProcessor.class);
+ CollectionProcessor cp = selectProcessor(CollectionProcessor.class, response);
requestedContentType =
ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(), request, cp, CollectionProcessor.class);
@@ -161,7 +198,7 @@ public class ODataHandler {
}
} else {
if (request.getMethod().equals(HttpMethod.GET)) {
- EntityProcessor ep = selectProcessor(EntityProcessor.class);
+ EntityProcessor ep = selectProcessor(EntityProcessor.class, response);
requestedContentType =
ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(), request, ep, EntityProcessor.class);
@@ -191,7 +228,8 @@ public class ODataHandler {
}
}
- private <T extends Processor> T selectProcessor(final Class<T> cls) throws ODataTranslatedException {
+ private <T extends Processor> T selectProcessor(final Class<T> cls, ODataResponse response)
+ throws ODataTranslatedException {
@SuppressWarnings("unchecked")
T p = (T) processors.get(cls);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/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
index 891cb4c..e245fc2 100644
--- 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
@@ -47,6 +47,7 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
private static final Logger LOG = LoggerFactory.getLogger(ODataHttpHandlerImpl.class);
private ODataHandler handler;
+ private int split = 0;
public ODataHttpHandlerImpl(final OData odata, final Edm edm) {
handler = new ODataHandler(odata, edm);
@@ -57,7 +58,7 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
ODataRequest odRequest = null;
ODataResponse odResponse = null;
try {
- odRequest = createODataRequest(request, 0);
+ odRequest = createODataRequest(request, split);
odResponse = handler.process(odRequest);
// ALL future methods after process must not throw exceptions!
} catch (Exception e) {
@@ -66,6 +67,11 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
convertToHttp(response, odResponse);
}
+
+ @Override
+ public void setSplit(int split) {
+ this.split = split;
+ }
private ODataResponse handleException(Exception e) {
ODataResponse resp = new ODataResponse();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
index ad7c80c..40f96a9 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
@@ -18,24 +18,25 @@
*/
package org.apache.olingo.server.core.serializer;
+import java.io.InputStream;
+
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
-import org.apache.olingo.commons.api.domain.ODataError;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.server.api.ODataServerError;
import org.apache.olingo.server.api.serializer.ODataSerializer;
import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer;
import org.apache.olingo.server.core.serializer.xml.MetadataDocumentXmlSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-import java.io.InputStream;
-
public class ODataXmlSerializerImpl implements ODataSerializer {
private static final Logger log = LoggerFactory.getLogger(ODataXmlSerializerImpl.class);
@@ -86,7 +87,7 @@ public class ODataXmlSerializerImpl implements ODataSerializer {
}
@Override
- public InputStream error(ODataError error) {
+ public InputStream error(ODataServerError error) {
throw new ODataRuntimeException("error serialization not implemented for XML format");
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index 27af0d8..bc4cbc9 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -30,7 +30,6 @@ import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
import org.apache.olingo.commons.api.data.LinkedComplexValue;
import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.domain.ODataError;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmComplexType;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
@@ -41,6 +40,7 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.EdmProperty;
import org.apache.olingo.commons.api.format.ODataFormat;
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+import org.apache.olingo.server.api.ODataServerError;
import org.apache.olingo.server.api.serializer.ODataSerializer;
import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer;
import org.slf4j.Logger;
@@ -101,7 +101,7 @@ public class ODataJsonSerializer implements ODataSerializer {
}
@Override
- public InputStream error(final ODataError error) {
+ public InputStream error(final ODataServerError error) {
CircleStreamBuffer buffer = new CircleStreamBuffer();
try {
JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializerTest.java
index e159004..9d64ce1 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializerTest.java
@@ -18,25 +18,26 @@
*/
package org.apache.olingo.server.core.serializer.json;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.JsonNodeType;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.commons.io.IOUtils;
import org.apache.olingo.commons.api.ODataRuntimeException;
-import org.apache.olingo.commons.api.domain.ODataError;
import org.apache.olingo.commons.api.domain.ODataErrorDetail;
import org.apache.olingo.commons.api.format.ODataFormat;
import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataServerError;
import org.apache.olingo.server.api.serializer.ODataSerializer;
import org.junit.Before;
import org.junit.Test;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
public class ODataErrorSerializerTest {
@@ -49,7 +50,7 @@ public class ODataErrorSerializerTest {
@Test
public void basicODataErrorNoCode() throws Exception {
- ODataError error = new ODataError();
+ ODataServerError error = new ODataServerError();
error.setMessage("ErrorMessage");
InputStream stream = ser.error(error);
String jsonString = IOUtils.toString(stream);
@@ -58,7 +59,7 @@ public class ODataErrorSerializerTest {
@Test
public void basicODataErrorWithCode() throws Exception {
- ODataError error = new ODataError();
+ ODataServerError error = new ODataServerError();
error.setCode("Code").setMessage("ErrorMessage");
InputStream stream = ser.error(error);
String jsonString = IOUtils.toString(stream);
@@ -67,7 +68,7 @@ public class ODataErrorSerializerTest {
@Test
public void basicODataErrorWithCodeAndTarget() throws Exception {
- ODataError error = new ODataError();
+ ODataServerError error = new ODataServerError();
error.setCode("Code").setMessage("ErrorMessage").setTarget("Target");
InputStream stream = ser.error(error);
String jsonString = IOUtils.toString(stream);
@@ -81,7 +82,7 @@ public class ODataErrorSerializerTest {
@Test
public void emptyDetailsList() throws Exception {
- ODataError error = new ODataError();
+ ODataServerError error = new ODataServerError();
error.setMessage("ErrorMessage").setDetails(new ArrayList<ODataErrorDetail>());
InputStream stream = ser.error(error);
String jsonString = IOUtils.toString(stream);
@@ -90,7 +91,7 @@ public class ODataErrorSerializerTest {
@Test
public void nothingSetAtODataErrorObject() throws Exception {
- ODataError error = new ODataError();
+ ODataServerError error = new ODataServerError();
InputStream stream = ser.error(error);
String jsonString = IOUtils.toString(stream);
assertEquals("{\"error\":{\"code\":null,\"message\":null}}", jsonString);
@@ -100,7 +101,7 @@ public class ODataErrorSerializerTest {
public void singleDetailNothingSet() throws Exception {
List<ODataErrorDetail> details = new ArrayList<ODataErrorDetail>();
details.add(new ODataErrorDetail());
- ODataError error = new ODataError().setDetails(details);
+ ODataServerError error = new ODataServerError().setDetails(details);
InputStream stream = ser.error(error);
String jsonString = IOUtils.toString(stream);
assertEquals("{\"error\":{\"code\":null,\"message\":null,\"details\":[{\"code\":null,\"message\":null}]}}",
@@ -111,7 +112,8 @@ public class ODataErrorSerializerTest {
public void verifiedWithJacksonParser() throws Exception {
List<ODataErrorDetail> details = new ArrayList<ODataErrorDetail>();
details.add(new ODataErrorDetail().setCode("detailCode").setMessage("detailMessage").setTarget("detailTarget"));
- ODataError error = new ODataError().setCode("Code").setMessage("Message").setTarget("Target").setDetails(details);
+ ODataServerError error =
+ new ODataServerError().setCode("Code").setMessage("Message").setTarget("Target").setDetails(details);
InputStream stream = ser.error(error);
JsonNode tree = new ObjectMapper().readTree(stream);
assertNotNull(tree);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c5810946/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
index 86366b5..efd0e65 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
@@ -18,6 +18,13 @@
*/
package org.apache.olingo.server.core;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+
+import java.util.Arrays;
+
import org.apache.commons.io.IOUtils;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
@@ -34,15 +41,6 @@ import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.junit.Before;
import org.junit.Test;
-import com.sun.org.apache.bcel.internal.generic.GETSTATIC;
-
-import java.util.Arrays;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-
public class ODataHandlerTest {
private ODataHandler handler;
@@ -69,7 +67,7 @@ public class ODataHandlerTest {
ODataResponse response = handler.process(request);
assertNotNull(response);
- assertEquals(0, response.getStatusCode());
+ assertEquals(500, response.getStatusCode());
}
@Test
@@ -125,7 +123,7 @@ public class ODataHandlerTest {
ODataResponse response = handler.process(request);
assertNotNull(response);
- assertEquals(0, response.getStatusCode());
+ assertEquals(500, response.getStatusCode());
}
@Test