From 722aaaf006f02d2e5c6deaaae1dcbf08a2e331e4 Mon Sep 17 00:00:00 2001 From: Tim Allison Date: Mon, 25 Mar 2024 17:06:45 -0400 Subject: [PATCH] TIKA-4224 -- add detection for 3mf (#1689) (cherry picked from commit 3ffbc04f7a1023aa8e6d5ea22d19feb2a7e61a8f) --- .../org/apache/tika/mime/tika-mimetypes.xml | 6 +++ .../microsoft/ooxml/OPCPackageDetector.java | 47 +++++++++++------- .../detect/TestContainerAwareDetector.java | 5 ++ .../test/resources/test-documents/test3mf.3mf | Bin 0 -> 28243 bytes 4 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/resources/test-documents/test3mf.3mf diff --git a/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml b/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml index 81a0af3c95..de95917bbc 100644 --- a/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml +++ b/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml @@ -2062,6 +2062,12 @@ + + https://en.wikipedia.org/wiki/3D_Manufacturing_Format + <_comment>3D manufacturing format + + + diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java index cdef864e0a..369ba475c5 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java @@ -88,6 +88,9 @@ public class OPCPackageDetector implements ZipContainerDetector { MediaType.application("vnd.openxmlformats-officedocument.spreadsheetml.template"); static final MediaType XLAM = MediaType.application("vnd.ms-excel.addin.macroEnabled.12"); static final MediaType XPS = MediaType.application("vnd.ms-xpsdocument"); + + static final MediaType THREE_MF = MediaType.application("vnd.ms-package.3dmanufacturing-3dmodel+xml"); + static final Set OOXML_HINTS = fillSet("word/document.xml", "_rels/.rels", "[Content_Types].xml", "ppt/presentation.xml", "ppt/slides/slide1.xml", "xl/workbook.xml", @@ -100,6 +103,8 @@ public class OPCPackageDetector implements ZipContainerDetector { "http://schemas.openxps.org/oxps/v1.0/fixedrepresentation"; private static final String STAR_OFFICE_6_WRITER = "application/vnd.sun.xml.writer"; + private static final String THREE_MF_DOCUMENT = + "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"; static Map OOXML_CONTENT_TYPES = new ConcurrentHashMap<>(); static { @@ -153,29 +158,37 @@ public static MediaType detectOfficeOpenXML(OPCPackage pkg) { // Check for the normal Office core document PackageRelationshipCollection core = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT); + // Otherwise check for some other Office core document types if (core.size() == 0) { core = pkg.getRelationshipsByType(PackageRelationshipTypes.STRICT_CORE_DOCUMENT); - } - if (core.size() == 0) { - core = pkg.getRelationshipsByType(PackageRelationshipTypes.VISIO_CORE_DOCUMENT); - } - if (core.size() == 0) { - core = pkg.getRelationshipsByType(XPS_DOCUMENT); - if (core.size() == 1) { - return MediaType.application("vnd.ms-xpsdocument"); + + if (core.size() == 0) { + core = pkg.getRelationshipsByType(PackageRelationshipTypes.VISIO_CORE_DOCUMENT); } - core = pkg.getRelationshipsByType(OPEN_XPS_DOCUMENT); - if (core.size() == 1) { - return MediaType.application("vnd.ms-xpsdocument"); + if (core.size() == 0) { + core = pkg.getRelationshipsByType(XPS_DOCUMENT); + if (core.size() == 1) { + return MediaType.application("vnd.ms-xpsdocument"); + } + core = pkg.getRelationshipsByType(OPEN_XPS_DOCUMENT); + if (core.size() == 1) { + return MediaType.application("vnd.ms-xpsdocument"); + } } - } - if (core.size() == 0) { - core = pkg.getRelationshipsByType( - "http://schemas.autodesk.com/dwfx/2007/relationships/documentsequence"); - if (core.size() == 1) { - return MediaType.parse("model/vnd.dwfx+xps"); + if (core.size() == 0) { + core = pkg.getRelationshipsByType( + "http://schemas.autodesk.com/dwfx/2007/relationships/documentsequence"); + if (core.size() == 1) { + return MediaType.parse("model/vnd.dwfx+xps"); + } + } + if (core.size() == 0) { + core = pkg.getRelationshipsByType(THREE_MF_DOCUMENT); + if (core.size() == 1) { + return THREE_MF; + } } } // If we didn't find a single core document of any type, skip detection diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/detect/TestContainerAwareDetector.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/detect/TestContainerAwareDetector.java index 9ad968b9c8..d35df67bf7 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/detect/TestContainerAwareDetector.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/detect/TestContainerAwareDetector.java @@ -262,6 +262,11 @@ public void testDetectODF() throws Exception { assertTypeByData("testODTnotaZipFile.odt", "text/plain"); } + @Test + public void test3MF() throws Exception { + assertTypeByData("test3mf.3mf", "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"); + assertTypeByNameAndData("test3mf.3mf", "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"); + } @Test public void testODFDifferentOrder() throws Exception { //TIKA-3356 diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/resources/test-documents/test3mf.3mf b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/resources/test-documents/test3mf.3mf new file mode 100644 index 0000000000000000000000000000000000000000..f7d0cf5a73da566202a50fb7cbf651aa63530ade GIT binary patch literal 28243 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