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 2013/09/19 10:58:10 UTC
git commit: Fix for OLINGO-20
Updated Branches:
refs/heads/master 61ab0780b -> b591a99a8
Fix for OLINGO-20
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/b591a99a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/b591a99a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/b591a99a
Branch: refs/heads/master
Commit: b591a99a8aa479b2f3a3e0a9ed2883b2cb528f13
Parents: 61ab078
Author: Michael Bolz <mi...@apache.org>
Authored: Thu Sep 19 10:48:11 2013 +0200
Committer: Michael Bolz <mi...@apache.org>
Committed: Thu Sep 19 10:48:11 2013 +0200
----------------------------------------------------------------------
.../core/ep/consumer/XmlEntryConsumer.java | 32 +--------
.../core/ep/consumer/XmlEntityConsumerTest.java | 73 ++++++++++++++++----
2 files changed, 59 insertions(+), 46 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/b591a99a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
index a71b986..996df2a 100644
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
+++ b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
@@ -65,7 +65,6 @@ import org.apache.olingo.odata2.core.uri.ExpandSelectTreeNodeImpl;
*/
public class XmlEntryConsumer {
- private Map<String, String> foundPrefix2NamespaceUri;
private ODataEntryImpl readEntryResult;
private Map<String, Object> properties;
private MediaMetadataImpl mediaMetadata;
@@ -109,11 +108,9 @@ public class XmlEntryConsumer {
mediaMetadata = new MediaMetadataImpl();
entryMetadata = new EntryMetadataImpl();
expandSelectTree = new ExpandSelectTreeNodeImpl();
- foundPrefix2NamespaceUri = new HashMap<String, String>();
readEntryResult = new ODataEntryImpl(properties, mediaMetadata, entryMetadata, expandSelectTree);
typeMappings = EntityTypeMapping.create(readProperties.getTypeMappings());
- foundPrefix2NamespaceUri.putAll(readProperties.getValidatedPrefixNamespaceUris());
}
private void handleStartedTag(final XMLStreamReader reader, final EntityInfoAggregator eia, final EntityProviderReadProperties readProperties)
@@ -205,32 +202,10 @@ public class XmlEntryConsumer {
private void readEntry(final XMLStreamReader reader) throws EntityProviderException, XMLStreamException {
reader.require(XMLStreamConstants.START_ELEMENT, Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_ENTRY);
- extractNamespacesFromTag(reader);
final String etag = reader.getAttributeValue(Edm.NAMESPACE_M_2007_08, FormatXml.M_ETAG);
entryMetadata.setEtag(etag);
}
- private void extractNamespacesFromTag(final XMLStreamReader reader) throws EntityProviderException {
- // collect namespaces
- int namespaceCount = reader.getNamespaceCount();
- for (int i = 0; i < namespaceCount; i++) {
- String namespacePrefix = reader.getNamespacePrefix(i);
- String namespaceUri = reader.getNamespaceURI(i);
-
- foundPrefix2NamespaceUri.put(namespacePrefix, namespaceUri);
- }
- }
-
- private void checkAllMandatoryNamespacesAvailable() throws EntityProviderException {
- if (!foundPrefix2NamespaceUri.containsValue(Edm.NAMESPACE_D_2007_08)) {
- throw new EntityProviderException(EntityProviderException.INVALID_NAMESPACE.addContent(Edm.NAMESPACE_D_2007_08));
- } else if (!foundPrefix2NamespaceUri.containsValue(Edm.NAMESPACE_M_2007_08)) {
- throw new EntityProviderException(EntityProviderException.INVALID_NAMESPACE.addContent(Edm.NAMESPACE_M_2007_08));
- } else if (!foundPrefix2NamespaceUri.containsValue(Edm.NAMESPACE_ATOM_2005)) {
- throw new EntityProviderException(EntityProviderException.INVALID_NAMESPACE.addContent(Edm.NAMESPACE_ATOM_2005));
- }
- }
-
/**
*
* @param reader
@@ -431,7 +406,7 @@ public class XmlEntryConsumer {
private EntityProviderReadProperties createInlineProperties(final EntityProviderReadProperties readProperties, final EdmNavigationProperty navigationProperty) throws EntityProviderException {
final OnReadInlineContent callback = readProperties.getCallback();
- EntityProviderReadProperties currentReadProperties = EntityProviderReadProperties.initFrom(readProperties).addValidatedPrefixes(foundPrefix2NamespaceUri).build();
+ EntityProviderReadProperties currentReadProperties = EntityProviderReadProperties.initFrom(readProperties).build();
if (callback == null) {
return currentReadProperties;
} else {
@@ -528,10 +503,6 @@ public class XmlEntryConsumer {
private void readContent(final XMLStreamReader reader, final EntityInfoAggregator eia) throws EntityProviderException, XMLStreamException, EdmException {
reader.require(XMLStreamConstants.START_ELEMENT, Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_CONTENT);
- extractNamespacesFromTag(reader);
-
- checkAllMandatoryNamespacesAvailable();
-
final String contentType = reader.getAttributeValue(null, FormatXml.ATOM_TYPE);
final String sourceLink = reader.getAttributeValue(null, FormatXml.ATOM_SRC);
@@ -562,7 +533,6 @@ public class XmlEntryConsumer {
private void readProperties(final XMLStreamReader reader, final EntityInfoAggregator entitySet) throws XMLStreamException, EdmException, EntityProviderException {
// validate namespace
- checkAllMandatoryNamespacesAvailable();
reader.require(XMLStreamConstants.START_ELEMENT, Edm.NAMESPACE_M_2007_08, FormatXml.M_PROPERTIES);
if (entitySet.getEntityType().hasStream()) {
// external properties
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/b591a99a/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
----------------------------------------------------------------------
diff --git a/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java b/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
index 8672744..bf9ebeb 100644
--- a/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
+++ b/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
@@ -100,7 +100,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
" </d:Location>" +
" <d:Age>52</d:Age>" +
" <d:EntryDate>1999-01-01T00:00:00</d:EntryDate>" +
- " <d:ImageUrl>/male_1_WinterW.jpg</d:ImageUrl>" +
+ " <d:ImageUrl>/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg</d:ImageUrl>" +
" </m:properties>" +
"</entry>";
@@ -708,7 +708,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
}
/**
- * Reads an inline Room at an Employee with specially formatted XML (see issue 92).
+ * Reads an inline Room at an Employee with specially formatted XML (see issue ODATAFORSAP-92).
*/
@Test
public void readWithInlineContentEmployeeRoomEntrySpecialXml() throws Exception {
@@ -736,7 +736,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
/**
* Reads an employee with inlined but <code>NULL</code> room navigation property
- * (which has {@link org.apache.olingo.odata2.api.edm.EdmMultiplicity#ONE EdmMultiplicity#ONE}).
+ * (which has {@link com.sap.core.odata.api.edm.EdmMultiplicity#ONE EdmMultiplicity#ONE}).
*/
@Test
public void readWithInlineContentEmployeeNullRoomEntry() throws Exception {
@@ -759,7 +759,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
/**
* Reads an employee with inlined but <code>NULL</code> room navigation property
- * (which has {@link org.apache.olingo.odata2.api.edm.EdmMultiplicity#ONE EdmMultiplicity#ONE}).
+ * (which has {@link com.sap.core.odata.api.edm.EdmMultiplicity#ONE EdmMultiplicity#ONE}).
*/
@Test
public void readWithInlineContentEmployeeNullRoomEntrySpecialXmlFormat() throws Exception {
@@ -782,7 +782,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
/**
* Reads a room with inlined but <code>NULL</code> employees navigation property
- * (which has {@link org.apache.olingo.odata2.api.edm.EdmMultiplicity#MANY EdmMultiplicity#MANY}).
+ * (which has {@link com.sap.core.odata.api.edm.EdmMultiplicity#MANY EdmMultiplicity#MANY}).
*/
@Test
public void readWithInlineContentRoomNullEmployeesEntry() throws Exception {
@@ -1023,6 +1023,49 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
assertNotNull(result);
}
+
+ @Test
+ public void validationOfNamespaceAtPropertiesSuccess() throws Exception {
+ String roomWithValidNamespaces =
+ "<?xml version='1.0' encoding='UTF-8'?>" +
+ "<entry xmlns=\"http://www.w3.org/2005/Atom\" xml:base=\"http://localhost:19000/test/\">" +
+ " <id>http://localhost:19000/test/Rooms('1')</id>" +
+ " <title type=\"text\">Room 1</title>" +
+ " <updated>2013-01-11T13:50:50.541+01:00</updated>" +
+ " <content type=\"application/xml\">" +
+ " <m:properties xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">" +
+ " <d:Id xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\">1</d:Id>" +
+ " </m:properties>" +
+ " </content>" +
+ "</entry>";
+
+ EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+ InputStream reqContent = createContentAsStream(roomWithValidNamespaces);
+ XmlEntityConsumer xec = new XmlEntityConsumer();
+ ODataEntry result = xec.readEntry(entitySet, reqContent, EntityProviderReadProperties.init().mergeSemantic(true).build());
+ assertNotNull(result);
+ }
+
+ @Test(expected=EntityProviderException.class)
+ public void validationOfNamespaceAtTagsMissing() throws Exception {
+ String roomWithValidNamespaces =
+ "<?xml version='1.0' encoding='UTF-8'?>" +
+ "<entry xmlns=\"http://www.w3.org/2005/Atom\" xml:base=\"http://localhost:19000/test/\">" +
+ " <id>http://localhost:19000/test/Rooms('1')</id>" +
+ " <title type=\"text\">Room 1</title>" +
+ " <updated>2013-01-11T13:50:50.541+01:00</updated>" +
+ " <content type=\"application/xml\">" +
+ " <m:properties>" +
+ " <d:Id>1</d:Id>" +
+ " </m:properties>" +
+ " </content>" +
+ "</entry>";
+
+ EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+ InputStream reqContent = createContentAsStream(roomWithValidNamespaces);
+ readAndExpectException(entitySet, reqContent, EntityProviderException.EXCEPTION_OCCURRED.addContent("WstxParsingException"));
+ }
+
/**
* Use different namespace prefixes for <code>metadata (m)</code> and <code>data (d)</code>.
*
@@ -1604,7 +1647,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@SuppressWarnings("unchecked")
@@ -1639,7 +1682,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
/**
@@ -1677,7 +1720,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@Test
@@ -1749,7 +1792,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@SuppressWarnings("unchecked")
@@ -1789,7 +1832,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
assertEquals("69124", city.get("PostalCode"));
assertEquals("Heidelberg", city.get("CityName"));
assertEquals(new Date(915148800000l), properties.get("EntryDate"));
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@SuppressWarnings("unchecked")
@@ -1821,7 +1864,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@SuppressWarnings("unchecked")
@@ -1853,7 +1896,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@SuppressWarnings("unchecked")
@@ -1885,7 +1928,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Calendar entryDate = (Calendar) properties.get("EntryDate");
assertEquals(915148800000L, entryDate.getTimeInMillis());
assertEquals(TimeZone.getTimeZone("GMT"), entryDate.getTimeZone());
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@Test(expected = EntityProviderException.class)
@@ -1954,7 +1997,7 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
assertEquals("Heidelberg", city.get("CityName"));
assertEquals(Short.valueOf("52"), properties.get("Age"));
assertEquals(Long.valueOf(915148800000L), properties.get("EntryDate"));
- assertEquals("/male_1_WinterW.jpg", properties.get("ImageUrl"));
+ assertEquals("/SAP/PUBLIC/BC/NWDEMO_MODEL/IMAGES/male_1_WinterW.jpg", properties.get("ImageUrl"));
}
@Test
@@ -2142,4 +2185,4 @@ public class XmlEntityConsumerTest extends AbstractConsumerTest {
Map<String, Object> properties = result.getProperties();
assertEquals(9, properties.size());
}
-}
+}
\ No newline at end of file