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/04/01 11:00:52 UTC

[40/52] [abbrv] git commit: [OLINGO-200] Moving ODataDeserializer and ODataSerializer (interfaces and impl) to commons

[OLINGO-200] Moving ODataDeserializer and ODataSerializer (interfaces and impl) to commons


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/a55ed62a
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/a55ed62a
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/a55ed62a

Branch: refs/heads/olingo-206-validator
Commit: a55ed62accf3686daf6359ec2923455b535c9199
Parents: fac84b3
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 24 09:45:25 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 24 09:45:25 2014 +0100

----------------------------------------------------------------------
 .../olingo/client/api/CommonODataClient.java    |   6 +-
 .../client/api/op/ClientODataDeserializer.java  |  39 +++++
 .../client/api/op/CommonODataDeserializer.java  |  84 ----------
 .../olingo/client/api/op/ODataSerializer.java   | 100 ------------
 .../client/api/op/v3/ODataDeserializer.java     |   4 +-
 .../client/api/op/v4/ODataDeserializer.java     |   4 +-
 .../olingo/client/core/AbstractODataClient.java |   2 +-
 .../client/core/op/AbstractJacksonTool.java     |  83 ----------
 .../client/core/op/AbstractODataBinder.java     |   1 +
 .../core/op/AbstractODataDeserializer.java      | 107 ------------
 .../client/core/op/AbstractODataSerializer.java | 141 ----------------
 .../core/op/InjectableSerializerProvider.java   |  43 -----
 .../client/core/op/ODataObjectFactoryImpl.java  | 162 -------------------
 .../olingo/client/core/op/ODataWriterImpl.java  |   1 +
 .../olingo/client/core/op/ResourceFactory.java  | 125 --------------
 .../core/op/impl/v3/ODataDeserializerImpl.java  |   2 +-
 .../core/op/impl/v3/ODataSerializerImpl.java    |   2 +-
 .../core/op/impl/v4/ODataDeserializerImpl.java  |   2 +-
 .../core/op/impl/v4/ODataSerializerImpl.java    |   2 +-
 .../olingo/client/core/v3/ODataClientImpl.java  |   2 +-
 .../olingo/client/core/v4/ODataClientImpl.java  |   2 +-
 .../core/it/v3/EntityRetrieveTestITCase.java    |   2 +-
 .../client/core/it/v3/EntitySetTestITCase.java  |   2 +-
 .../olingo/client/core/v3/EntitySetTest.java    |   2 +-
 .../olingo/client/core/v3/EntityTest.java       |   2 +-
 .../commons/api/op/CommonODataDeserializer.java |  71 ++++++++
 .../olingo/commons/api/op/ODataSerializer.java  | 100 ++++++++++++
 .../commons/core/op/AbstractJacksonTool.java    |  83 ++++++++++
 .../core/op/AbstractODataDeserializer.java      | 107 ++++++++++++
 .../core/op/AbstractODataSerializer.java        | 141 ++++++++++++++++
 .../core/op/InjectableSerializerProvider.java   |  43 +++++
 .../commons/core/op/ODataObjectFactoryImpl.java | 162 +++++++++++++++++++
 .../olingo/commons/core/op/ResourceFactory.java | 125 ++++++++++++++
 33 files changed, 891 insertions(+), 863 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
index 4b708d9..e863d0d 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
@@ -24,13 +24,13 @@ import org.apache.olingo.client.api.communication.request.cud.CommonCUDRequestFa
 import org.apache.olingo.client.api.communication.request.invoke.CommonInvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
 import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
+import org.apache.olingo.client.api.op.ClientODataDeserializer;
 import org.apache.olingo.commons.api.domain.ODataObjectFactory;
 import org.apache.olingo.commons.api.domain.ODataGeospatialValue;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.client.api.op.CommonODataBinder;
-import org.apache.olingo.client.api.op.CommonODataDeserializer;
 import org.apache.olingo.client.api.op.CommonODataReader;
-import org.apache.olingo.client.api.op.ODataSerializer;
+import org.apache.olingo.commons.api.op.ODataSerializer;
 import org.apache.olingo.client.api.op.ODataWriter;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.client.api.uri.CommonFilterFactory;
@@ -54,7 +54,7 @@ public interface CommonODataClient {
 
   ODataSerializer getSerializer();
 
-  CommonODataDeserializer getDeserializer();
+  ClientODataDeserializer getDeserializer();
 
   CommonODataReader getReader();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ClientODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ClientODataDeserializer.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ClientODataDeserializer.java
new file mode 100644
index 0000000..ad482fb
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ClientODataDeserializer.java
@@ -0,0 +1,39 @@
+/*
+ * 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.client.api.op;
+
+import java.io.InputStream;
+import org.apache.olingo.client.api.data.ServiceDocument;
+import org.apache.olingo.client.api.edm.xml.XMLMetadata;
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.commons.api.op.CommonODataDeserializer;
+
+public interface ClientODataDeserializer extends CommonODataDeserializer {
+
+  XMLMetadata toMetadata(InputStream input);
+
+  /**
+   * Gets the ServiceDocument object represented by the given InputStream.
+   *
+   * @param input stream to be de-serialized.
+   * @param format OData service document format.
+   * @return <tt>ServiceDocument</tt> object.
+   */
+  ServiceDocument toServiceDocument(InputStream input, ODataFormat format);
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataDeserializer.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataDeserializer.java
deleted file mode 100644
index 5b01fa3..0000000
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataDeserializer.java
+++ /dev/null
@@ -1,84 +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.client.api.op;
-
-import java.io.InputStream;
-import java.io.Serializable;
-import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.domain.ODataError;
-import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.client.api.data.ServiceDocument;
-import org.apache.olingo.client.api.edm.xml.XMLMetadata;
-import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.commons.api.format.ODataPubFormat;
-
-/**
- * Utility class for serialization.
- */
-public interface CommonODataDeserializer extends Serializable {
-
-  XMLMetadata toMetadata(InputStream input);
-
-  /**
-   * Gets the ServiceDocument object represented by the given InputStream.
-   *
-   * @param input stream to be de-serialized.
-   * @param format OData service document format.
-   * @return <tt>ServiceDocument</tt> object.
-   */
-  ServiceDocument toServiceDocument(InputStream input, ODataFormat format);
-
-  /**
-   * Gets a feed object from the given InputStream.
-   *
-   * @param input stream to be de-serialized.
-   * @param format Atom or JSON
-   * @return Feed instance.
-   */
-  Feed toFeed(InputStream input, ODataPubFormat format);
-
-  /**
-   * Gets an entry object from the given InputStream.
-   *
-   * @param input stream to be de-serialized.
-   * @param format Atom or JSON
-   * @return Entry instance.
-   */
-  Entry toEntry(InputStream input, ODataPubFormat format);
-
-  /**
-   * Gets a property object from the given InputStream.
-   *
-   * @param input stream to be de-serialized.
-   * @param format XML or JSON
-   * @return Property instance.
-   */
-  Property toProperty(InputStream input, ODataFormat format);
-
-  /**
-   * Gets the ODataError object represented by the given InputStream.
-   *
-   * @param input stream to be parsed and de-serialized.
-   * @param isXML 'TRUE' if the error is represented by XML; 'FALSE' otherwise.
-   * @return
-   */
-  ODataError toError(InputStream input, boolean isXML);
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataSerializer.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataSerializer.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataSerializer.java
deleted file mode 100644
index 811a07b..0000000
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataSerializer.java
+++ /dev/null
@@ -1,100 +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.client.api.op;
-
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.io.Writer;
-import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.data.Link;
-import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.format.ODataFormat;
-
-/**
- * Utility class for serialization.
- */
-public interface ODataSerializer extends Serializable {
-
-  /**
-   * Writes Feed object onto the given stream.
-   *
-   * @param obj object to be streamed.
-   * @param out output stream.
-   */
-  void feed(Feed obj, OutputStream out);
-
-  /**
-   * Writes Feed object by the given writer.
-   *
-   * @param obj object to be streamed.
-   * @param writer writer.
-   */
-  void feed(Feed obj, Writer writer);
-
-  /**
-   * Writes theEntry object onto the given stream.
-   *
-   * @param obj object to be streamed.
-   * @param out output stream.
-   */
-  void entry(Entry obj, OutputStream out);
-
-  /**
-   * Writes the Entry object by the given writer.
-   *
-   * @param obj object to be streamed.
-   * @param writer writer.
-   */
-  void entry(Entry obj, Writer writer);
-
-  /**
-   * Writes the property object onto the given stream.
-   *
-   * @param property object to be streamed.
-   * @param out output stream.
-   */
-  void property(Property property, OutputStream out);
-
-  /**
-   * Writes the property object by the given writer.
-   *
-   * @param property object to be streamed.
-   * @param writer writer.
-   */
-  void property(Property property, Writer writer);
-
-  /**
-   * Writes link onto the given stream.
-   *
-   * @param link OData link to be streamed.
-   * @param format streaming format.
-   * @param out output stream.
-   */
-  void link(Link link, ODataFormat format, OutputStream out);
-
-  /**
-   * Writes link by the given writer.
-   *
-   * @param link OData link to be streamed.
-   * @param format streaming format.
-   * @param writer writer.
-   */
-  void link(Link link, ODataFormat format, Writer writer);
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataDeserializer.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataDeserializer.java
index 6c7a2bb..b12b104 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataDeserializer.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataDeserializer.java
@@ -19,11 +19,11 @@
 package org.apache.olingo.client.api.op.v3;
 
 import java.io.InputStream;
+import org.apache.olingo.client.api.op.ClientODataDeserializer;
 import org.apache.olingo.commons.api.data.v3.LinkCollection;
 import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.client.api.op.CommonODataDeserializer;
 
-public interface ODataDeserializer extends CommonODataDeserializer {
+public interface ODataDeserializer extends ClientODataDeserializer {
 
   /**
    * Gets a list of links from the given InputStream.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataDeserializer.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataDeserializer.java
index 425e530..8b0e0b7 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataDeserializer.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataDeserializer.java
@@ -21,9 +21,9 @@ package org.apache.olingo.client.api.op.v4;
 import java.io.InputStream;
 
 import org.apache.olingo.client.api.edm.xml.v4.XMLMetadata;
-import org.apache.olingo.client.api.op.CommonODataDeserializer;
+import org.apache.olingo.client.api.op.ClientODataDeserializer;
 
-public interface ODataDeserializer extends CommonODataDeserializer {
+public interface ODataDeserializer extends ClientODataDeserializer {
 
   @Override
   XMLMetadata toMetadata(InputStream input);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
index b5603fc..4197094 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
@@ -23,7 +23,7 @@ import org.apache.olingo.commons.api.domain.ODataObjectFactory;
 import org.apache.olingo.client.api.op.ODataWriter;
 import org.apache.olingo.client.core.domain.ODataGeospatialValueImpl;
 import org.apache.olingo.client.core.domain.ODataPrimitiveValueImpl;
-import org.apache.olingo.client.core.op.ODataObjectFactoryImpl;
+import org.apache.olingo.commons.core.op.ODataObjectFactoryImpl;
 import org.apache.olingo.client.core.op.ODataWriterImpl;
 
 public abstract class AbstractODataClient implements CommonODataClient {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractJacksonTool.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractJacksonTool.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractJacksonTool.java
deleted file mode 100644
index 2d62a7d..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractJacksonTool.java
+++ /dev/null
@@ -1,83 +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.client.core.op;
-
-import com.fasterxml.aalto.stax.InputFactoryImpl;
-import com.fasterxml.aalto.stax.OutputFactoryImpl;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.InjectableValues;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
-import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
-import com.fasterxml.jackson.dataformat.xml.XmlFactory;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-import java.io.IOException;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-abstract class AbstractJacksonTool {
-
-  protected static final Logger LOG = LoggerFactory.getLogger(AbstractJacksonTool.class);
-
-  protected final ODataServiceVersion version;
-
-  protected AbstractJacksonTool(final ODataServiceVersion client) {
-    this.version = client;
-  }
-
-  protected ObjectMapper getObjectMapper() {
-    final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
-
-    mapper.setInjectableValues(new InjectableValues.Std().addValue(ODataServiceVersion.class, version));
-
-    mapper.setSerializerProvider(new InjectableSerializerProvider(mapper.getSerializerProvider(),
-            mapper.getSerializationConfig().withAttribute(ODataServiceVersion.class, version),
-            mapper.getSerializerFactory()));
-
-    return mapper;
-  }
-
-  protected XmlMapper getXmlMapper() {
-    final XmlMapper xmlMapper = new XmlMapper(
-            new XmlFactory(new InputFactoryImpl(), new OutputFactoryImpl()), new JacksonXmlModule());
-
-    xmlMapper.setInjectableValues(new InjectableValues.Std().addValue(ODataServiceVersion.class, version));
-
-    xmlMapper.addHandler(new DeserializationProblemHandler() {
-
-      @Override
-      public boolean handleUnknownProperty(final DeserializationContext ctxt, final JsonParser jp,
-              final JsonDeserializer<?> deserializer, final Object beanOrClass, final String propertyName)
-              throws IOException, JsonProcessingException {
-
-        // skip any unknown property
-        LOG.warn("Skipping unknown property {}", propertyName);
-        ctxt.getParser().skipChildren();
-        return true;
-      }
-    });
-    return xmlMapper;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
index d2e9ede..0524c13 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.client.core.op;
 
+import org.apache.olingo.commons.core.op.ResourceFactory;
 import java.io.StringWriter;
 import java.net.URI;
 import java.util.Iterator;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataDeserializer.java
deleted file mode 100644
index ed49ca8..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataDeserializer.java
+++ /dev/null
@@ -1,107 +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.client.core.op;
-
-import java.io.InputStream;
-import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.domain.ODataError;
-import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.client.api.op.CommonODataDeserializer;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.commons.core.data.AtomDeserializer;
-import org.apache.olingo.commons.core.data.AtomEntryImpl;
-import org.apache.olingo.commons.core.data.AtomFeedImpl;
-import org.apache.olingo.commons.core.data.AtomPropertyImpl;
-import org.apache.olingo.commons.core.data.JSONEntryImpl;
-import org.apache.olingo.commons.core.data.JSONErrorBundle;
-import org.apache.olingo.commons.core.data.JSONFeedImpl;
-import org.apache.olingo.commons.core.data.JSONPropertyImpl;
-import org.apache.olingo.commons.core.data.XMLErrorImpl;
-
-public abstract class AbstractODataDeserializer extends AbstractJacksonTool implements CommonODataDeserializer {
-
-  private static final long serialVersionUID = -4244158979195609909L;
-
-  private final AtomDeserializer atomDeserializer;
-
-  public AbstractODataDeserializer(final ODataServiceVersion version) {
-    super(version);
-
-    this.atomDeserializer = new AtomDeserializer(version);
-  }
-
-  @Override
-  public Feed toFeed(final InputStream input, final ODataPubFormat format) {
-    return format == ODataPubFormat.ATOM
-            ? atom(input, AtomFeedImpl.class)
-            : json(input, JSONFeedImpl.class);
-  }
-
-  @Override
-  public Entry toEntry(final InputStream input, final ODataPubFormat format) {
-    return format == ODataPubFormat.ATOM
-            ? atom(input, AtomEntryImpl.class)
-            : json(input, JSONEntryImpl.class);
-  }
-
-  @Override
-  public Property toProperty(final InputStream input, final ODataFormat format) {
-    return format == ODataFormat.XML
-            ? atom(input, AtomPropertyImpl.class)
-            : json(input, JSONPropertyImpl.class);
-  }
-
-  @Override
-  public ODataError toError(final InputStream input, final boolean isXML) {
-    return isXML
-            ? xml(input, XMLErrorImpl.class)
-            : json(input, JSONErrorBundle.class).getError();
-  }
-
-  /*
-   * ------------------ Protected methods ------------------
-   */
-  protected <T> T xml(final InputStream input, final Class<T> reference) {
-    try {
-      return getXmlMapper().readValue(input, reference);
-    } catch (Exception e) {
-      throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
-    }
-  }
-
-  protected <T> T atom(final InputStream input, final Class<T> reference) {
-    try {
-      return atomDeserializer.read(input, reference);
-    } catch (Exception e) {
-      throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
-    }
-  }
-
-  protected <T> T json(final InputStream input, final Class<T> reference) {
-    try {
-      return getObjectMapper().readValue(input, reference);
-    } catch (Exception e) {
-      throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataSerializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataSerializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataSerializer.java
deleted file mode 100644
index c314139..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataSerializer.java
+++ /dev/null
@@ -1,141 +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.client.core.op;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import org.apache.olingo.commons.api.Constants;
-import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.data.Link;
-import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.client.api.op.ODataSerializer;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.commons.core.data.AtomEntryImpl;
-import org.apache.olingo.commons.core.data.AtomFeedImpl;
-import org.apache.olingo.commons.core.data.AtomPropertyImpl;
-import org.apache.olingo.commons.core.data.AtomSerializer;
-import org.apache.olingo.commons.core.data.JSONEntryImpl;
-import org.apache.olingo.commons.core.data.JSONFeedImpl;
-import org.apache.olingo.commons.core.data.JSONPropertyImpl;
-
-public abstract class AbstractODataSerializer extends AbstractJacksonTool implements ODataSerializer {
-
-  private static final long serialVersionUID = -357777648541325363L;
-
-  private final AtomSerializer atomSerializer;
-
-  public AbstractODataSerializer(final ODataServiceVersion version) {
-    super(version);
-
-    this.atomSerializer = new AtomSerializer(version);
-  }
-
-  @Override
-  public void feed(final Feed obj, final OutputStream out) {
-    feed(obj, new OutputStreamWriter(out));
-  }
-
-  @Override
-  public void feed(final Feed obj, final Writer writer) {
-    if (obj instanceof AtomFeedImpl) {
-      atom((AtomFeedImpl) obj, writer);
-    } else {
-      json((JSONFeedImpl) obj, writer);
-    }
-  }
-
-  @Override
-  public void entry(final Entry obj, final OutputStream out) {
-    entry(obj, new OutputStreamWriter(out));
-  }
-
-  @Override
-  public void entry(final Entry obj, final Writer writer) {
-    if (obj instanceof AtomEntryImpl) {
-      atom((AtomEntryImpl) obj, writer);
-    } else {
-      json((JSONEntryImpl) obj, writer);
-    }
-  }
-
-  @Override
-  public void property(final Property obj, final OutputStream out) {
-    property(obj, new OutputStreamWriter(out));
-  }
-
-  @Override
-  public void property(final Property obj, final Writer writer) {
-    if (obj instanceof AtomPropertyImpl) {
-      atom((AtomPropertyImpl) obj, writer);
-    } else {
-      json((JSONPropertyImpl) obj, writer);
-    }
-  }
-
-  @Override
-  public void link(final Link link, final ODataFormat format, final OutputStream out) {
-    link(link, format, new OutputStreamWriter(out));
-  }
-
-  @Override
-  public void link(final Link link, final ODataFormat format, final Writer writer) {
-    if (format == ODataFormat.XML) {
-      atom(link, writer);
-    } else {
-      jsonLink(link, writer);
-    }
-  }
-
-  /*
-   * ------------------ Protected methods ------------------
-   */
-  protected <T> void atom(final T obj, final Writer writer) {
-    try {
-      atomSerializer.write(writer, obj);
-    } catch (Exception e) {
-      throw new IllegalArgumentException("While serializing Atom object", e);
-    }
-  }
-
-  protected <T> void json(final T obj, final Writer writer) {
-    try {
-      getObjectMapper().writeValue(writer, obj);
-    } catch (IOException e) {
-      throw new IllegalArgumentException("While serializing JSON object", e);
-    }
-  }
-
-  protected void jsonLink(final Link link, final Writer writer) {
-    final ObjectMapper mapper = getObjectMapper();
-    final ObjectNode uri = mapper.createObjectNode();
-    uri.put(Constants.JSON_URL, link.getHref());
-
-    try {
-      mapper.writeValue(writer, uri);
-    } catch (Exception e) {
-      throw new IllegalArgumentException("While serializing JSON link", e);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/InjectableSerializerProvider.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/InjectableSerializerProvider.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/InjectableSerializerProvider.java
deleted file mode 100644
index b9b5374..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/InjectableSerializerProvider.java
+++ /dev/null
@@ -1,43 +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.client.core.op;
-
-import com.fasterxml.jackson.databind.SerializationConfig;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
-import com.fasterxml.jackson.databind.ser.SerializerFactory;
-
-class InjectableSerializerProvider extends DefaultSerializerProvider {
-
-  private static final long serialVersionUID = 3432260063063739646L;
-
-  public InjectableSerializerProvider(
-          final SerializerProvider src, final SerializationConfig config, final SerializerFactory factory) {
-
-    super(src, config, factory);
-  }
-
-  @Override
-  public InjectableSerializerProvider createInstance(
-          final SerializationConfig config, final SerializerFactory factory) {
-
-    return this;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataObjectFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataObjectFactoryImpl.java
deleted file mode 100644
index e5e7aa3..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataObjectFactoryImpl.java
+++ /dev/null
@@ -1,162 +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.client.core.op;
-
-import java.net.URI;
-import org.apache.olingo.commons.api.domain.ODataLinkType;
-import org.apache.olingo.commons.api.domain.ODataCollectionValue;
-import org.apache.olingo.commons.api.domain.ODataComplexValue;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
-import org.apache.olingo.commons.api.domain.ODataGeospatialValue;
-import org.apache.olingo.commons.api.domain.ODataInlineEntity;
-import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
-import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataObjectFactory;
-import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
-import org.apache.olingo.commons.api.domain.ODataProperty;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-
-public class ODataObjectFactoryImpl implements ODataObjectFactory {
-
-  private static final long serialVersionUID = -3769695665946919447L;
-
-  protected final ODataServiceVersion version;
-
-  public ODataObjectFactoryImpl(final ODataServiceVersion version) {
-    this.version = version;
-  }
-
-  @Override
-  public ODataEntitySet newEntitySet() {
-    return new ODataEntitySet();
-  }
-
-  @Override
-  public ODataEntitySet newEntitySet(final URI next) {
-    return new ODataEntitySet(next);
-  }
-
-  @Override
-  public ODataEntity newEntity(final String name) {
-    return new ODataEntity(name);
-  }
-
-  @Override
-  public ODataEntity newEntity(final String name, final URI link) {
-    final ODataEntity result = new ODataEntity(name);
-    result.setLink(link);
-    return result;
-  }
-
-  @Override
-  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI link,
-          final ODataEntitySet entitySet) {
-
-    return new ODataInlineEntitySet(version, link, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
-  }
-
-  @Override
-  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI baseURI, final String href,
-          final ODataEntitySet entitySet) {
-
-    return new ODataInlineEntitySet(version, baseURI, href, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
-  }
-
-  @Override
-  public ODataInlineEntity newInlineEntity(final String name, final URI link, final ODataEntity entity) {
-    return new ODataInlineEntity(version, link, ODataLinkType.ENTITY_NAVIGATION, name, entity);
-  }
-
-  @Override
-  public ODataInlineEntity newInlineEntity(final String name, final URI baseURI, final String href,
-          final ODataEntity entity) {
-
-    return new ODataInlineEntity(version, baseURI, href, ODataLinkType.ENTITY_NAVIGATION, name, entity);
-  }
-
-  @Override
-  public ODataLink newEntityNavigationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newEntityNavigationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newFeedNavigationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newFeedNavigationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newAssociationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newAssociationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newMediaEditLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newMediaEditLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
-  }
-
-  @Override
-  public ODataProperty newPrimitiveProperty(final String name, final ODataPrimitiveValue value) {
-    return new ODataProperty(name, value);
-  }
-
-  @Override
-  public ODataProperty newPrimitiveProperty(final String name, final ODataGeospatialValue value) {
-    return new ODataProperty(name, value);
-  }
-
-  @Override
-  public ODataProperty newComplexProperty(final String name, final ODataComplexValue value) {
-    return new ODataProperty(name, value);
-  }
-
-  @Override
-  public ODataProperty newCollectionProperty(final String name, final ODataCollectionValue value) {
-    return new ODataProperty(name, value);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
index 80f4f11..2b914b4 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.client.core.op;
 
+import org.apache.olingo.commons.core.op.ResourceFactory;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ResourceFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ResourceFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ResourceFactory.java
deleted file mode 100644
index 525114e..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ResourceFactory.java
+++ /dev/null
@@ -1,125 +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.client.core.op;
-
-import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.commons.core.data.AtomEntryImpl;
-import org.apache.olingo.commons.core.data.AtomFeedImpl;
-import org.apache.olingo.commons.core.data.AtomPropertyImpl;
-import org.apache.olingo.commons.core.data.JSONEntryImpl;
-import org.apache.olingo.commons.core.data.JSONFeedImpl;
-import org.apache.olingo.commons.core.data.JSONPropertyImpl;
-
-public class ResourceFactory {
-
-  /**
-   * Gets a new instance of <tt>Feed</tt>.
-   *
-   * @param resourceClass reference class.
-   * @return <tt>Feed</tt> object.
-   */
-  public static Feed newFeed(final Class<? extends Feed> resourceClass) {
-    Feed result = null;
-
-    if (AtomFeedImpl.class.equals(resourceClass)) {
-      result = new AtomFeedImpl();
-    }
-    if (JSONFeedImpl.class.equals(resourceClass)) {
-      result = new JSONFeedImpl();
-    }
-
-    return result;
-  }
-
-  /**
-   * Gets a new instance of <tt>Entry</tt>.
-   *
-   * @param resourceClass reference class.
-   * @return <tt>Entry</tt> object.
-   */
-  public static Entry newEntry(final Class<? extends Entry> resourceClass) {
-    Entry result = null;
-    if (AtomEntryImpl.class.equals(resourceClass)) {
-      result = new AtomEntryImpl();
-    }
-    if (JSONEntryImpl.class.equals(resourceClass)) {
-      result = new JSONEntryImpl();
-    }
-
-    return result;
-  }
-
-  public static Property newProperty(final Class<? extends Entry> resourceClass) {
-    Property result = null;
-    if (AtomEntryImpl.class.equals(resourceClass)) {
-      result = new AtomPropertyImpl();
-    }
-    if (JSONEntryImpl.class.equals(resourceClass)) {
-      result = new JSONPropertyImpl();
-    }
-
-    return result;
-  }
-
-  /**
-   * Gets feed reference class from the given format.
-   *
-   * @param isXML whether it is JSON or XML / Atom
-   * @return resource reference class.
-   */
-  public static Class<? extends Feed> feedClassForFormat(final boolean isXML) {
-    return isXML ? AtomFeedImpl.class : JSONFeedImpl.class;
-  }
-
-  /**
-   * Gets entry reference class from the given format.
-   *
-   * @param isXML whether it is JSON or XML / Atom
-   * @return resource reference class.
-   */
-  public static Class<? extends Entry> entryClassForFormat(final boolean isXML) {
-    return isXML ? AtomEntryImpl.class : JSONEntryImpl.class;
-  }
-
-  /**
-   * Gets <tt>Entry</tt> object from feed resource.
-   *
-   * @param resourceClass feed reference class.
-   * @return <tt>Entry</tt> object.
-   */
-  public static Class<? extends Entry> entryClassForFeed(final Class<? extends Feed> resourceClass) {
-    Class<? extends Entry> result = null;
-
-    if (AtomFeedImpl.class.equals(resourceClass)) {
-      result = AtomEntryImpl.class;
-    }
-    if (JSONFeedImpl.class.equals(resourceClass)) {
-      result = JSONEntryImpl.class;
-    }
-
-    return result;
-  }
-
-  public static ODataPubFormat formatForEntryClass(final Class<? extends Entry> reference) {
-    return reference.equals(AtomEntryImpl.class) ? ODataPubFormat.ATOM : ODataPubFormat.JSON;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataDeserializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataDeserializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataDeserializerImpl.java
index 9abd8e3..d6b05d9 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataDeserializerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataDeserializerImpl.java
@@ -30,7 +30,7 @@ import org.apache.olingo.client.core.data.v3.JSONServiceDocumentImpl;
 import org.apache.olingo.client.core.data.v4.XMLServiceDocumentImpl;
 import org.apache.olingo.client.core.edm.xml.v3.EdmxImpl;
 import org.apache.olingo.client.core.edm.xml.v3.XMLMetadataImpl;
-import org.apache.olingo.client.core.op.AbstractODataDeserializer;
+import org.apache.olingo.commons.core.op.AbstractODataDeserializer;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 public class ODataDeserializerImpl extends AbstractODataDeserializer implements ODataDeserializer {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataSerializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataSerializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataSerializerImpl.java
index d1fa5f0..40b5b06 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataSerializerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataSerializerImpl.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.core.op.impl.v3;
 
-import org.apache.olingo.client.core.op.AbstractODataSerializer;
+import org.apache.olingo.commons.core.op.AbstractODataSerializer;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 public class ODataSerializerImpl extends AbstractODataSerializer {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataDeserializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataDeserializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataDeserializerImpl.java
index 4147901..f936853 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataDeserializerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataDeserializerImpl.java
@@ -28,7 +28,7 @@ import org.apache.olingo.client.core.data.v4.JSONServiceDocumentImpl;
 import org.apache.olingo.client.core.data.v4.XMLServiceDocumentImpl;
 import org.apache.olingo.client.core.edm.xml.v4.EdmxImpl;
 import org.apache.olingo.client.core.edm.xml.v4.XMLMetadataImpl;
-import org.apache.olingo.client.core.op.AbstractODataDeserializer;
+import org.apache.olingo.commons.core.op.AbstractODataDeserializer;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 public class ODataDeserializerImpl extends AbstractODataDeserializer implements ODataDeserializer {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataSerializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataSerializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataSerializerImpl.java
index 309ed91..f75fb3e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataSerializerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataSerializerImpl.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.core.op.impl.v4;
 
-import org.apache.olingo.client.core.op.AbstractODataSerializer;
+import org.apache.olingo.commons.core.op.AbstractODataSerializer;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 public class ODataSerializerImpl extends AbstractODataSerializer {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
index 34d7069..d10c874 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
@@ -27,7 +27,7 @@ import org.apache.olingo.client.api.communication.request.cud.v3.CUDRequestFacto
 import org.apache.olingo.client.api.communication.request.invoke.v3.InvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.retrieve.v3.RetrieveRequestFactory;
 import org.apache.olingo.client.api.communication.request.streamed.v3.StreamedRequestFactory;
-import org.apache.olingo.client.api.op.ODataSerializer;
+import org.apache.olingo.commons.api.op.ODataSerializer;
 import org.apache.olingo.client.api.op.v3.ODataDeserializer;
 import org.apache.olingo.client.api.op.v3.ODataBinder;
 import org.apache.olingo.client.api.op.v3.ODataReader;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
index ebab41a..bb12f1a 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
@@ -27,7 +27,7 @@ import org.apache.olingo.client.api.communication.request.cud.v4.CUDRequestFacto
 import org.apache.olingo.client.api.communication.request.invoke.v4.InvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.retrieve.v4.RetrieveRequestFactory;
 import org.apache.olingo.client.api.communication.request.streamed.v4.StreamedRequestFactory;
-import org.apache.olingo.client.api.op.ODataSerializer;
+import org.apache.olingo.commons.api.op.ODataSerializer;
 import org.apache.olingo.client.api.op.v4.ODataBinder;
 import org.apache.olingo.client.api.op.v4.ODataDeserializer;
 import org.apache.olingo.client.api.op.v4.ODataReader;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
index 609bd9a..eb8d314 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
@@ -38,7 +38,7 @@ import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataProperty;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
-import org.apache.olingo.client.core.op.ResourceFactory;
+import org.apache.olingo.commons.core.op.ResourceFactory;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.junit.Test;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
index aaa9ed7..b9ac098 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
@@ -33,7 +33,7 @@ import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.client.core.uri.URIUtils;
-import org.apache.olingo.client.core.op.ResourceFactory;
+import org.apache.olingo.commons.core.op.ResourceFactory;
 import static org.junit.Assert.assertNotNull;
 import org.junit.Test;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntitySetTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntitySetTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntitySetTest.java
index 792ddb7..c6fd0d8 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntitySetTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntitySetTest.java
@@ -27,7 +27,7 @@ import org.apache.olingo.client.api.v3.ODataClient;
 import org.apache.olingo.commons.api.domain.ODataEntitySet;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.core.AbstractTest;
-import org.apache.olingo.client.core.op.ResourceFactory;
+import org.apache.olingo.commons.core.op.ResourceFactory;
 import org.junit.Test;
 
 public class EntitySetTest extends AbstractTest {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
index d8f02a6..b615988 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
@@ -29,7 +29,7 @@ import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataProperty;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.core.AbstractTest;
-import org.apache.olingo.client.core.op.ResourceFactory;
+import org.apache.olingo.commons.core.op.ResourceFactory;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.geo.Geospatial;
 import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/CommonODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/CommonODataDeserializer.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/CommonODataDeserializer.java
new file mode 100644
index 0000000..dfefb78
--- /dev/null
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/CommonODataDeserializer.java
@@ -0,0 +1,71 @@
+/*
+ * 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.commons.api.op;
+
+import java.io.InputStream;
+import java.io.Serializable;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.domain.ODataError;
+import org.apache.olingo.commons.api.data.Feed;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
+
+/**
+ * Interface for serialization.
+ */
+public interface CommonODataDeserializer extends Serializable {
+
+  /**
+   * Gets a feed object from the given InputStream.
+   *
+   * @param input stream to be de-serialized.
+   * @param format Atom or JSON
+   * @return Feed instance.
+   */
+  Feed toFeed(InputStream input, ODataPubFormat format);
+
+  /**
+   * Gets an entry object from the given InputStream.
+   *
+   * @param input stream to be de-serialized.
+   * @param format Atom or JSON
+   * @return Entry instance.
+   */
+  Entry toEntry(InputStream input, ODataPubFormat format);
+
+  /**
+   * Gets a property object from the given InputStream.
+   *
+   * @param input stream to be de-serialized.
+   * @param format XML or JSON
+   * @return Property instance.
+   */
+  Property toProperty(InputStream input, ODataFormat format);
+
+  /**
+   * Gets the ODataError object represented by the given InputStream.
+   *
+   * @param input stream to be parsed and de-serialized.
+   * @param isXML 'TRUE' if the error is represented by XML; 'FALSE' otherwise.
+   * @return
+   */
+  ODataError toError(InputStream input, boolean isXML);
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/ODataSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/ODataSerializer.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/ODataSerializer.java
new file mode 100644
index 0000000..2a7beff
--- /dev/null
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/op/ODataSerializer.java
@@ -0,0 +1,100 @@
+/*
+ * 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.commons.api.op;
+
+import java.io.OutputStream;
+import java.io.Serializable;
+import java.io.Writer;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.data.Feed;
+import org.apache.olingo.commons.api.data.Link;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.format.ODataFormat;
+
+/**
+ * Utility class for serialization.
+ */
+public interface ODataSerializer extends Serializable {
+
+  /**
+   * Writes Feed object onto the given stream.
+   *
+   * @param obj object to be streamed.
+   * @param out output stream.
+   */
+  void feed(Feed obj, OutputStream out);
+
+  /**
+   * Writes Feed object by the given writer.
+   *
+   * @param obj object to be streamed.
+   * @param writer writer.
+   */
+  void feed(Feed obj, Writer writer);
+
+  /**
+   * Writes theEntry object onto the given stream.
+   *
+   * @param obj object to be streamed.
+   * @param out output stream.
+   */
+  void entry(Entry obj, OutputStream out);
+
+  /**
+   * Writes the Entry object by the given writer.
+   *
+   * @param obj object to be streamed.
+   * @param writer writer.
+   */
+  void entry(Entry obj, Writer writer);
+
+  /**
+   * Writes the property object onto the given stream.
+   *
+   * @param property object to be streamed.
+   * @param out output stream.
+   */
+  void property(Property property, OutputStream out);
+
+  /**
+   * Writes the property object by the given writer.
+   *
+   * @param property object to be streamed.
+   * @param writer writer.
+   */
+  void property(Property property, Writer writer);
+
+  /**
+   * Writes link onto the given stream.
+   *
+   * @param link OData link to be streamed.
+   * @param format streaming format.
+   * @param out output stream.
+   */
+  void link(Link link, ODataFormat format, OutputStream out);
+
+  /**
+   * Writes link by the given writer.
+   *
+   * @param link OData link to be streamed.
+   * @param format streaming format.
+   * @param writer writer.
+   */
+  void link(Link link, ODataFormat format, Writer writer);
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractJacksonTool.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractJacksonTool.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractJacksonTool.java
new file mode 100644
index 0000000..c5eda7a
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractJacksonTool.java
@@ -0,0 +1,83 @@
+/*
+ * 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.commons.core.op;
+
+import com.fasterxml.aalto.stax.InputFactoryImpl;
+import com.fasterxml.aalto.stax.OutputFactoryImpl;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.InjectableValues;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
+import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
+import com.fasterxml.jackson.dataformat.xml.XmlFactory;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import java.io.IOException;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+abstract class AbstractJacksonTool {
+
+  protected static final Logger LOG = LoggerFactory.getLogger(AbstractJacksonTool.class);
+
+  protected final ODataServiceVersion version;
+
+  protected AbstractJacksonTool(final ODataServiceVersion client) {
+    this.version = client;
+  }
+
+  protected ObjectMapper getObjectMapper() {
+    final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+    mapper.setInjectableValues(new InjectableValues.Std().addValue(ODataServiceVersion.class, version));
+
+    mapper.setSerializerProvider(new InjectableSerializerProvider(mapper.getSerializerProvider(),
+            mapper.getSerializationConfig().withAttribute(ODataServiceVersion.class, version),
+            mapper.getSerializerFactory()));
+
+    return mapper;
+  }
+
+  protected XmlMapper getXmlMapper() {
+    final XmlMapper xmlMapper = new XmlMapper(
+            new XmlFactory(new InputFactoryImpl(), new OutputFactoryImpl()), new JacksonXmlModule());
+
+    xmlMapper.setInjectableValues(new InjectableValues.Std().addValue(ODataServiceVersion.class, version));
+
+    xmlMapper.addHandler(new DeserializationProblemHandler() {
+
+      @Override
+      public boolean handleUnknownProperty(final DeserializationContext ctxt, final JsonParser jp,
+              final JsonDeserializer<?> deserializer, final Object beanOrClass, final String propertyName)
+              throws IOException, JsonProcessingException {
+
+        // skip any unknown property
+        LOG.warn("Skipping unknown property {}", propertyName);
+        ctxt.getParser().skipChildren();
+        return true;
+      }
+    });
+    return xmlMapper;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataDeserializer.java
new file mode 100644
index 0000000..94c43da
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataDeserializer.java
@@ -0,0 +1,107 @@
+/*
+ * 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.commons.core.op;
+
+import java.io.InputStream;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.domain.ODataError;
+import org.apache.olingo.commons.api.data.Feed;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.api.op.CommonODataDeserializer;
+import org.apache.olingo.commons.core.data.AtomDeserializer;
+import org.apache.olingo.commons.core.data.AtomEntryImpl;
+import org.apache.olingo.commons.core.data.AtomFeedImpl;
+import org.apache.olingo.commons.core.data.AtomPropertyImpl;
+import org.apache.olingo.commons.core.data.JSONEntryImpl;
+import org.apache.olingo.commons.core.data.JSONErrorBundle;
+import org.apache.olingo.commons.core.data.JSONFeedImpl;
+import org.apache.olingo.commons.core.data.JSONPropertyImpl;
+import org.apache.olingo.commons.core.data.XMLErrorImpl;
+
+public abstract class AbstractODataDeserializer extends AbstractJacksonTool implements CommonODataDeserializer {
+
+  private static final long serialVersionUID = -4244158979195609909L;
+
+  private final AtomDeserializer atomDeserializer;
+
+  public AbstractODataDeserializer(final ODataServiceVersion version) {
+    super(version);
+
+    this.atomDeserializer = new AtomDeserializer(version);
+  }
+
+  @Override
+  public Feed toFeed(final InputStream input, final ODataPubFormat format) {
+    return format == ODataPubFormat.ATOM
+            ? atom(input, AtomFeedImpl.class)
+            : json(input, JSONFeedImpl.class);
+  }
+
+  @Override
+  public Entry toEntry(final InputStream input, final ODataPubFormat format) {
+    return format == ODataPubFormat.ATOM
+            ? atom(input, AtomEntryImpl.class)
+            : json(input, JSONEntryImpl.class);
+  }
+
+  @Override
+  public Property toProperty(final InputStream input, final ODataFormat format) {
+    return format == ODataFormat.XML
+            ? atom(input, AtomPropertyImpl.class)
+            : json(input, JSONPropertyImpl.class);
+  }
+
+  @Override
+  public ODataError toError(final InputStream input, final boolean isXML) {
+    return isXML
+            ? xml(input, XMLErrorImpl.class)
+            : json(input, JSONErrorBundle.class).getError();
+  }
+
+  /*
+   * ------------------ Protected methods ------------------
+   */
+  protected <T> T xml(final InputStream input, final Class<T> reference) {
+    try {
+      return getXmlMapper().readValue(input, reference);
+    } catch (Exception e) {
+      throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
+    }
+  }
+
+  protected <T> T atom(final InputStream input, final Class<T> reference) {
+    try {
+      return atomDeserializer.read(input, reference);
+    } catch (Exception e) {
+      throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
+    }
+  }
+
+  protected <T> T json(final InputStream input, final Class<T> reference) {
+    try {
+      return getObjectMapper().readValue(input, reference);
+    } catch (Exception e) {
+      throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataSerializer.java
new file mode 100644
index 0000000..6ce1fbf
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/AbstractODataSerializer.java
@@ -0,0 +1,141 @@
+/*
+ * 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.commons.core.op;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import org.apache.olingo.commons.api.Constants;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.data.Feed;
+import org.apache.olingo.commons.api.data.Link;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.api.op.ODataSerializer;
+import org.apache.olingo.commons.core.data.AtomEntryImpl;
+import org.apache.olingo.commons.core.data.AtomFeedImpl;
+import org.apache.olingo.commons.core.data.AtomPropertyImpl;
+import org.apache.olingo.commons.core.data.AtomSerializer;
+import org.apache.olingo.commons.core.data.JSONEntryImpl;
+import org.apache.olingo.commons.core.data.JSONFeedImpl;
+import org.apache.olingo.commons.core.data.JSONPropertyImpl;
+
+public abstract class AbstractODataSerializer extends AbstractJacksonTool implements ODataSerializer {
+
+  private static final long serialVersionUID = -357777648541325363L;
+
+  private final AtomSerializer atomSerializer;
+
+  public AbstractODataSerializer(final ODataServiceVersion version) {
+    super(version);
+
+    this.atomSerializer = new AtomSerializer(version);
+  }
+
+  @Override
+  public void feed(final Feed obj, final OutputStream out) {
+    feed(obj, new OutputStreamWriter(out));
+  }
+
+  @Override
+  public void feed(final Feed obj, final Writer writer) {
+    if (obj instanceof AtomFeedImpl) {
+      atom((AtomFeedImpl) obj, writer);
+    } else {
+      json((JSONFeedImpl) obj, writer);
+    }
+  }
+
+  @Override
+  public void entry(final Entry obj, final OutputStream out) {
+    entry(obj, new OutputStreamWriter(out));
+  }
+
+  @Override
+  public void entry(final Entry obj, final Writer writer) {
+    if (obj instanceof AtomEntryImpl) {
+      atom((AtomEntryImpl) obj, writer);
+    } else {
+      json((JSONEntryImpl) obj, writer);
+    }
+  }
+
+  @Override
+  public void property(final Property obj, final OutputStream out) {
+    property(obj, new OutputStreamWriter(out));
+  }
+
+  @Override
+  public void property(final Property obj, final Writer writer) {
+    if (obj instanceof AtomPropertyImpl) {
+      atom((AtomPropertyImpl) obj, writer);
+    } else {
+      json((JSONPropertyImpl) obj, writer);
+    }
+  }
+
+  @Override
+  public void link(final Link link, final ODataFormat format, final OutputStream out) {
+    link(link, format, new OutputStreamWriter(out));
+  }
+
+  @Override
+  public void link(final Link link, final ODataFormat format, final Writer writer) {
+    if (format == ODataFormat.XML) {
+      atom(link, writer);
+    } else {
+      jsonLink(link, writer);
+    }
+  }
+
+  /*
+   * ------------------ Protected methods ------------------
+   */
+  protected <T> void atom(final T obj, final Writer writer) {
+    try {
+      atomSerializer.write(writer, obj);
+    } catch (Exception e) {
+      throw new IllegalArgumentException("While serializing Atom object", e);
+    }
+  }
+
+  protected <T> void json(final T obj, final Writer writer) {
+    try {
+      getObjectMapper().writeValue(writer, obj);
+    } catch (IOException e) {
+      throw new IllegalArgumentException("While serializing JSON object", e);
+    }
+  }
+
+  protected void jsonLink(final Link link, final Writer writer) {
+    final ObjectMapper mapper = getObjectMapper();
+    final ObjectNode uri = mapper.createObjectNode();
+    uri.put(Constants.JSON_URL, link.getHref());
+
+    try {
+      mapper.writeValue(writer, uri);
+    } catch (Exception e) {
+      throw new IllegalArgumentException("While serializing JSON link", e);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/InjectableSerializerProvider.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/InjectableSerializerProvider.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/InjectableSerializerProvider.java
new file mode 100644
index 0000000..967f1e0
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/InjectableSerializerProvider.java
@@ -0,0 +1,43 @@
+/*
+ * 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.commons.core.op;
+
+import com.fasterxml.jackson.databind.SerializationConfig;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
+import com.fasterxml.jackson.databind.ser.SerializerFactory;
+
+class InjectableSerializerProvider extends DefaultSerializerProvider {
+
+  private static final long serialVersionUID = 3432260063063739646L;
+
+  public InjectableSerializerProvider(
+          final SerializerProvider src, final SerializationConfig config, final SerializerFactory factory) {
+
+    super(src, config, factory);
+  }
+
+  @Override
+  public InjectableSerializerProvider createInstance(
+          final SerializationConfig config, final SerializerFactory factory) {
+
+    return this;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a55ed62a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java
new file mode 100644
index 0000000..5e9f9c1
--- /dev/null
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/op/ODataObjectFactoryImpl.java
@@ -0,0 +1,162 @@
+/*
+ * 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.commons.core.op;
+
+import java.net.URI;
+import org.apache.olingo.commons.api.domain.ODataLinkType;
+import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.ODataGeospatialValue;
+import org.apache.olingo.commons.api.domain.ODataInlineEntity;
+import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
+import org.apache.olingo.commons.api.domain.ODataLink;
+import org.apache.olingo.commons.api.domain.ODataObjectFactory;
+import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
+import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+public class ODataObjectFactoryImpl implements ODataObjectFactory {
+
+  private static final long serialVersionUID = -3769695665946919447L;
+
+  protected final ODataServiceVersion version;
+
+  public ODataObjectFactoryImpl(final ODataServiceVersion version) {
+    this.version = version;
+  }
+
+  @Override
+  public ODataEntitySet newEntitySet() {
+    return new ODataEntitySet();
+  }
+
+  @Override
+  public ODataEntitySet newEntitySet(final URI next) {
+    return new ODataEntitySet(next);
+  }
+
+  @Override
+  public ODataEntity newEntity(final String name) {
+    return new ODataEntity(name);
+  }
+
+  @Override
+  public ODataEntity newEntity(final String name, final URI link) {
+    final ODataEntity result = new ODataEntity(name);
+    result.setLink(link);
+    return result;
+  }
+
+  @Override
+  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI link,
+          final ODataEntitySet entitySet) {
+
+    return new ODataInlineEntitySet(version, link, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
+  }
+
+  @Override
+  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI baseURI, final String href,
+          final ODataEntitySet entitySet) {
+
+    return new ODataInlineEntitySet(version, baseURI, href, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
+  }
+
+  @Override
+  public ODataInlineEntity newInlineEntity(final String name, final URI link, final ODataEntity entity) {
+    return new ODataInlineEntity(version, link, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+  }
+
+  @Override
+  public ODataInlineEntity newInlineEntity(final String name, final URI baseURI, final String href,
+          final ODataEntity entity) {
+
+    return new ODataInlineEntity(version, baseURI, href, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+  }
+
+  @Override
+  public ODataLink newEntityNavigationLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newEntityNavigationLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newFeedNavigationLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newFeedNavigationLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newAssociationLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newAssociationLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newMediaEditLink(final String name, final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).
+            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
+  }
+
+  @Override
+  public ODataLink newMediaEditLink(final String name, final URI baseURI, final String href) {
+    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
+            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
+  }
+
+  @Override
+  public ODataProperty newPrimitiveProperty(final String name, final ODataPrimitiveValue value) {
+    return new ODataProperty(name, value);
+  }
+
+  @Override
+  public ODataProperty newPrimitiveProperty(final String name, final ODataGeospatialValue value) {
+    return new ODataProperty(name, value);
+  }
+
+  @Override
+  public ODataProperty newComplexProperty(final String name, final ODataComplexValue value) {
+    return new ODataProperty(name, value);
+  }
+
+  @Override
+  public ODataProperty newCollectionProperty(final String name, final ODataCollectionValue value) {
+    return new ODataProperty(name, value);
+  }
+
+}