]> source.dussan.org Git - poi.git/commitdiff
Bug 56479: don't hardcode dcterms as namespace alias in the attribute, but expect...
authorDominik Stadler <centic@apache.org>
Tue, 11 Aug 2015 05:37:15 +0000 (05:37 +0000)
committerDominik Stadler <centic@apache.org>
Tue, 11 Aug 2015 05:37:15 +0000 (05:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1695212 13f79535-47bb-0310-9956-ffa450edef68

src/integrationtest/org/apache/poi/TestAllFiles.java
src/integrationtest/org/apache/poi/stress/OPCFileHandler.java [new file with mode: 0644]
src/ooxml/java/org/apache/poi/openxml4j/opc/internal/unmarshallers/PackagePropertiesUnmarshaller.java
src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestZipPackage.java [new file with mode: 0644]
src/ooxml/testcases/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java
test-data/openxml4j/dcterms_bug_56479.zip [new file with mode: 0644]

index 784b9baa2ea50386643f42420e8513c681f1d500..0a68579c16c18cdfd661d3a9d1d10dfb3b3d171c 100644 (file)
@@ -83,7 +83,10 @@ public class TestAllFiles {
         HANDLERS.put(".docx", new XWPFFileHandler());
         HANDLERS.put(".dotx", new XWPFFileHandler());
         HANDLERS.put(".docm", new XWPFFileHandler());
-        HANDLERS.put(".ooxml", new XWPFFileHandler());         // OPCPackage
+
+        // OpenXML4J files
+        HANDLERS.put(".ooxml", new OPCFileHandler());          // OPCPackage
+        HANDLERS.put(".zip", new OPCFileHandler());      // OPCPackage
 
         // Powerpoint
         HANDLERS.put(".ppt", new HSLFFileHandler());
@@ -209,7 +212,6 @@ public class TestAllFiles {
         // TODO: good to ignore?
         EXPECTED_FAILURES.add("spreadsheet/sample-beta.xlsx");
         EXPECTED_FAILURES.add("spreadsheet/49931.xls");
-        EXPECTED_FAILURES.add("openxml4j/ContentTypeHasParameters.ooxml");
 
         // This is actually a spreadsheet!
         EXPECTED_FAILURES.add("hpsf/TestRobert_Flaherty.doc");
diff --git a/src/integrationtest/org/apache/poi/stress/OPCFileHandler.java b/src/integrationtest/org/apache/poi/stress/OPCFileHandler.java
new file mode 100644 (file)
index 0000000..60f5e92
--- /dev/null
@@ -0,0 +1,73 @@
+/* ====================================================================
+   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.poi.stress;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
+import org.apache.poi.openxml4j.opc.ContentTypes;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
+import org.junit.Test;
+
+public class OPCFileHandler extends AbstractFileHandler {
+       @Override
+    public void handleFile(InputStream stream) throws Exception {
+        // ignore password protected files
+        if (POIXMLDocumentHandler.isEncrypted(stream)) return;
+
+        InputStream is = OpenXML4JTestDataSamples.openSampleStream("dcterms_bug_56479.zip");
+        OPCPackage p = OPCPackage.open(is);
+        
+        for (PackagePart part : p.getParts()) {
+            if (part.getPartName().toString().equals("/docProps/core.xml")) {
+                assertEquals(ContentTypes.CORE_PROPERTIES_PART, part.getContentType());
+            }
+            if (part.getPartName().toString().equals("/word/document.xml")) {
+                assertEquals(XWPFRelation.DOCUMENT.getContentType(), part.getContentType());
+            }
+            if (part.getPartName().toString().equals("/word/theme/theme1.xml")) {
+                assertEquals(XWPFRelation.THEME.getContentType(), part.getContentType());
+            }
+        }
+       }
+       
+    public void handleExtracting(File file) throws Exception {
+        // text-extraction is not possible currenlty for these types of files
+    }
+
+       // a test-case to test this locally without executing the full TestAllFiles
+       @Test
+       public void test() throws Exception {
+               File file = new File("test-data/openxml4j/dcterms_bug_56479.zip");
+
+               InputStream stream = new PushbackInputStream(new FileInputStream(file), 100000);
+               try {
+                       handleFile(stream);
+               } finally {
+                       stream.close();
+               }
+               
+               handleExtracting(file);
+       }
+}
\ No newline at end of file
index eb94f680e6bae58b25dd98ecbece0839259cc5a7..0ccbf30e1c96d629ea8fe300db874179aceeafed 100644 (file)
@@ -279,9 +279,9 @@ public final class PackagePropertiesUnmarshaller implements PartUnmarshaller {
                                                + "' must have the 'xsi:type' attribute present !");
 
                        // Check for the attribute value => 'dcterms:W3CDTF'
-                       if (!typeAtt.getValue().equals("dcterms:W3CDTF"))
+                       if (!typeAtt.getValue().equals(el.getPrefix() + ":W3CDTF"))
                                throw new InvalidFormatException("The element '" + elName
-                                               + "' must have the 'xsi:type' attribute with the value 'dcterms:W3CDTF' !");
+                                               + "' must have the 'xsi:type' attribute with the value '" + el.getPrefix() + ":W3CDTF', but had '" + typeAtt.getValue() + "' !");
                }
 
                // Check its children
diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestZipPackage.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestZipPackage.java
new file mode 100644 (file)
index 0000000..f8c9afe
--- /dev/null
@@ -0,0 +1,54 @@
+/* ====================================================================
+   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.poi.openxml4j.opc;
+
+import static org.junit.Assert.*;
+
+import java.io.InputStream;
+
+import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
+import org.junit.Test;
+
+public class TestZipPackage {
+    @Test
+    public void testBug56479() throws Exception {
+        InputStream is = OpenXML4JTestDataSamples.openSampleStream("dcterms_bug_56479.zip");
+        OPCPackage p = OPCPackage.open(is);
+        
+        // Check we found the contents of it
+        boolean foundCoreProps = false, foundDocument = false, foundTheme1 = false;
+        for (PackagePart part : p.getParts()) {
+            if (part.getPartName().toString().equals("/docProps/core.xml")) {
+                assertEquals(ContentTypes.CORE_PROPERTIES_PART, part.getContentType());
+                foundCoreProps = true;
+            }
+            if (part.getPartName().toString().equals("/word/document.xml")) {
+                assertEquals(XWPFRelation.DOCUMENT.getContentType(), part.getContentType());
+                foundDocument = true;
+            }
+            if (part.getPartName().toString().equals("/word/theme/theme1.xml")) {
+                assertEquals(XWPFRelation.THEME.getContentType(), part.getContentType());
+                foundTheme1 = true;
+            }
+        }
+        assertTrue("Core not found in " + p.getParts(), foundCoreProps);
+        assertFalse("Document should not be found in " + p.getParts(), foundDocument);
+        assertFalse("Theme1 should not found in " + p.getParts(), foundTheme1);
+    }
+}
index b9517ba2ef915b3493b2545e3430f22dc083de6f..b403e90d7875ae7c10aaa6bb2f49ddbb841992c9 100644 (file)
@@ -228,7 +228,7 @@ public final class TestOPCComplianceCoreProperties extends TestCase {
         */
        public void testLimitedXSITypeAttribute_PresentWithUnauthorizedValue() {
                String msg = extractInvalidFormatMessage("LimitedXSITypeAttribute_PresentWithUnauthorizedValueFAIL.docx");
-               assertEquals("The element 'modified' must have the 'xsi:type' attribute with the value 'dcterms:W3CDTF' !", msg);
+               assertEquals("The element 'modified' must have the 'xsi:type' attribute with the value 'dcterms:W3CDTF', but had 'W3CDTF' !", msg);
        }
        
     /**
diff --git a/test-data/openxml4j/dcterms_bug_56479.zip b/test-data/openxml4j/dcterms_bug_56479.zip
new file mode 100644 (file)
index 0000000..bce2019
Binary files /dev/null and b/test-data/openxml4j/dcterms_bug_56479.zip differ