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