[OLINGO-196] Added API methods for de-serialize of ODataErrorContext
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/1c2bcda5 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/1c2bcda5 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/1c2bcda5 Branch: refs/heads/Olingo-129_PocJpaDataStore Commit: 1c2bcda5ad0b76af95cd886cc768bf823ccaca99 Parents: 5f87f64 Author: Michael Bolz <[email protected]> Authored: Thu Mar 20 13:53:50 2014 +0100 Committer: Michael Bolz <[email protected]> Committed: Tue Mar 25 10:52:55 2014 +0100 ---------------------------------------------------------------------- .../olingo/odata2/api/ep/EntityProvider.java | 24 +++++++++++ .../odata2/core/ep/AtomEntityProvider.java | 8 ++++ .../core/ep/ContentTypeBasedEntityProvider.java | 3 ++ .../odata2/core/ep/JsonEntityProvider.java | 6 +++ .../odata2/core/ep/ProviderFacadeImpl.java | 6 +++ .../ep/consumer/JsonErrorDocumentConsumer.java | 41 +++++++++++++++++++ .../ep/consumer/XmlErrorDocumentConsumer.java | 42 ++++++++++++++++++++ .../core/exception/ODataExceptionTest.java | 15 +------ 8 files changed, 131 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java index 4ce2dac..8086924 100644 --- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java +++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java @@ -421,6 +421,16 @@ public final class EntityProvider { */ List<BatchSingleResponse> parseBatchResponse(String contentType, InputStream content) throws BatchException; + /** + * Read (de-serialize) data from error document as {@link InputStream} and provide according + * {@link ODataErrorContext}. + * + * @param errorDocument error document which is read + * @param contentType format of content in the given input stream + * @return read error document + * @throws EntityProviderException if reading of data (de-serialization) fails + */ + ODataErrorContext readErrorDocument(InputStream errorDocument, String contentType) throws EntityProviderException; } /** @@ -801,6 +811,20 @@ public final class EntityProvider { } /** + * Read (de-serialize) data from error document as {@link InputStream} and provide according + * {@link ODataErrorContext}. + * + * @param errorDocument error document which is read + * @param contentType format of content in the given input stream + * @return read error document + * @throws EntityProviderException if reading of data (de-serialization) fails + */ + public static ODataErrorContext readErrorDocument(final InputStream errorDocument, final String contentType) + throws EntityProviderException { + return createEntityProvider().readErrorDocument(errorDocument, contentType); + } + + /** * Read (de-serialize) data from service document <code>inputStream</code> (as {@link InputStream}) and provide * ServiceDocument as {@link ServiceDocument} * http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java index 7024d02..3b6f121 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java @@ -46,6 +46,7 @@ import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties; import org.apache.olingo.odata2.api.ep.entry.ODataEntry; import org.apache.olingo.odata2.api.ep.feed.ODataDeltaFeed; import org.apache.olingo.odata2.api.ep.feed.ODataFeed; +import org.apache.olingo.odata2.api.processor.ODataErrorContext; import org.apache.olingo.odata2.api.processor.ODataResponse; import org.apache.olingo.odata2.api.processor.ODataResponse.ODataResponseBuilder; import org.apache.olingo.odata2.api.servicedocument.ServiceDocument; @@ -55,6 +56,7 @@ import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator; import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo; import org.apache.olingo.odata2.core.ep.consumer.AtomServiceDocumentConsumer; import org.apache.olingo.odata2.core.ep.consumer.XmlEntityConsumer; +import org.apache.olingo.odata2.core.ep.consumer.XmlErrorDocumentConsumer; import org.apache.olingo.odata2.core.ep.producer.AtomEntryEntityProducer; import org.apache.olingo.odata2.core.ep.producer.AtomFeedProducer; import org.apache.olingo.odata2.core.ep.producer.AtomServiceDocumentProducer; @@ -401,4 +403,10 @@ public class AtomEntityProvider implements ContentTypeBasedEntityProvider { AtomServiceDocumentConsumer serviceDocConsumer = new AtomServiceDocumentConsumer(); return serviceDocConsumer.parseXml(serviceDocument); } + + @Override + public ODataErrorContext readErrorDocument(InputStream errorDocument) throws EntityProviderException { + XmlErrorDocumentConsumer xmlErrorDocumentConsumer = new XmlErrorDocumentConsumer(); + return xmlErrorDocumentConsumer.readError(errorDocument); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ContentTypeBasedEntityProvider.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ContentTypeBasedEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ContentTypeBasedEntityProvider.java index 75adf9e..b988039 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ContentTypeBasedEntityProvider.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ContentTypeBasedEntityProvider.java @@ -34,6 +34,7 @@ import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties; import org.apache.olingo.odata2.api.ep.entry.ODataEntry; import org.apache.olingo.odata2.api.ep.feed.ODataDeltaFeed; import org.apache.olingo.odata2.api.ep.feed.ODataFeed; +import org.apache.olingo.odata2.api.processor.ODataErrorContext; import org.apache.olingo.odata2.api.processor.ODataResponse; import org.apache.olingo.odata2.api.servicedocument.ServiceDocument; @@ -84,4 +85,6 @@ public interface ContentTypeBasedEntityProvider { ODataDeltaFeed readDeltaFeed(EdmEntitySet entitySet, InputStream content, EntityProviderReadProperties properties) throws EntityProviderException; + + ODataErrorContext readErrorDocument(InputStream errorDocument) throws EntityProviderException; } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java index d8efe36..32c68a2 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java @@ -43,12 +43,14 @@ import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties; import org.apache.olingo.odata2.api.ep.entry.ODataEntry; import org.apache.olingo.odata2.api.ep.feed.ODataDeltaFeed; import org.apache.olingo.odata2.api.ep.feed.ODataFeed; +import org.apache.olingo.odata2.api.processor.ODataErrorContext; import org.apache.olingo.odata2.api.processor.ODataResponse; import org.apache.olingo.odata2.api.processor.ODataResponse.ODataResponseBuilder; import org.apache.olingo.odata2.api.servicedocument.ServiceDocument; import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator; import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo; import org.apache.olingo.odata2.core.ep.consumer.JsonEntityConsumer; +import org.apache.olingo.odata2.core.ep.consumer.JsonErrorDocumentConsumer; import org.apache.olingo.odata2.core.ep.consumer.JsonServiceDocumentConsumer; import org.apache.olingo.odata2.core.ep.producer.JsonCollectionEntityProducer; import org.apache.olingo.odata2.core.ep.producer.JsonEntryEntityProducer; @@ -341,4 +343,8 @@ public class JsonEntityProvider implements ContentTypeBasedEntityProvider { return new JsonEntityConsumer().readDeltaFeed(entitySet, content, properties); } + @Override + public ODataErrorContext readErrorDocument(InputStream errorDocument) throws EntityProviderException { + return new JsonErrorDocumentConsumer().readError(errorDocument); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java index 128f730..16c5693 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java @@ -155,6 +155,12 @@ public class ProviderFacadeImpl implements EntityProviderInterface { } @Override + public ODataErrorContext readErrorDocument(InputStream errorDocument, String contentType) + throws EntityProviderException { + return create(contentType).readErrorDocument(errorDocument); + } + + @Override public ODataFeed readFeed(final String contentType, final EdmEntitySet entitySet, final InputStream content, final EntityProviderReadProperties properties) throws EntityProviderException { return create(contentType).readFeed(entitySet, content, properties); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonErrorDocumentConsumer.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonErrorDocumentConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonErrorDocumentConsumer.java new file mode 100644 index 0000000..fad6dd9 --- /dev/null +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonErrorDocumentConsumer.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * 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.odata2.core.ep.consumer; + +import org.apache.olingo.odata2.api.ep.EntityProviderException; +import org.apache.olingo.odata2.api.processor.ODataErrorContext; + +import java.io.InputStream; + +/** + * Consuming (read / deserialization) for OData error document in JSON format. + */ +public class JsonErrorDocumentConsumer { + + /** + * Deserialize / read OData error document in ODataErrorContext. + * + * @param errorDocument OData error document in JSON format + * @return created ODataErrorContext based on input stream content. + * @throws EntityProviderException if an exception during read / deserialization occurs. + */ + public ODataErrorContext readError(InputStream errorDocument) throws EntityProviderException { + throw new RuntimeException("Not yet implemented"); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlErrorDocumentConsumer.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlErrorDocumentConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlErrorDocumentConsumer.java new file mode 100644 index 0000000..c7f0a51 --- /dev/null +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlErrorDocumentConsumer.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * 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.odata2.core.ep.consumer; + +import org.apache.olingo.odata2.api.ep.EntityProviderException; +import org.apache.olingo.odata2.api.processor.ODataErrorContext; + +import java.io.InputStream; + +/** + * Consuming (read / deserialization) for OData error document in XML format. + */ +public class XmlErrorDocumentConsumer { + + + /** + * Deserialize / read OData error document in ODataErrorContext. + * + * @param errorDocument OData error document in XML format + * @return created ODataErrorContext based on input stream content. + * @throws EntityProviderException if an exception during read / deserialization occurs. + */ + public ODataErrorContext readError(InputStream errorDocument) throws EntityProviderException { + throw new RuntimeException("Not yet implementedÃ"); + } +} http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1c2bcda5/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/exception/ODataExceptionTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/exception/ODataExceptionTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/exception/ODataExceptionTest.java index 6d97d15..4f4dc2b 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/exception/ODataExceptionTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/exception/ODataExceptionTest.java @@ -22,20 +22,7 @@ import org.apache.olingo.odata2.api.edm.EdmException; import org.apache.olingo.odata2.api.edm.EdmLiteralException; import org.apache.olingo.odata2.api.edm.EdmSimpleTypeException; import org.apache.olingo.odata2.api.ep.EntityProviderException; -import org.apache.olingo.odata2.api.exception.ODataBadRequestException; -import org.apache.olingo.odata2.api.exception.ODataConflictException; -import org.apache.olingo.odata2.api.exception.ODataException; -import org.apache.olingo.odata2.api.exception.ODataForbiddenException; -import org.apache.olingo.odata2.api.exception.ODataHttpException; -import org.apache.olingo.odata2.api.exception.ODataMessageException; -import org.apache.olingo.odata2.api.exception.ODataMethodNotAllowedException; -import org.apache.olingo.odata2.api.exception.ODataNotAcceptableException; -import org.apache.olingo.odata2.api.exception.ODataNotFoundException; -import org.apache.olingo.odata2.api.exception.ODataNotImplementedException; -import org.apache.olingo.odata2.api.exception.ODataPreconditionFailedException; -import org.apache.olingo.odata2.api.exception.ODataPreconditionRequiredException; -import org.apache.olingo.odata2.api.exception.ODataServiceUnavailableException; -import org.apache.olingo.odata2.api.exception.ODataUnsupportedMediaTypeException; +import org.apache.olingo.odata2.api.exception.*; import org.apache.olingo.odata2.api.uri.UriNotMatchingException; import org.apache.olingo.odata2.api.uri.UriSyntaxException; import org.apache.olingo.odata2.api.uri.expression.ExceptionVisitExpression;
