You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2016/08/24 20:49:00 UTC
[4/7] olingo-odata2 git commit: [OLINGO-1005] Support edmx references
in metadata
[OLINGO-1005] Support edmx references in metadata
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/546466ce
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/546466ce
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/546466ce
Branch: refs/heads/OLINGO-JPA-Fixes
Commit: 546466ceb9db7956c7eb344aa78a1afde3041744
Parents: eee4165
Author: Christian Amend <ch...@sap.com>
Authored: Tue Jun 14 17:30:41 2016 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Wed Aug 17 14:31:39 2016 +0200
----------------------------------------------------------------------
.../odata2/api/edm/provider/DataServices.java | 36 ++++++++++
.../olingo/odata2/api/ep/EntityProvider.java | 32 +++++++++
.../odata2/core/ep/BasicEntityProvider.java | 23 +++++-
.../odata2/core/ep/ProviderFacadeImpl.java | 7 ++
.../core/ep/producer/XmlMetadataProducer.java | 50 ++++++++++----
.../odata2/core/ep/BasicProviderTest.java | 73 +++++++++++++++++++-
.../ep/consumer/XmlMetadataConsumerTest.java | 70 ++++++++++++++-----
.../apache/olingo/odata2/fit/ref/BatchTest.java | 27 ++++----
8 files changed, 270 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/DataServices.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/DataServices.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/DataServices.java
index 552eb01..535a4e8 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/DataServices.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/edm/provider/DataServices.java
@@ -29,6 +29,8 @@ public class DataServices {
private List<Schema> schemas;
private String dataServiceVersion;
+ private String customEdmxVersion;
+ private List<AnnotationElement> annotationElements;
/**
* Sets the schemas for this {@link DataServices}
@@ -51,6 +53,33 @@ public class DataServices {
}
/**
+ * Sets the collection of {@link AnnotationElement} for this {@link DataServices}
+ * @param annotationElements
+ * @return {@link ComplexType} for method chaining
+ */
+ public DataServices setAnnotationElements(final List<AnnotationElement> annotationElements) {
+ this.annotationElements = annotationElements;
+ return this;
+ }
+
+ /**
+ * Sets a custom edmx version which is used in the metadata document
+ * @param customEdmxVersion
+ * @return {@link ComplexType} for method chaining
+ */
+ public DataServices setCustomEdmxVersion(String customEdmxVersion) {
+ this.customEdmxVersion = customEdmxVersion;
+ return this;
+ }
+
+ /**
+ * @return collection of {@link AnnotationElement} annotation elements
+ */
+ public List<AnnotationElement> getAnnotationElements() {
+ return annotationElements;
+ }
+
+ /**
* @return List<{@link Schema}>
*/
public List<Schema> getSchemas() {
@@ -63,4 +92,11 @@ public class DataServices {
public String getDataServiceVersion() {
return dataServiceVersion;
}
+
+ /**
+ * @return <b>String</b> custom edmx version
+ */
+ public String getCustomEdmxVersion() {
+ return customEdmxVersion;
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java
index 361a94e..438dd0b 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProvider.java
@@ -31,6 +31,7 @@ import org.apache.olingo.odata2.api.edm.Edm;
import org.apache.olingo.odata2.api.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.provider.DataServices;
import org.apache.olingo.odata2.api.edm.provider.Schema;
import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
import org.apache.olingo.odata2.api.ep.feed.ODataDeltaFeed;
@@ -78,6 +79,22 @@ public final class EntityProvider {
throws EntityProviderException;
/**
+ * Write metadata document in XML format for the given schemas and the provided predefined
+ * namespaces at the EDMX element. PredefinedNamespaces is of type
+ * Map{@literal <}prefix,namespace{@literal >} and may be null or an empty Map.
+ * <b>Important<b>
+ * This method takes edmx references into account
+ * This method will not calculate the DataServiceVersion but will instead take the version provided via the
+ * signature if no version is set the default version 2.0 is used.
+ * @param serviceMetadata
+ * @param predefinedNamespaces type of Map{@literal <}prefix,namespace{@literal >} and may be null or an empty Map
+ * @return resulting {@link ODataResponse} with written metadata content.
+ * @throws EntityProviderException if writing of data (serialization) fails
+ */
+ ODataResponse writeMetadata(final DataServices serviceMetadata,
+ final Map<String, String> predefinedNamespaces) throws EntityProviderException;
+
+ /**
* Write service document based on given {@link Edm} and <code>service root</code> as
* given content type.
*
@@ -484,6 +501,21 @@ public final class EntityProvider {
}
/**
+ * Write metadata document in XML format for the given schemas and the provided predefined
+ * namespaces at the EDMX element. PredefinedNamespaces is of type
+ * Map{@literal <}prefix,namespace{@literal >} and may be null or an empty Map.
+ *
+ * @param serviceMetadata
+ * @param predefinedNamespaces type of Map{@literal <}prefix,namespace{@literal >} and may be null or an empty Map
+ * @return resulting {@link ODataResponse} with written metadata content.
+ * @throws EntityProviderException if writing of data (serialization) fails
+ */
+ public static ODataResponse writeMetadata(final DataServices serviceMetadata,
+ final Map<String, String> predefinedNamespaces) throws EntityProviderException {
+ return createEntityProvider().writeMetadata(serviceMetadata, predefinedNamespaces);
+ }
+
+ /**
* Write service document based on given {@link Edm} and <code>service root</code> as
* given content type.
*
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/BasicEntityProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/BasicEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/BasicEntityProvider.java
index 56d34fc..7766431 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/BasicEntityProvider.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/BasicEntityProvider.java
@@ -232,12 +232,18 @@ public class BasicEntityProvider {
*/
public ODataResponse writeMetadata(final List<Schema> schemas, final Map<String, String> predefinedNamespaces)
throws EntityProviderException {
- ODataResponseBuilder builder = ODataResponse.newBuilder();
String dataServiceVersion = ODataServiceVersion.V10;
if (schemas != null) {
dataServiceVersion = calculateDataServiceVersion(schemas);
}
DataServices metadata = new DataServices().setSchemas(schemas).setDataServiceVersion(dataServiceVersion);
+ return writeMetadataInternal(predefinedNamespaces, dataServiceVersion, metadata);
+ }
+
+ private ODataResponse writeMetadataInternal(final Map<String, String> predefinedNamespaces, String dataServiceVersion,
+ DataServices metadata) throws EntityProviderException,
+ EntityProviderProducerException {
+ ODataResponseBuilder builder = ODataResponse.newBuilder();
OutputStreamWriter writer = null;
CircleStreamBuffer csb = new CircleStreamBuffer();
try {
@@ -260,6 +266,21 @@ public class BasicEntityProvider {
}
/**
+ * Writes the metadata in XML format. Predefined namespaces is of type Map{@literal <}prefix,namespace{@literal >} and
+ * may be null or an empty Map.
+ * @param serviceMetadata
+ * @param predefinedNamespaces
+ * @return resulting {@link ODataResponse} with written metadata content
+ * @throws EntityProviderException
+ */
+ public ODataResponse writeMetadata(final DataServices serviceMetadata,
+ final Map<String, String> predefinedNamespaces) throws EntityProviderException {
+ String dataServiceVersion = serviceMetadata.getDataServiceVersion() == null ? ODataServiceVersion.V20
+ : serviceMetadata.getDataServiceVersion();
+ return writeMetadataInternal(predefinedNamespaces, dataServiceVersion, serviceMetadata);
+ }
+
+ /**
* Calculates the necessary data service version for the metadata serialization
* @param schemas
* @return DataServiceversion as String
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java
index 4937e30..739513c 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImpl.java
@@ -31,6 +31,7 @@ import org.apache.olingo.odata2.api.edm.Edm;
import org.apache.olingo.odata2.api.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.provider.DataServices;
import org.apache.olingo.odata2.api.edm.provider.EdmProvider;
import org.apache.olingo.odata2.api.edm.provider.Schema;
import org.apache.olingo.odata2.api.ep.EntityProvider.EntityProviderInterface;
@@ -220,6 +221,12 @@ public class ProviderFacadeImpl implements EntityProviderInterface {
}
@Override
+ public ODataResponse writeMetadata(final DataServices seriviceMetadata,
+ final Map<String, String> predefinedNamespaces) throws EntityProviderException {
+ return create().writeMetadata(seriviceMetadata, predefinedNamespaces);
+ }
+
+ @Override
public Edm readMetadata(final InputStream inputStream, final boolean validate) throws EntityProviderException {
EdmProvider provider = new EdmxProvider().parse(inputStream, validate);
return new EdmImplProv(provider);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlMetadataProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlMetadataProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlMetadataProducer.java
index f301482..6bba219 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlMetadataProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlMetadataProducer.java
@@ -67,28 +67,48 @@ public class XmlMetadataProducer {
Map<String, String> predefinedNamespaces) throws EntityProviderException {
try {
+ String edmxNamespace = Edm.NAMESPACE_EDMX_2007_06;
+ String defaultNamespace = Edm.NAMESPACE_EDM_2008_09;
+
+ if (predefinedNamespaces == null) {
+ predefinedNamespaces = new HashMap<String, String>();
+ } else {
+ String predefinedEdmxNamespace = predefinedNamespaces.get(Edm.PREFIX_EDMX);
+ if (predefinedEdmxNamespace != null) {
+ edmxNamespace = predefinedEdmxNamespace;
+ predefinedNamespaces.remove(Edm.PREFIX_EDMX);
+ }
+ String predefinedDefaultNamespace = predefinedNamespaces.get(null);
+ if (predefinedDefaultNamespace != null) {
+ defaultNamespace = predefinedDefaultNamespace;
+ predefinedNamespaces.remove(null);
+ }
+ }
+
xmlStreamWriter.writeStartDocument();
- xmlStreamWriter.setPrefix(Edm.PREFIX_EDMX, Edm.NAMESPACE_EDMX_2007_06);
+ xmlStreamWriter.setPrefix(Edm.PREFIX_EDMX, edmxNamespace);
xmlStreamWriter.setPrefix(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
- xmlStreamWriter.setDefaultNamespace(Edm.NAMESPACE_EDM_2008_09);
- xmlStreamWriter.writeStartElement(Edm.NAMESPACE_EDMX_2007_06, "Edmx");
- xmlStreamWriter.writeAttribute("Version", "1.0");
- xmlStreamWriter.writeNamespace(Edm.PREFIX_EDMX, Edm.NAMESPACE_EDMX_2007_06);
+ xmlStreamWriter.writeStartElement(edmxNamespace, "Edmx");
+ xmlStreamWriter.writeNamespace(Edm.PREFIX_EDMX, edmxNamespace);
+ if(metadata.getCustomEdmxVersion() == null){
+ xmlStreamWriter.writeAttribute("Version", "1.0");
+ }else {
+ xmlStreamWriter.writeAttribute("Version", metadata.getCustomEdmxVersion());
+ }
+
+ for (Map.Entry<String, String> entry : predefinedNamespaces.entrySet()) {
+ xmlStreamWriter.writeNamespace(entry.getKey(), entry.getValue());
+ }
+
+ writeAnnotationElements(metadata.getAnnotationElements(), predefinedNamespaces, xmlStreamWriter);
- xmlStreamWriter.writeStartElement(Edm.NAMESPACE_EDMX_2007_06, XmlMetadataConstants.EDM_DATA_SERVICES);
+ xmlStreamWriter.writeStartElement(edmxNamespace, XmlMetadataConstants.EDM_DATA_SERVICES);
+ xmlStreamWriter.setDefaultNamespace(defaultNamespace);
xmlStreamWriter.writeAttribute(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08,
XmlMetadataConstants.EDM_DATA_SERVICE_VERSION, metadata.getDataServiceVersion());
xmlStreamWriter.writeNamespace(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
- if (predefinedNamespaces != null) {
- for (Map.Entry<String, String> entry : predefinedNamespaces.entrySet()) {
- xmlStreamWriter.writeNamespace(entry.getKey(), entry.getValue());
- }
- } else {
- predefinedNamespaces = new HashMap<String, String>();
- }
-
Collection<Schema> schemas = metadata.getSchemas();
if (schemas != null) {
for (Schema schema : schemas) {
@@ -97,7 +117,7 @@ public class XmlMetadataProducer {
xmlStreamWriter.writeAttribute(XmlMetadataConstants.EDM_SCHEMA_ALIAS, schema.getAlias());
}
xmlStreamWriter.writeAttribute(XmlMetadataConstants.EDM_SCHEMA_NAMESPACE, schema.getNamespace());
- xmlStreamWriter.writeDefaultNamespace(Edm.NAMESPACE_EDM_2008_09);
+ xmlStreamWriter.writeDefaultNamespace(defaultNamespace);
writeAnnotationAttributes(schema.getAnnotationAttributes(), predefinedNamespaces, null, xmlStreamWriter);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/BasicProviderTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/BasicProviderTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/BasicProviderTest.java
index ecefecd..031f692 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/BasicProviderTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/BasicProviderTest.java
@@ -26,14 +26,21 @@ import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import org.apache.olingo.odata2.api.ODataServiceVersion;
import org.apache.olingo.odata2.api.edm.Edm;
import org.apache.olingo.odata2.api.edm.EdmProperty;
import org.apache.olingo.odata2.api.edm.EdmTyped;
+import org.apache.olingo.odata2.api.edm.provider.AnnotationAttribute;
+import org.apache.olingo.odata2.api.edm.provider.AnnotationElement;
+import org.apache.olingo.odata2.api.edm.provider.DataServices;
import org.apache.olingo.odata2.api.edm.provider.EdmProvider;
+import org.apache.olingo.odata2.api.edm.provider.Schema;
import org.apache.olingo.odata2.api.ep.EntityProviderException;
import org.apache.olingo.odata2.api.processor.ODataResponse;
import org.apache.olingo.odata2.core.commons.ContentType;
@@ -63,7 +70,8 @@ public class BasicProviderTest extends AbstractProviderTest {
predefinedNamespaces.put("annoPrefix2", "http://annoNamespace");
predefinedNamespaces.put("annoPrefix", "http://annoNamespace");
- ODataResponse response = provider.writeMetadata(null, predefinedNamespaces);
+ List<Schema> schemas = null;
+ ODataResponse response = provider.writeMetadata(schemas, predefinedNamespaces);
assertNotNull(response);
assertNotNull(response.getEntity());
assertNull("BasicProvider should not set content header", response.getContentHeader());
@@ -131,6 +139,69 @@ public class BasicProviderTest extends AbstractProviderTest {
}
@Test
+ public void metadataWithReferences() throws Exception {
+ DataServices serviceMetadata = new DataServices();
+ List<AnnotationElement> annoElements = new ArrayList<AnnotationElement>();
+ annoElements.add(createElementWithoutInclude());
+ annoElements.add(createElementWithInclude());
+ serviceMetadata.setAnnotationElements(annoElements);
+ serviceMetadata.setDataServiceVersion(ODataServiceVersion.V20);
+ ODataResponse response = provider.writeMetadata(serviceMetadata, null);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("BasicProvider should not set content header", response.getContentHeader());
+ String metadata = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertTrue(metadata.contains(
+ "edmx:Reference xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\" Uri=\"http://someurl.com\""));
+ assertTrue(metadata.contains("edmx:Include xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\""));
+ }
+
+ @Test
+ public void metadataWithReferencesAndPredefinedNamespaces() throws Exception {
+ DataServices serviceMetadata = new DataServices();
+ serviceMetadata.setCustomEdmxVersion("4.0");
+ List<AnnotationElement> annoElements = new ArrayList<AnnotationElement>();
+ annoElements.add(createElementWithoutInclude());
+ annoElements.add(createElementWithInclude());
+ serviceMetadata.setAnnotationElements(annoElements);
+ serviceMetadata.setDataServiceVersion("4.0");
+
+ Map<String, String> predefinedNamespaces = new HashMap<String, String>();
+ predefinedNamespaces.put("edmx", "http://docs.oasis-open.org/odata/ns/edmx");
+ predefinedNamespaces.put(null, "http://docs.oasis-open.org/odata/ns/edmx");
+
+ ODataResponse response = provider.writeMetadata(serviceMetadata, predefinedNamespaces);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("BasicProvider should not set content header", response.getContentHeader());
+ String metadata = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertTrue(metadata.contains(
+ "edmx:Reference xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\" Uri=\"http://someurl.com\""));
+ assertTrue(metadata.contains("edmx:Include xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\""));
+ assertTrue(metadata.contains("edmx:Edmx xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\" Version=\"4.0\""));
+ }
+
+ private AnnotationElement createElementWithInclude() {
+ List<AnnotationAttribute> childAttributes = new ArrayList<AnnotationAttribute>();
+ childAttributes.add(new AnnotationAttribute().setName("Namespace").setText("Org.OData.Core.V1"));
+ childAttributes.add(new AnnotationAttribute().setName("Alias").setText("UI"));
+ List<AnnotationElement> childElements = new ArrayList<AnnotationElement>();
+ childElements.add(new AnnotationElement().setName("Include").setNamespace(
+ "http://docs.oasis-open.org/odata/ns/edmx").setPrefix("edmx").setAttributes(childAttributes));
+ List<AnnotationAttribute> referenceAttributes = new ArrayList<AnnotationAttribute>();
+ referenceAttributes.add(new AnnotationAttribute().setName("Uri").setText("http://someurl2.com"));
+ return new AnnotationElement().setName("Reference").setPrefix("edmx").setNamespace(
+ "http://docs.oasis-open.org/odata/ns/edmx").setAttributes(referenceAttributes).setChildElements(childElements);
+ }
+
+ private AnnotationElement createElementWithoutInclude() {
+ List<AnnotationAttribute> referenceAttributes = new ArrayList<AnnotationAttribute>();
+ referenceAttributes.add(new AnnotationAttribute().setName("Uri").setText("http://someurl.com"));
+ return new AnnotationElement().setName("Reference").setPrefix("edmx").setNamespace(
+ "http://docs.oasis-open.org/odata/ns/edmx").setAttributes(referenceAttributes);
+ }
+
+ @Test
public void writeMetadata3() throws Exception {
EdmProvider testProvider = new EdmTestProvider();
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
index 83d234f..ec8e96c 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlMetadataConsumerTest.java
@@ -26,12 +26,14 @@ import static org.junit.Assert.fail;
import java.io.InputStream;
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.List;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.olingo.odata2.api.ODataServiceVersion;
import org.apache.olingo.odata2.api.edm.Edm;
import org.apache.olingo.odata2.api.edm.EdmAction;
import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode;
@@ -177,7 +179,7 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
+ "<EntityType Name= \"Photo\"><Key><PropertyRef Name=\"Id\"/></Key><Property Name=\"Id\" Type=\"Edm.Int32\" " +
"Nullable=\"false\" MaxLength=\"Max\"/><Property Name=\"Name\" Type=\"Edm.Int32\" MaxLength=\"max\"/>"
+ "</EntityType></Schema></edmx:DataServices></edmx:Edmx>";
-
+
@Test
public void testMetadataDokumentWithWhitepaces() throws Exception {
final String metadata = ""
@@ -197,11 +199,11 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
+ " </Schema>"
+ " </edmx:DataServices>"
+ "</edmx:Edmx>";
-
+
XmlMetadataConsumer parser = new XmlMetadataConsumer();
XMLStreamReader reader = createStreamReader(metadata);
DataServices result = parser.readMetadata(reader, true);
-
+
assertEquals(1, result.getSchemas().size());
List<EntityType> entityTypes = result.getSchemas().get(0).getEntityTypes();
assertEquals(1, entityTypes.size());
@@ -211,11 +213,11 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
AnnotationElement annotationElement = annotationElements.get(0);
List<AnnotationElement> childElements = annotationElement.getChildElements();
assertEquals(2, childElements.size());
-
+
assertEquals(" value1", childElements.get(0).getText());
assertEquals("value2", childElements.get(1).getText());
}
-
+
@Test
public void testMetadataDokumentWithWhitepacesMultiline() throws Exception {
final String metadata = ""
@@ -236,11 +238,11 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
+ " </Schema>"
+ " </edmx:DataServices>"
+ "</edmx:Edmx>";
-
+
XmlMetadataConsumer parser = new XmlMetadataConsumer();
XMLStreamReader reader = createStreamReader(metadata);
DataServices result = parser.readMetadata(reader, true);
-
+
assertEquals(1, result.getSchemas().size());
List<EntityType> entityTypes = result.getSchemas().get(0).getEntityTypes();
assertEquals(1, entityTypes.size());
@@ -250,12 +252,12 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
AnnotationElement annotationElement = annotationElements.get(0);
List<AnnotationElement> childElements = annotationElement.getChildElements();
assertEquals(2, childElements.size());
-
- assertEquals(" value1\n" +
+
+ assertEquals(" value1\n" +
" long long long multiline attribute", childElements.get(0).getText());
assertEquals("value2", childElements.get(1).getText());
}
-
+
@Test
public void testMetadataDokumentWithWhitepaces2() throws Exception {
final String metadata = ""
@@ -274,11 +276,11 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
+ " </Schema>"
+ " </edmx:DataServices>"
+ "</edmx:Edmx>";
-
+
XmlMetadataConsumer parser = new XmlMetadataConsumer();
XMLStreamReader reader = createStreamReader(metadata);
DataServices result = parser.readMetadata(reader, true);
-
+
assertEquals(1, result.getSchemas().size());
List<EntityType> entityTypes = result.getSchemas().get(0).getEntityTypes();
assertEquals(1, entityTypes.size());
@@ -288,10 +290,10 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
AnnotationElement annotationElement = annotationElements.get(0);
List<AnnotationElement> childElements = annotationElement.getChildElements();
assertEquals(1, childElements.size());
-
+
assertEquals(" value1", childElements.get(0).getText());
}
-
+
@Test
public void stringValueForMaxLegthFacet() throws Exception {
XmlMetadataConsumer parser = new XmlMetadataConsumer();
@@ -736,7 +738,6 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
assertEquals(EdmSimpleTypeKind.Int32, functionImport1.getParameters().get(1).getType());
assertEquals(Boolean.FALSE, functionImport1.getParameters().get(1).getFacets().isNullable());
-
FunctionImport functionImport2 = container.getFunctionImports().get(1);
assertEquals("RoomSearch", functionImport2.getName());
assertEquals("Rooms", functionImport2.getEntitySet());
@@ -745,12 +746,12 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
assertEquals(EdmMultiplicity.MANY, functionImport2.getReturnType().getMultiplicity());
assertEquals("GET", functionImport2.getHttpMethod());
assertEquals(2, functionImport2.getParameters().size());
- assertEquals(new FullQualifiedName("RefScenario","Room"),
+ assertEquals(new FullQualifiedName("RefScenario", "Room"),
functionImport2.getReturnType().getTypeName());
assertEquals(EdmMultiplicity.MANY, functionImport2.getReturnType().getMultiplicity());
FunctionImportParameter functionImportParameter = functionImport2.getParameters().get(0);
- assertEquals("q1", functionImportParameter.getName());
+ assertEquals("q1", functionImportParameter.getName());
assertEquals(EdmSimpleTypeKind.String, functionImport2.getParameters().get(0).getType());
assertEquals(Boolean.TRUE, functionImport2.getParameters().get(0).getFacets().isNullable());
assertEquals("In", functionImportParameter.getMode());
@@ -758,7 +759,7 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
assertEquals("q2", functionImport2.getParameters().get(1).getName());
assertEquals(EdmSimpleTypeKind.Int32, functionImport2.getParameters().get(1).getType());
assertEquals(Boolean.FALSE, functionImport2.getParameters().get(1).getFacets().isNullable());
- assertEquals(null, functionImport2.getParameters().get(1).getMode());
+ assertEquals(null, functionImport2.getParameters().get(1).getMode());
FunctionImport functionImport3 = container.getFunctionImports().get(2);
assertEquals("NoParamters", functionImport3.getName());
@@ -1464,6 +1465,39 @@ public class XmlMetadataConsumerTest extends AbstractXmlConsumerTest {
}
}
+ @Test
+ public void edmxReferences() throws Exception {
+ DataServices serviceMetadata = new DataServices();
+ List<AnnotationElement> annoElements = new ArrayList<AnnotationElement>();
+ annoElements.add(createElementWithoutInclude());
+ annoElements.add(createElementWithInclude());
+ serviceMetadata.setAnnotationElements(annoElements);
+ serviceMetadata.setDataServiceVersion(ODataServiceVersion.V20);
+ ODataResponse response = EntityProvider.writeMetadata(serviceMetadata, null);
+
+ EntityProvider.readMetadata(response.getEntityAsStream(), false);
+ }
+
+ private AnnotationElement createElementWithInclude() {
+ List<AnnotationAttribute> childAttributes = new ArrayList<AnnotationAttribute>();
+ childAttributes.add(new AnnotationAttribute().setName("Namespace").setText("Org.OData.Core.V1"));
+ childAttributes.add(new AnnotationAttribute().setName("Alias").setText("UI"));
+ List<AnnotationElement> childElements = new ArrayList<AnnotationElement>();
+ childElements.add(new AnnotationElement().setName("Include").setNamespace(
+ "http://docs.oasis-open.org/odata/ns/edmx").setPrefix("edmx").setAttributes(childAttributes));
+ List<AnnotationAttribute> referenceAttributes = new ArrayList<AnnotationAttribute>();
+ referenceAttributes.add(new AnnotationAttribute().setName("Uri").setText("http://someurl2.com"));
+ return new AnnotationElement().setName("Reference").setPrefix("edmx").setNamespace(
+ "http://docs.oasis-open.org/odata/ns/edmx").setAttributes(referenceAttributes).setChildElements(childElements);
+ }
+
+ private AnnotationElement createElementWithoutInclude() {
+ List<AnnotationAttribute> referenceAttributes = new ArrayList<AnnotationAttribute>();
+ referenceAttributes.add(new AnnotationAttribute().setName("Uri").setText("http://someurl.com"));
+ return new AnnotationElement().setName("Reference").setPrefix("edmx").setNamespace(
+ "http://docs.oasis-open.org/odata/ns/edmx").setAttributes(referenceAttributes);
+ }
+
private XMLStreamReader createStreamReader(final String xml) throws XMLStreamException {
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(XMLInputFactory.IS_VALIDATING, false);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/546466ce/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java
index dec3ff8..80a2be6 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/BatchTest.java
@@ -53,25 +53,26 @@ public class BatchTest extends AbstractRefTest {
String responseBody = execute("/simple.batch");
assertFalse(responseBody
.contains("<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">"));
- assertTrue(responseBody.contains("<edmx:Edmx Version=\"1.0\""));
+ assertTrue(responseBody.contains(
+ "<edmx:Edmx xmlns:edmx=\"http://schemas.microsoft.com/ado/2007/06/edmx\" Version=\"1.0\""));
}
-
+
@Test
public void functionImportBatch() throws Exception {
- String responseBody = execute("/functionImport.batch");
- assertFalse(responseBody
- .contains("<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">"));
- assertTrue(responseBody.contains("HTTP/1.1 200 OK"));
- assertTrue(responseBody.contains("<?xml version='1.0' encoding='utf-8'?><ManagerPhoto xmlns="));
+ String responseBody = execute("/functionImport.batch");
+ assertFalse(responseBody
+ .contains("<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">"));
+ assertTrue(responseBody.contains("HTTP/1.1 200 OK"));
+ assertTrue(responseBody.contains("<?xml version='1.0' encoding='utf-8'?><ManagerPhoto xmlns="));
}
-
+
@Test
public void employeesWithFilterBatch() throws Exception {
- String responseBody = execute("/employeesWithFilter.batch");
- assertFalse(responseBody
- .contains("<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">"));
- assertTrue(responseBody.contains("HTTP/1.1 200 OK"));
- assertTrue(responseBody.contains("<d:EmployeeName>Walter Winter</d:EmployeeName>"));
+ String responseBody = execute("/employeesWithFilter.batch");
+ assertFalse(responseBody
+ .contains("<error xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">"));
+ assertTrue(responseBody.contains("HTTP/1.1 200 OK"));
+ assertTrue(responseBody.contains("<d:EmployeeName>Walter Winter</d:EmployeeName>"));
}
@Test