[OLINGO-428] Fixed optional alias attribute for Schema

This commit is contained in:
mibo 2014-10-14 09:49:20 +02:00
parent c9ce087e99
commit 3b9eb2fb8a
2 changed files with 47 additions and 11 deletions

View File

@ -79,6 +79,8 @@ public class MetadataDocumentXmlSerializer {
private static final String XML_TARGET_NAMESPACE = "TargetNamespace";
private static final String XML_QUALIFIER = "Qualifier";
private static final String URI = "Uri";
private static final String SCHEMA = "Schema";
private static final String DATA_SERVICES = "DataServices";
private final ServiceMetadata serviceMetadata;
@ -88,8 +90,8 @@ public class MetadataDocumentXmlSerializer {
private final static String NS_EDM = "http://docs.oasis-open.org/odata/ns/edm";
public MetadataDocumentXmlSerializer(final ServiceMetadata edm) {
this.serviceMetadata = edm;
public MetadataDocumentXmlSerializer(final ServiceMetadata serviceMetadata) {
this.serviceMetadata = serviceMetadata;
}
public void writeMetadataDocument(final XMLStreamWriter writer) throws XMLStreamException {
@ -108,7 +110,7 @@ public class MetadataDocumentXmlSerializer {
private void appendDataServices(final XMLStreamWriter writer) throws XMLStreamException {
writer.setDefaultNamespace(NS_EDM);
writer.writeStartElement(NS_EDMX, "DataServices");
writer.writeStartElement(NS_EDMX, DATA_SERVICES);
for (EdmSchema schema : serviceMetadata.getEdm().getSchemas()) {
appendSchema(writer, schema);
}
@ -116,10 +118,12 @@ public class MetadataDocumentXmlSerializer {
}
private void appendSchema(final XMLStreamWriter writer, final EdmSchema schema) throws XMLStreamException {
writer.writeStartElement(NS_EDM, "Schema");
writer.writeStartElement(NS_EDM, SCHEMA);
writer.writeDefaultNamespace(NS_EDM);
writer.writeAttribute(XML_NAMESPACE, schema.getNamespace());
writer.writeAttribute(XML_ALIAS, schema.getAlias());
if(schema.getAlias() != null) {
writer.writeAttribute(XML_ALIAS, schema.getAlias());
}
// EnumTypes
appendEnumTypes(writer, schema.getEnumTypes());

View File

@ -18,6 +18,7 @@
*/
package org.apache.olingo.server.core.serializer.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@ -257,14 +258,45 @@ public class MetadataDocumentTest {
}
/**
* <code>
* <edmx:Reference Uri="http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml">
* <edmx:Include Namespace="Org.OData.Core.V1" Alias="Core"/>
* </edmx:Reference>
* </code>
* Write simplest (empty) Schema.
*
* @return default emdx reference
* @throws Exception
*/
@Test
public void writeMetadataWithEmptySchema() throws Exception {
ODataSerializer serializer = OData.newInstance().createSerializer(ODataFormat.XML);
List<EdmxReference> edmxReferences = Collections.emptyList();
ServiceMetadata serviceMetadata = new ServiceMetadataImpl(ODataServiceVersion.V40,
new EdmProvider() {
@Override
public List<Schema> getSchemas() throws ODataException {
return Arrays.asList(new Schema().setNamespace("MyNamespace"));
}
},
edmxReferences);
InputStream metadata = serializer.metadataDocument(serviceMetadata);
assertNotNull(metadata);
String metadataString = IOUtils.toString(metadata);
assertEquals("<?xml version='1.0' encoding='UTF-8'?>" +
"<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">" +
"<edmx:DataServices>" +
"<Schema xmlns=\"http://docs.oasis-open.org/odata/ns/edm\" Namespace=\"MyNamespace\"/>" +
"</edmx:DataServices>" +
"</edmx:Edmx>",
metadataString);
}
/**
* <code>
* <edmx:Reference Uri="http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml">
* <edmx:Include Namespace="Org.OData.Core.V1" Alias="Core"/>
* </edmx:Reference>
* </code>
*
* @return default emdx reference
*/
private List<EdmxReference> getEdmxReferences() {
List<EdmxReference> edmxReferences = new ArrayList<EdmxReference>();
EdmxReferenceImpl reference = new EdmxReferenceImpl(