Repository: olingo-odata4
Updated Branches:
  refs/heads/OLINGO-423_EdmxReferenceHandling [created] 188574f5c


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceImpl.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceImpl.java
new file mode 100644
index 0000000..31f64d2
--- /dev/null
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceImpl.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.core.edmx;
+
+
+import org.apache.olingo.server.api.edmx.EdmxReference;
+import org.apache.olingo.server.api.edmx.EdmxReferenceInclude;
+import org.apache.olingo.server.api.edmx.EdmxReferenceIncludeAnnotation;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+
+public class EdmxReferenceImpl implements EdmxReference {
+  private final URI uri;
+  private final List<EdmxReferenceInclude> edmxIncludes;
+  private final List<EdmxReferenceIncludeAnnotation> edmxIncludeAnnotations;
+
+  public EdmxReferenceImpl(URI uri) {
+    this.uri = uri;
+    edmxIncludes = new ArrayList<EdmxReferenceInclude>();
+    edmxIncludeAnnotations = new ArrayList<EdmxReferenceIncludeAnnotation>();
+  }
+
+  @Override
+  public URI getUri() {
+    return uri;
+  }
+
+  @Override
+  public List<EdmxReferenceInclude> getIncludes() {
+    return Collections.unmodifiableList(edmxIncludes);
+  }
+
+  public void addInclude(EdmxReferenceInclude include) {
+    edmxIncludes.add(include);
+  }
+
+  @Override
+  public List<EdmxReferenceIncludeAnnotation> getIncludeAnnotations() {
+    return Collections.unmodifiableList(edmxIncludeAnnotations);
+  }
+
+  public void addIncludeAnnotation(EdmxReferenceIncludeAnnotation 
includeAnnotation) {
+    edmxIncludeAnnotations.add(includeAnnotation);
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeAnnotationImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeAnnotationImpl.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeAnnotationImpl.java
new file mode 100644
index 0000000..1a4d7b4
--- /dev/null
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeAnnotationImpl.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.core.edmx;
+
+import org.apache.olingo.server.api.edmx.EdmxReferenceIncludeAnnotation;
+
+/**
+ */
+public class EdmxReferenceIncludeAnnotationImpl implements 
EdmxReferenceIncludeAnnotation {
+
+  private final String termNamespace;
+  private final String qualifier;
+  private final String targetNamespace;
+
+  public EdmxReferenceIncludeAnnotationImpl(String termNamespace, String 
qualifier, String targetNamespace) {
+    this.termNamespace = termNamespace;
+    this.qualifier = qualifier;
+    this.targetNamespace = targetNamespace;
+  }
+
+  @Override
+  public String getTermNamespace() {
+    return termNamespace;
+  }
+
+  @Override
+  public String getQualifier() {
+    return qualifier;
+  }
+
+  @Override
+  public String getTargetNamespace() {
+    return targetNamespace;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeImpl.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeImpl.java
new file mode 100644
index 0000000..0da95df
--- /dev/null
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/edmx/EdmxReferenceIncludeImpl.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.server.core.edmx;
+
+import org.apache.olingo.server.api.edmx.EdmxReferenceInclude;
+
+/**
+ */
+public class EdmxReferenceIncludeImpl implements EdmxReferenceInclude {
+  private final String namespace;
+  private final String alias;
+
+  public EdmxReferenceIncludeImpl(String namespace, String alias) {
+    this.namespace = namespace;
+    this.alias = alias;
+  }
+
+  @Override
+  public String getNamespace() {
+    return namespace;
+  }
+
+  @Override
+  public String getAlias() {
+    return alias;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
index 0b13381..8956a6d 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/ODataXmlSerializerImpl.java
@@ -31,6 +31,7 @@ import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.server.api.ODataServerError;
+import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.serializer.ODataSerializerOptions;
@@ -53,7 +54,7 @@ public class ODataXmlSerializerImpl implements 
ODataSerializer {
   }
 
   @Override
-  public InputStream metadataDocument(final Edm edm) throws 
SerializerException {
+  public InputStream metadataDocument(final ServiceMetadata serviceMetadata) 
throws SerializerException {
     CircleStreamBuffer buffer;
     XMLStreamWriter xmlStreamWriter = null;
 
@@ -61,7 +62,7 @@ public class ODataXmlSerializerImpl implements 
ODataSerializer {
     try {
       buffer = new CircleStreamBuffer();
       xmlStreamWriter = 
XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), 
DEFAULT_CHARSET);
-      MetadataDocumentXmlSerializer serializer = new 
MetadataDocumentXmlSerializer(edm);
+      MetadataDocumentXmlSerializer serializer = new 
MetadataDocumentXmlSerializer(serviceMetadata);
       serializer.writeMetadataDocument(xmlStreamWriter);
       xmlStreamWriter.flush();
       xmlStreamWriter.close();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index 0066f73..324c5aa 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -42,6 +42,7 @@ import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 import org.apache.olingo.server.api.ODataServerError;
+import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.serializer.ODataSerializerOptions;
@@ -107,7 +108,7 @@ public class ODataJsonSerializer implements ODataSerializer 
{
   }
 
   @Override
-  public InputStream metadataDocument(final Edm edm) throws 
SerializerException {
+  public InputStream metadataDocument(final ServiceMetadata serviceMetadata) 
throws SerializerException {
     throw new SerializerException("Metadata in JSON format not supported!",
         SerializerException.MessageKeys.JSON_METADATA);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
index d07360c..ec3dd5f 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
@@ -18,31 +18,9 @@
  */
 package org.apache.olingo.server.core.serializer.xml;
 
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
-import org.apache.olingo.commons.api.edm.EdmBindingTarget;
-import org.apache.olingo.commons.api.edm.EdmComplexType;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmEntitySet;
-import org.apache.olingo.commons.api.edm.EdmEntityType;
-import org.apache.olingo.commons.api.edm.EdmEnumType;
-import org.apache.olingo.commons.api.edm.EdmFunction;
-import org.apache.olingo.commons.api.edm.EdmFunctionImport;
-import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
-import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
-import org.apache.olingo.commons.api.edm.EdmNavigationPropertyBinding;
-import org.apache.olingo.commons.api.edm.EdmOperation;
-import org.apache.olingo.commons.api.edm.EdmParameter;
-import org.apache.olingo.commons.api.edm.EdmProperty;
-import org.apache.olingo.commons.api.edm.EdmReferentialConstraint;
-import org.apache.olingo.commons.api.edm.EdmReturnType;
-import org.apache.olingo.commons.api.edm.EdmSchema;
-import org.apache.olingo.commons.api.edm.EdmSingleton;
-import org.apache.olingo.commons.api.edm.EdmStructuredType;
-import org.apache.olingo.commons.api.edm.EdmType;
-import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
-import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.*;
+import org.apache.olingo.server.api.edmx.EdmxReference;
+import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 
 import javax.xml.stream.XMLStreamException;
@@ -93,7 +71,7 @@ public class MetadataDocumentXmlSerializer {
   private static final String XML_NAMESPACE = "Namespace";
   private static final String XML_TYPE_DEFINITION = "TypeDefinition";
 
-  private final Edm edm;
+  private final ServiceMetadata serviceMetadata;
 
   private final static String EDMX = "Edmx";
   private final static String PREFIX_EDMX = "edmx";
@@ -101,8 +79,8 @@ public class MetadataDocumentXmlSerializer {
 
   private final static String NS_EDM = 
"http://docs.oasis-open.org/odata/ns/edm";;
 
-  public MetadataDocumentXmlSerializer(final Edm edm) {
-    this.edm = edm;
+  public MetadataDocumentXmlSerializer(final ServiceMetadata edm) {
+    this.serviceMetadata = edm;
   }
 
   public void writeMetadataDocument(final XMLStreamWriter writer) throws 
XMLStreamException {
@@ -122,7 +100,7 @@ public class MetadataDocumentXmlSerializer {
   private void appendDataServices(final XMLStreamWriter writer) throws 
XMLStreamException {
     writer.setDefaultNamespace(NS_EDM);
     writer.writeStartElement(NS_EDMX, "DataServices");
-    for (EdmSchema schema : edm.getSchemas()) {
+    for (EdmSchema schema : serviceMetadata.getEdm().getSchemas()) {
       appendSchema(writer, schema);
     }
     writer.writeEndElement();
@@ -531,15 +509,17 @@ public class MetadataDocumentXmlSerializer {
    * and mentioned in its Common Schema Definition Language (CSDL) document.
    */
   private void appendReference(final XMLStreamWriter writer) throws 
XMLStreamException {
-    writer.writeStartElement(NS_EDMX, "Reference");
-    // TODO: Which value can we use here?
-    // 
<http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml>
-    // is an external site we don't want to query each time an EDM-enabled 
client is used.
-    writer.writeAttribute("Uri",
-        
"http://localhost:9080/odata-server-tecsvc/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml";);
-    writer.writeEmptyElement(NS_EDMX, "Include");
-    writer.writeAttribute(XML_NAMESPACE, "Org.OData.Core.V1");
-    writer.writeAttribute(XML_ALIAS, "Core");
-    writer.writeEndElement();
+    List<EdmxReference> references = serviceMetadata.getReferences();
+    for (EdmxReference reference: references) {
+      writer.writeStartElement(NS_EDMX, "Reference");
+      // TODO: Which value can we use here?
+      // 
<http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml>
+      // is an external site we don't want to query each time an EDM-enabled 
client is used.
+      writer.writeAttribute("Uri", reference.getUri().toASCIIString());
+  //    writer.writeEmptyElement(NS_EDMX, "Include");
+  //    writer.writeAttribute(XML_NAMESPACE, reference.getIncludeNamespace());
+  //    writer.writeAttribute(XML_ALIAS, reference.getIncludeAlias());
+  //    writer.writeEndElement();
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/test/java/org/apache/olingo/server/core/ContentNegotiatorTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/ContentNegotiatorTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/ContentNegotiatorTest.java
index 6230a9e..5462327 100644
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/ContentNegotiatorTest.java
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/ContentNegotiatorTest.java
@@ -35,6 +35,7 @@ import org.apache.olingo.commons.api.http.HttpMethod;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataRequest;
 import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.processor.CustomContentTypeSupport;
 import org.apache.olingo.server.api.processor.EntitySetProcessor;
 import org.apache.olingo.server.api.processor.MetadataProcessor;
@@ -199,7 +200,7 @@ public class ContentNegotiatorTest {
     }
 
     @Override
-    public void init(final OData odata, final Edm edm) {}
+    public void init(final OData odata, final ServiceMetadata edm) {}
 
     @Override
     public List<ContentType> modifySupportedContentTypes(final 
List<ContentType> supportedContentTypes,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMetadataImplTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMetadataImplTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMetadataImplTest.java
new file mode 100644
index 0000000..7090f5b
--- /dev/null
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmMetadataImplTest.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.core.edm.provider;
+
+import org.apache.olingo.commons.api.ODataException;
+import org.apache.olingo.commons.api.edm.EdmEntitySetInfo;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmFunctionImportInfo;
+import org.apache.olingo.commons.api.edm.EdmMetadata;
+import org.apache.olingo.commons.api.edm.EdmSingletonInfo;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.server.api.edm.provider.EdmProvider;
+import org.apache.olingo.server.api.edm.provider.EntityContainer;
+import org.apache.olingo.server.api.edm.provider.EntitySet;
+import org.apache.olingo.server.api.edm.provider.FunctionImport;
+import org.apache.olingo.server.api.edm.provider.Schema;
+import org.apache.olingo.server.api.edm.provider.Singleton;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class EdmMetadataImplTest {
+
+  @Test
+  public void allGettersMustDeliver() {
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(new 
CustomProvider(true));
+    List<EdmEntitySetInfo> entitySetInfos = 
serviceMetadata.getEntitySetInfos();
+    assertNotNull(entitySetInfos);
+    assertEquals(2, entitySetInfos.size());
+
+    List<EdmSingletonInfo> singletonInfos = 
serviceMetadata.getSingletonInfos();
+    assertNotNull(singletonInfos);
+    assertEquals(2, singletonInfos.size());
+
+    List<EdmFunctionImportInfo> functionImportInfos = 
serviceMetadata.getFunctionImportInfos();
+    assertNotNull(functionImportInfos);
+    assertEquals(2, functionImportInfos.size());
+
+    // Cache test
+    assertTrue(entitySetInfos == serviceMetadata.getEntitySetInfos());
+    assertTrue(singletonInfos == serviceMetadata.getSingletonInfos());
+    assertTrue(functionImportInfos == 
serviceMetadata.getFunctionImportInfos());
+  }
+
+  @Test
+  public void initialProvider() {
+    EdmProvider provider = new EdmProvider() {};
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(provider);
+    assertEquals(ODataServiceVersion.V40, 
serviceMetadata.getDataServiceVersion());
+  }
+
+  @Test(expected = EdmException.class)
+  public void initialProviderEntitySetInfo() {
+    EdmProvider provider = new EdmProvider() {};
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(provider);
+    serviceMetadata.getEntitySetInfos();
+  }
+
+  @Test(expected = EdmException.class)
+  public void initialProviderSingletonInfo() {
+    EdmProvider provider = new EdmProvider() {};
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(provider);
+    serviceMetadata.getSingletonInfos();
+  }
+
+  @Test(expected = EdmException.class)
+  public void initialProviderFunctionImportInfo() {
+    EdmProvider provider = new EdmProvider() {};
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(provider);
+    serviceMetadata.getFunctionImportInfos();
+  }
+
+  @Test
+  public void emptySchemaMustNotResultInException() {
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(new 
CustomProvider(false));
+    assertNotNull(serviceMetadata.getEntitySetInfos());
+    assertEquals(0, serviceMetadata.getEntitySetInfos().size());
+
+    assertNotNull(serviceMetadata.getSingletonInfos());
+    assertEquals(0, serviceMetadata.getSingletonInfos().size());
+
+    assertNotNull(serviceMetadata.getFunctionImportInfos());
+    assertEquals(0, serviceMetadata.getFunctionImportInfos().size());
+  }
+
+  @Test
+  public void oDataExceptionsGetCaughtAndTransformed() {
+    EdmProvider provider = new EdmProvider() {
+      @Override
+      public List<Schema> getSchemas() throws ODataException {
+        throw new ODataException("msg");
+      }
+    };
+
+    EdmMetadata serviceMetadata = new EdmMetadataImpl(provider);
+    callGetEntitySetInfosAndExpectException(serviceMetadata);
+    callGetSingletonInfosAndExpectException(serviceMetadata);
+    callGetFunctionImportInfosAndExpectException(serviceMetadata);
+  }
+
+  private void callGetFunctionImportInfosAndExpectException(final EdmMetadata 
svc) {
+    try {
+      svc.getFunctionImportInfos();
+    } catch (EdmException e) {
+      assertEquals("org.apache.olingo.commons.api.ODataException: msg", 
e.getMessage());
+      return;
+    }
+    fail("Expected EdmException was not thrown");
+
+  }
+
+  private void callGetSingletonInfosAndExpectException(final EdmMetadata svc) {
+    try {
+      svc.getSingletonInfos();
+    } catch (EdmException e) {
+      assertEquals("org.apache.olingo.commons.api.ODataException: msg", 
e.getMessage());
+      return;
+    }
+    fail("Expected EdmException was not thrown");
+  }
+
+  private void callGetEntitySetInfosAndExpectException(final EdmMetadata svc) {
+    try {
+      svc.getEntitySetInfos();
+    } catch (EdmException e) {
+      assertEquals("org.apache.olingo.commons.api.ODataException: msg", 
e.getMessage());
+      return;
+    }
+    fail("Expected EdmException was not thrown");
+  }
+
+  private class CustomProvider extends EdmProvider {
+    private List<Schema> schemas;
+
+    public CustomProvider(final boolean fillSchema) {
+      schemas = new ArrayList<Schema>();
+      if (fillSchema) {
+        List<EntitySet> entitySets = new ArrayList<EntitySet>();
+        entitySets.add(new EntitySet().setName("1"));
+        entitySets.add(new EntitySet().setName("2"));
+        List<Singleton> singletons = new ArrayList<Singleton>();
+        singletons.add(new Singleton().setName("1"));
+        singletons.add(new Singleton().setName("2"));
+        List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
+        functionImports.add(new FunctionImport().setName("1"));
+        functionImports.add(new FunctionImport().setName("2"));
+        EntityContainer entityContainer =
+            new 
EntityContainer().setName("cont").setEntitySets(entitySets).setSingletons(singletons)
+                .setFunctionImports(functionImports);
+        Schema schema = new Schema().setEntityContainer(entityContainer);
+        schemas.add(schema);
+      }
+    }
+
+    @Override
+    public List<Schema> getSchemas() throws ODataException {
+      return schemas;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmServiceMetadataImplTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmServiceMetadataImplTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmServiceMetadataImplTest.java
deleted file mode 100644
index 3d08d35..0000000
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmServiceMetadataImplTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.server.core.edm.provider;
-
-import org.apache.olingo.commons.api.ODataException;
-import org.apache.olingo.commons.api.edm.EdmEntitySetInfo;
-import org.apache.olingo.commons.api.edm.EdmException;
-import org.apache.olingo.commons.api.edm.EdmFunctionImportInfo;
-import org.apache.olingo.commons.api.edm.EdmServiceMetadata;
-import org.apache.olingo.commons.api.edm.EdmSingletonInfo;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.server.api.edm.provider.EdmProvider;
-import org.apache.olingo.server.api.edm.provider.EntityContainer;
-import org.apache.olingo.server.api.edm.provider.EntitySet;
-import org.apache.olingo.server.api.edm.provider.FunctionImport;
-import org.apache.olingo.server.api.edm.provider.Schema;
-import org.apache.olingo.server.api.edm.provider.Singleton;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-public class EdmServiceMetadataImplTest {
-
-  @Test
-  public void allGettersMustDeliver() {
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(new 
CustomProvider(true));
-    List<EdmEntitySetInfo> entitySetInfos = 
serviceMetadata.getEntitySetInfos();
-    assertNotNull(entitySetInfos);
-    assertEquals(2, entitySetInfos.size());
-
-    List<EdmSingletonInfo> singletonInfos = 
serviceMetadata.getSingletonInfos();
-    assertNotNull(singletonInfos);
-    assertEquals(2, singletonInfos.size());
-
-    List<EdmFunctionImportInfo> functionImportInfos = 
serviceMetadata.getFunctionImportInfos();
-    assertNotNull(functionImportInfos);
-    assertEquals(2, functionImportInfos.size());
-
-    // Cache test
-    assertTrue(entitySetInfos == serviceMetadata.getEntitySetInfos());
-    assertTrue(singletonInfos == serviceMetadata.getSingletonInfos());
-    assertTrue(functionImportInfos == 
serviceMetadata.getFunctionImportInfos());
-  }
-
-  @Test(expected = RuntimeException.class)
-  public void getMetadataAsInputStreamIsNotImplemented() {
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(new 
CustomProvider(true));
-    serviceMetadata.getMetadata();
-  }
-
-  @Test
-  public void initialProvider() {
-    EdmProvider provider = new EdmProvider() {};
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(provider);
-    assertEquals(ODataServiceVersion.V40, 
serviceMetadata.getDataServiceVersion());
-  }
-
-  @Test(expected = EdmException.class)
-  public void initialProviderEntitySetInfo() {
-    EdmProvider provider = new EdmProvider() {};
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(provider);
-    serviceMetadata.getEntitySetInfos();
-  }
-
-  @Test(expected = EdmException.class)
-  public void initialProviderSingletonInfo() {
-    EdmProvider provider = new EdmProvider() {};
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(provider);
-    serviceMetadata.getSingletonInfos();
-  }
-
-  @Test(expected = EdmException.class)
-  public void initialProviderFunctionImportInfo() {
-    EdmProvider provider = new EdmProvider() {};
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(provider);
-    serviceMetadata.getFunctionImportInfos();
-  }
-
-  @Test
-  public void emptySchemaMustNotResultInException() {
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(new 
CustomProvider(false));
-    assertNotNull(serviceMetadata.getEntitySetInfos());
-    assertEquals(0, serviceMetadata.getEntitySetInfos().size());
-
-    assertNotNull(serviceMetadata.getSingletonInfos());
-    assertEquals(0, serviceMetadata.getSingletonInfos().size());
-
-    assertNotNull(serviceMetadata.getFunctionImportInfos());
-    assertEquals(0, serviceMetadata.getFunctionImportInfos().size());
-  }
-
-  @Test
-  public void oDataExceptionsGetCaughtAndTransformed() {
-    EdmProvider provider = new EdmProvider() {
-      @Override
-      public List<Schema> getSchemas() throws ODataException {
-        throw new ODataException("msg");
-      }
-    };
-
-    EdmServiceMetadata serviceMetadata = new EdmServiceMetadataImpl(provider);
-    callGetEntitySetInfosAndExpectException(serviceMetadata);
-    callGetSingletonInfosAndExpectException(serviceMetadata);
-    callGetFunctionImportInfosAndExpectException(serviceMetadata);
-  }
-
-  private void callGetFunctionImportInfosAndExpectException(final 
EdmServiceMetadata svc) {
-    try {
-      svc.getFunctionImportInfos();
-    } catch (EdmException e) {
-      assertEquals("org.apache.olingo.commons.api.ODataException: msg", 
e.getMessage());
-      return;
-    }
-    fail("Expected EdmException was not thrown");
-
-  }
-
-  private void callGetSingletonInfosAndExpectException(final 
EdmServiceMetadata svc) {
-    try {
-      svc.getSingletonInfos();
-    } catch (EdmException e) {
-      assertEquals("org.apache.olingo.commons.api.ODataException: msg", 
e.getMessage());
-      return;
-    }
-    fail("Expected EdmException was not thrown");
-  }
-
-  private void callGetEntitySetInfosAndExpectException(final 
EdmServiceMetadata svc) {
-    try {
-      svc.getEntitySetInfos();
-    } catch (EdmException e) {
-      assertEquals("org.apache.olingo.commons.api.ODataException: msg", 
e.getMessage());
-      return;
-    }
-    fail("Expected EdmException was not thrown");
-  }
-
-  private class CustomProvider extends EdmProvider {
-    private List<Schema> schemas;
-
-    public CustomProvider(final boolean fillSchema) {
-      schemas = new ArrayList<Schema>();
-      if (fillSchema) {
-        List<EntitySet> entitySets = new ArrayList<EntitySet>();
-        entitySets.add(new EntitySet().setName("1"));
-        entitySets.add(new EntitySet().setName("2"));
-        List<Singleton> singletons = new ArrayList<Singleton>();
-        singletons.add(new Singleton().setName("1"));
-        singletons.add(new Singleton().setName("2"));
-        List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
-        functionImports.add(new FunctionImport().setName("1"));
-        functionImports.add(new FunctionImport().setName("2"));
-        EntityContainer entityContainer =
-            new 
EntityContainer().setName("cont").setEntitySets(entitySets).setSingletons(singletons)
-                .setFunctionImports(functionImports);
-        Schema schema = new Schema().setEntityContainer(entityContainer);
-        schemas.add(schema);
-      }
-    }
-
-    @Override
-    public List<Schema> getSchemas() throws ODataException {
-      return schemas;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
index 996385f..27defff 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
@@ -18,9 +18,10 @@
  */
 package org.apache.olingo.server.tecsvc;
 
-import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataHttpHandler;
+import org.apache.olingo.server.api.ServiceMetadata;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.tecsvc.data.DataProvider;
 import org.apache.olingo.server.tecsvc.processor.TechnicalProcessor;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
@@ -33,6 +34,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 
 public class TechnicalServlet extends HttpServlet {
 
@@ -44,7 +48,8 @@ public class TechnicalServlet extends HttpServlet {
           throws ServletException, IOException {
     try {
       OData odata = OData.newInstance();
-      Edm edm = odata.createEdm(new EdmTechProvider());
+      List<EdmxReference> references = Collections.emptyList();
+      ServiceMetadata serviceMetadata = odata.createServiceMetadata(new 
EdmTechProvider(references), references);
 
       HttpSession session = req.getSession(true);
       DataProvider dataProvider = (DataProvider) 
session.getAttribute(DataProvider.class.getName());
@@ -54,7 +59,7 @@ public class TechnicalServlet extends HttpServlet {
         LOG.info("Created new data provider.");
       }
 
-      ODataHttpHandler handler = odata.createHandler(edm);
+      ODataHttpHandler handler = odata.createHandler(serviceMetadata);
       handler.register(new TechnicalProcessor(dataProvider));
       handler.process(req, resp);
     } catch (RuntimeException e) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
index 8609b0e..06eef4c 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
@@ -37,10 +37,7 @@ import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.api.http.HttpContentType;
 import org.apache.olingo.commons.api.http.HttpHeader;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.server.api.OData;
-import org.apache.olingo.server.api.ODataApplicationException;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.*;
 import org.apache.olingo.server.api.processor.EntityProcessor;
 import org.apache.olingo.server.api.processor.EntitySetProcessor;
 import org.apache.olingo.server.api.processor.PropertyProcessor;
@@ -71,7 +68,7 @@ public class TechnicalProcessor implements 
EntitySetProcessor, EntityProcessor,
   }
 
   @Override
-  public void init(final OData odata, final Edm edm) {
+  public void init(final OData odata, final ServiceMetadata edm) {
     this.odata = odata;
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
index c15727b..aadc45b 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EdmTechProvider.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.server.tecsvc.provider;
 
 import org.apache.olingo.commons.api.ODataException;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.server.api.edm.provider.Action;
 import org.apache.olingo.server.api.edm.provider.ActionImport;
@@ -38,6 +39,7 @@ import org.apache.olingo.server.api.edm.provider.Term;
 import org.apache.olingo.server.api.edm.provider.TypeDefinition;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 public class EdmTechProvider extends EdmProvider {
@@ -52,8 +54,13 @@ public class EdmTechProvider extends EdmProvider {
   private final ActionProvider actionProvider;
   private final FunctionProvider functionProvider;
   private final TypeDefinitionProvider typeDefinitionProvider;
+  private final List<EdmxReference> references;
 
   public EdmTechProvider() {
+    this(Collections.<EdmxReference>emptyList());
+  }
+
+  public EdmTechProvider(List<EdmxReference> references) {
     containerProvider = new ContainerProvider(this);
     entityTypeProvider = new EntityTypeProvider();
     complexTypeProvider = new ComplexTypeProvider();
@@ -62,6 +69,7 @@ public class EdmTechProvider extends EdmProvider {
     functionProvider = new FunctionProvider();
     typeDefinitionProvider = new TypeDefinitionProvider();
     schemaProvider = new SchemaProvider(this);
+    this.references = references;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
 
b/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
index 943b589..b42bedb 100644
--- 
a/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
+++ 
b/lib/server-tecsvc/src/test/java/org/apache/olingo/server/tecsvc/data/DataProviderTest.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.server.tecsvc.data;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.olingo.commons.api.data.Entity;
@@ -30,6 +31,7 @@ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.uri.UriParameter;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
 import org.junit.Assert;
@@ -38,7 +40,10 @@ import org.mockito.Mockito;
 
 public class DataProviderTest {
 
-  private final Edm edm = OData.newInstance().createEdm(new EdmTechProvider());
+  private final Edm edm =
+          OData.newInstance().createServiceMetadata(new EdmTechProvider(
+                          Collections.<EdmxReference>emptyList()),
+                          Collections.<EdmxReference>emptyList()).getEdm();
   private final EdmEntityContainer entityContainer = edm.getEntityContainer(
           new FullQualifiedName("olingo.odata.test1", "Container"));
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerExceptionHandlingTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerExceptionHandlingTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerExceptionHandlingTest.java
index f227f29..c0c8f18 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerExceptionHandlingTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerExceptionHandlingTest.java
@@ -24,20 +24,18 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 
+import java.util.Collections;
 import java.util.Locale;
 
 import org.apache.olingo.commons.api.ODataException;
-import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.commons.api.http.HttpMethod;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.server.api.OData;
-import org.apache.olingo.server.api.ODataApplicationException;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.*;
 import org.apache.olingo.server.api.edm.provider.EdmProvider;
 import org.apache.olingo.server.api.edm.provider.EntitySet;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.processor.MetadataProcessor;
 import org.apache.olingo.server.api.uri.UriInfo;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
@@ -50,9 +48,10 @@ public class ODataHandlerExceptionHandlingTest {
   @Before
   public void before() {
     OData odata = OData.newInstance();
-    Edm edm = odata.createEdm(new EdmTechProvider());
+    ServiceMetadata metadata = odata.createServiceMetadata(
+            new EdmTechProvider(), Collections.<EdmxReference>emptyList());
 
-    handler = new ODataHandler(odata, edm);
+    handler = new ODataHandler(odata, metadata);
   }
 
   @Test
@@ -173,14 +172,14 @@ public class ODataHandlerExceptionHandlingTest {
     request.setRawODataPath("EdmException");
 
     OData odata = OData.newInstance();
-    Edm edm = odata.createEdm(new EdmProvider() {
+    ServiceMetadata serviceMetadata = odata.createServiceMetadata(new 
EdmProvider() {
       public EntitySet getEntitySet(final FullQualifiedName entityContainer, 
final String entitySetName)
           throws ODataException {
         throw new ODataException("msg");
       }
-    });
+    }, Collections.<EdmxReference>emptyList());
 
-    ODataHandler localHandler = new ODataHandler(odata, edm);
+    ODataHandler localHandler = new ODataHandler(odata, serviceMetadata);
 
     ODataResponse response = localHandler.process(request);
     assertNotNull(response);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
index 1ae9ea3..b8c6553 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerTest.java
@@ -24,9 +24,9 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
 import java.util.Arrays;
+import java.util.Collections;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.commons.api.http.HttpContentType;
@@ -36,6 +36,8 @@ import org.apache.olingo.commons.api.http.HttpStatusCode;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataRequest;
 import org.apache.olingo.server.api.ODataResponse;
+import org.apache.olingo.server.api.ServiceMetadata;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.processor.*;
 import org.apache.olingo.server.api.uri.UriInfo;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
@@ -50,9 +52,10 @@ public class ODataHandlerTest {
   @Before
   public void before() {
     OData odata = OData.newInstance();
-    Edm edm = odata.createEdm(new EdmTechProvider());
+    ServiceMetadata metadata = odata.createServiceMetadata(
+            new EdmTechProvider(), Collections.<EdmxReference>emptyList());
 
-    handler = new ODataHandler(odata, edm);
+    handler = new ODataHandler(odata, metadata);
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index 36e3887..562787d 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -21,6 +21,7 @@ package org.apache.olingo.server.core.serializer.json;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.Arrays;
+import java.util.Collections;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.olingo.commons.api.data.ContextURL;
@@ -37,6 +38,7 @@ import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.core.data.PropertyImpl;
 import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.api.serializer.ODataSerializerOptions;
@@ -56,7 +58,8 @@ import org.mockito.Mockito;
 
 public class ODataJsonSerializerTest {
 
-  private static final Edm edm = OData.newInstance().createEdm(new 
EdmTechProvider());
+  private static final Edm edm = OData.newInstance().createServiceMetadata(
+          new EdmTechProvider(), 
Collections.<EdmxReference>emptyList()).getEdm();
   private static final EdmEntityContainer entityContainer = 
edm.getEntityContainer(
       new FullQualifiedName("olingo.odata.test1", "Container"));
   private final DataProvider data = new DataProvider();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
index f622cd1..a880c60 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
@@ -21,6 +21,7 @@ package org.apache.olingo.server.core.serializer.utils;
 import static org.junit.Assert.assertEquals;
 
 import java.util.Arrays;
+import java.util.Collections;
 
 import org.apache.olingo.commons.api.data.ContextURL;
 import org.apache.olingo.commons.api.edm.Edm;
@@ -28,6 +29,7 @@ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.uri.queryoption.ExpandItem;
 import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
 import org.apache.olingo.server.api.uri.queryoption.SelectItem;
@@ -39,7 +41,8 @@ import org.mockito.Mockito;
 
 public class ContextURLHelperTest {
 
-  private static final Edm edm = OData.newInstance().createEdm(new 
EdmTechProvider());
+  private static final Edm edm = OData.newInstance().createServiceMetadata(
+          new EdmTechProvider(), 
Collections.<EdmxReference>emptyList()).getEdm();
   private static final EdmEntityContainer entityContainer = 
edm.getEntityContainer(
       new FullQualifiedName("olingo.odata.test1", "Container"));
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/188574f5/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
index 2dbce10..8fbbf15 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
@@ -21,10 +21,12 @@ package org.apache.olingo.server.core.serializer.xml;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
@@ -33,8 +35,10 @@ import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.Target;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.edm.provider.Action;
 import org.apache.olingo.server.api.edm.provider.ActionImport;
 import org.apache.olingo.server.api.edm.provider.ComplexType;
@@ -54,32 +58,31 @@ import org.apache.olingo.server.api.edm.provider.ReturnType;
 import org.apache.olingo.server.api.edm.provider.Schema;
 import org.apache.olingo.server.api.edm.provider.Singleton;
 import org.apache.olingo.server.api.edm.provider.TypeDefinition;
+import org.apache.olingo.server.api.edmx.EdmxReference;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.SerializerException;
+import org.apache.olingo.server.core.ServiceMetadataImpl;
 import org.apache.olingo.server.core.edm.provider.EdmProviderImpl;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
 import org.junit.Test;
 
 public class MetadataDocumentTest {
 
-  @Test(expected = SerializerException.class)
-  public void metadataOnJsonResultsInException() throws Exception {
-    ODataSerializer serializer = 
OData.newInstance().createSerializer(ODataFormat.JSON);
-    serializer.metadataDocument(mock(Edm.class));
-  }
-
   @Test
   public void writeMetadataWithEmptyMockedEdm() throws Exception {
     ODataSerializer serializer = 
OData.newInstance().createSerializer(ODataFormat.XML);
+    ServiceMetadata metadata = mock(ServiceMetadata.class);
     Edm edm = mock(Edm.class);
-    serializer.metadataDocument(edm);
+    when(metadata.getEdm()).thenReturn(edm);
+    serializer.metadataDocument(metadata);
   }
 
   @Test
   public void writeMetadataWithLocalTestEdm() throws Exception {
     ODataSerializer serializer = 
OData.newInstance().createSerializer(ODataFormat.XML);
-    Edm edm = new EdmProviderImpl(new TestMetadataProvider());
-    InputStream metadata = serializer.metadataDocument(edm);
+    ServiceMetadata serviceMetadata = new 
ServiceMetadataImpl(ODataServiceVersion.V40,
+            new TestMetadataProvider(), 
Collections.<EdmxReference>emptyList());
+    InputStream metadata = serializer.metadataDocument(serviceMetadata);
     assertNotNull(metadata);
 
     String metadataString = IOUtils.toString(metadata);
@@ -147,8 +150,9 @@ public class MetadataDocumentTest {
   @Test
   public void writeMetadataWithTechnicalScenario() throws Exception {
     ODataSerializer serializer = 
OData.newInstance().createSerializer(ODataFormat.XML);
-    EdmProviderImpl edm = new EdmProviderImpl(new EdmTechProvider());
-    InputStream metadata = serializer.metadataDocument(edm);
+    ServiceMetadata serviceMetadata = new 
ServiceMetadataImpl(ODataServiceVersion.V40,
+            new TestMetadataProvider(), 
Collections.<EdmxReference>emptyList());
+    InputStream metadata = serializer.metadataDocument(serviceMetadata);
     assertNotNull(metadata);
     // The technical scenario is too big to verify. We are content for now to 
make sure we can serialize it.
     // System.out.println(StringUtils.inputStreamToString(metadata, false));

Reply via email to