Author: sergiykarpenko
Date: 2011-01-25 07:19:05 -0500 (Tue, 25 Jan 2011)
New Revision: 3882
Added:
core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/usecases/
core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/usecases/TestPDFNullPointer.java
core/trunk/exo.core.component.document/src/test/resources/pfs_accapp.pdf
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSWordDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXExcelDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXPPTDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXWordDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/OpenOfficeDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PPTDocumentReader.java
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/tika/TikaDocumentReader.java
Log:
EXOJCR-1173: Wrap all Exceptions in DocumentReader.getProperites() into
DocumentReadException
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSExcelDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -45,7 +45,7 @@
{
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSSZ";
-
+
/**
* Get the application/excel mime type.
*
@@ -70,7 +70,7 @@
}
final StringBuilder builder = new StringBuilder("");
-
+
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
try
@@ -79,7 +79,7 @@
{
return "";
}
-
+
HSSFWorkbook wb;
try
{
@@ -118,7 +118,7 @@
}
else
{
- builder.append(d).append(" ");
+ builder.append(d).append(" ");
}
break;
}
@@ -202,9 +202,39 @@
*/
public Properties getProperties(InputStream is) throws IOException,
DocumentReadException
{
- POIPropertiesReader reader = new POIPropertiesReader();
- reader.readDCProperties(is);
- return reader.getProperties();
+ try
+ {
+ POIPropertiesReader reader = new POIPropertiesReader();
+ reader.readDCProperties(is);
+ return reader.getProperties();
+ }
+ catch (IOException e)
+ {
+ throw e;
+ }
+ catch (DocumentReadException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ }
+ }
+ }
}
public static boolean isCellDateFormatted(HSSFCell cell)
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSWordDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSWordDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSWordDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -67,7 +67,7 @@
{
return "";
}
-
+
HWPFDocument doc;
try
{
@@ -117,9 +117,39 @@
*/
public Properties getProperties(InputStream is) throws IOException,
DocumentReadException
{
- POIPropertiesReader reader = new POIPropertiesReader();
- reader.readDCProperties(is);
- return reader.getProperties();
+ try
+ {
+ POIPropertiesReader reader = new POIPropertiesReader();
+ reader.readDCProperties(is);
+ return reader.getProperties();
+ }
+ catch (IOException e)
+ {
+ throw e;
+ }
+ catch (DocumentReadException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ }
+ }
+ }
}
}
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXExcelDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXExcelDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXExcelDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -192,17 +192,47 @@
*/
public Properties getProperties(final InputStream is) throws IOException,
DocumentReadException
{
- POIPropertiesReader reader = new POIPropertiesReader();
- reader.readDCProperties(SecurityHelper
- .doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<XSSFWorkbook>()
+ try
+ {
+ POIPropertiesReader reader = new POIPropertiesReader();
+ reader.readDCProperties(SecurityHelper
+ .doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<XSSFWorkbook>()
+ {
+ public XSSFWorkbook run() throws Exception
+ {
+ return new XSSFWorkbook(is);
+ }
+ }));
+
+ return reader.getProperties();
+ }
+ catch (IOException e)
+ {
+ throw e;
+ }
+ catch (DocumentReadException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
{
- public XSSFWorkbook run() throws Exception
+ try
{
- return new XSSFWorkbook(is);
+ is.close();
}
- }));
-
- return reader.getProperties();
+ catch (IOException e)
+ {
+ }
+ }
+ }
}
public static boolean isCellDateFormatted(XSSFCell cell)
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXPPTDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXPPTDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXPPTDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -86,7 +86,7 @@
{
return "";
}
-
+
final XSLFPowerPointExtractor ppe;
try
{
@@ -163,43 +163,77 @@
*/
public Properties getProperties(final InputStream is) throws IOException,
DocumentReadException
{
- final POIPropertiesReader reader = new POIPropertiesReader();
try
{
- SecurityHelper.doPrivilegedExceptionAction(new
PrivilegedExceptionAction<Void>()
+ final POIPropertiesReader reader = new POIPropertiesReader();
+ try
{
- public Void run() throws Exception
+ SecurityHelper.doPrivilegedExceptionAction(new
PrivilegedExceptionAction<Void>()
{
- reader.readDCProperties(new XSLFSlideShow(OPCPackage.open(is)));
- return null;
+ public Void run() throws Exception
+ {
+ reader.readDCProperties(new XSLFSlideShow(OPCPackage.open(is)));
+ return null;
+ }
+ });
+ }
+ catch (PrivilegedActionException pae)
+ {
+ Throwable cause = pae.getCause();
+ if (cause instanceof IOException)
+ {
+ throw (IOException)cause;
}
- });
+ if (cause instanceof InvalidFormatException)
+ {
+ throw new DocumentReadException("Can't read properties from OOXML
document", cause);
+ }
+ else if (cause instanceof OpenXML4JException)
+ {
+ throw new DocumentReadException("Can't read properties from OOXML
document", cause);
+ }
+ else if (cause instanceof XmlException)
+ {
+ throw new DocumentReadException("Can't read properties from OOXML
document", cause);
+ }
+ else if (cause instanceof RuntimeException)
+ {
+ throw (RuntimeException)cause;
+ }
+ else
+ {
+ throw new RuntimeException(cause);
+ }
+ }
+ return reader.getProperties();
}
- catch (PrivilegedActionException pae)
+ catch (IOException e)
{
- Throwable cause = pae.getCause();
- if (cause instanceof InvalidFormatException)
+ throw e;
+ }
+ catch (DocumentReadException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
{
- throw new DocumentReadException("Can't read properties from OOXML
document", cause);
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ }
}
- else if (cause instanceof OpenXML4JException)
- {
- throw new DocumentReadException("Can't read properties from OOXML
document", cause);
- }
- else if (cause instanceof XmlException)
- {
- throw new DocumentReadException("Can't read properties from OOXML
document", cause);
- }
- else if (cause instanceof RuntimeException)
- {
- throw (RuntimeException)cause;
- }
- else
- {
- throw new RuntimeException(cause);
- }
}
- return reader.getProperties();
}
}
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXWordDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXWordDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/MSXWordDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -77,7 +77,7 @@
{
return "";
}
-
+
XWPFDocument doc;
try
{
@@ -137,17 +137,47 @@
*/
public Properties getProperties(final InputStream is) throws IOException,
DocumentReadException
{
- POIPropertiesReader reader = new POIPropertiesReader();
- reader.readDCProperties(SecurityHelper
- .doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<XWPFDocument>()
+ try
+ {
+ POIPropertiesReader reader = new POIPropertiesReader();
+ reader.readDCProperties(SecurityHelper
+ .doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<XWPFDocument>()
+ {
+ public XWPFDocument run() throws Exception
+ {
+ return new XWPFDocument(is);
+ }
+ }));
+
+ return reader.getProperties();
+ }
+ catch (IOException e)
+ {
+ throw e;
+ }
+ catch (DocumentReadException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
{
- public XWPFDocument run() throws Exception
+ try
{
- return new XWPFDocument(is);
+ is.close();
}
- }));
-
- return reader.getProperties();
+ catch (IOException e)
+ {
+ }
+ }
+ }
}
}
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/OpenOfficeDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/OpenOfficeDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/OpenOfficeDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -81,12 +81,12 @@
SAXParser saxParser =
SecurityHelper
.doPrivilegedParserConfigurationOrSAXExceptionAction(new
PrivilegedExceptionAction<SAXParser>()
- {
- public SAXParser run() throws Exception
{
- return saxParserFactory.newSAXParser();
- }
- });
+ public SAXParser run() throws Exception
+ {
+ return saxParserFactory.newSAXParser();
+ }
+ });
XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setFeature("http://xml.org/sax/features/validation",
false);
@@ -175,13 +175,13 @@
SAXParser saxParser =
SecurityHelper
.doPrivilegedParserConfigurationOrSAXExceptionAction(new
PrivilegedExceptionAction<SAXParser>()
- {
- public SAXParser run() throws Exception
{
- return saxParserFactory.newSAXParser();
- }
- });
-
+ public SAXParser run() throws Exception
+ {
+ return saxParserFactory.newSAXParser();
+ }
+ });
+
XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setFeature("http://xml.org/sax/features/validation",
false);
@@ -208,6 +208,10 @@
return metaHandler.getProperties();
}
+ catch (IOException e)
+ {
+ throw e;
+ }
catch (ParserConfigurationException e)
{
throw new DocumentReadException(e.getMessage(), e);
@@ -216,6 +220,12 @@
{
throw new DocumentReadException(e.getMessage(), e);
}
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
finally
{
if (is != null)
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PDFDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -80,7 +80,6 @@
*/
public String getContentAsText(final InputStream is) throws IOException,
DocumentReadException
{
-
try
{
return (String)AccessController.doPrivileged(new
PrivilegedExceptionAction<Object>()
@@ -169,35 +168,56 @@
*/
public Properties getProperties(InputStream is) throws IOException,
DocumentReadException
{
+ try
+ {
+ Properties props = null;
- Properties props = null;
+ PdfReader reader = new PdfReader(is, "".getBytes());
- PdfReader reader = new PdfReader(is, "".getBytes());
+ // Read the file metadata
+ byte[] metadata = reader.getMetadata();
- // Read the file metadata
- byte[] metadata = reader.getMetadata();
+ if (metadata != null)
+ {
+ // there is XMP metadata try exctract it
+ props = getPropertiesFromMetadata(metadata);
+ }
- if (metadata != null)
+ if (props == null)
+ {
+ // it's old pdf document version
+ props = getPropertiesFromInfo(reader.getInfo());
+ }
+ reader.close();
+ return props;
+ }
+ catch (IOException e)
{
- // there is XMP metadata try exctract it
- props = getPropertiesFromMetadata(metadata);
+ throw e;
}
-
- if (props == null)
+ catch (DocumentReadException e)
{
- // it's old pdf document version
- props = getPropertiesFromInfo(reader.getInfo());
+ throw e;
}
- reader.close();
- if (is != null)
- try
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
{
- is.close();
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ }
}
- catch (IOException e)
- {
- }
- return props;
+ }
}
/**
@@ -236,7 +256,7 @@
}
else if (cause instanceof ParserConfigurationException)
{
- throw (RuntimeException)cause;
+ throw new DocumentReadException(cause.getMessage(), cause);
}
else if (cause instanceof IOException)
{
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PPTDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PPTDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/PPTDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -60,12 +60,12 @@
}
try
{
-
+
if (is.available() == 0)
{
return "";
}
-
+
PowerPointExtractor ppe;
try
{
@@ -106,9 +106,39 @@
*/
public Properties getProperties(InputStream is) throws IOException,
DocumentReadException
{
- POIPropertiesReader reader = new POIPropertiesReader();
- reader.readDCProperties(is);
- return reader.getProperties();
+ try
+ {
+ POIPropertiesReader reader = new POIPropertiesReader();
+ reader.readDCProperties(is);
+ return reader.getProperties();
+ }
+ catch (IOException e)
+ {
+ throw e;
+ }
+ catch (DocumentReadException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ // Properties extraction is a very low priority operation, so no any exception
+ // should interrupt work.
+ throw new DocumentReadException(e.getMessage(), e);
+ }
+ finally
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ }
+ catch (IOException e)
+ {
+ }
+ }
+ }
}
}
Modified:
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/tika/TikaDocumentReader.java
===================================================================
---
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/tika/TikaDocumentReader.java 2011-01-25
11:49:39 UTC (rev 3881)
+++
core/trunk/exo.core.component.document/src/main/java/org/exoplatform/services/document/impl/tika/TikaDocumentReader.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -346,9 +346,9 @@
{
throw (IOException)cause;
}
- else if (cause instanceof RuntimeException)
+ else if (cause instanceof Exception)
{
- throw (RuntimeException)cause;
+ throw new DocumentReadException(cause.getMessage(), cause);
}
else
{
Added:
core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/usecases/TestPDFNullPointer.java
===================================================================
---
core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/usecases/TestPDFNullPointer.java
(rev 0)
+++
core/trunk/exo.core.component.document/src/test/java/org/exoplatform/services/document/test/usecases/TestPDFNullPointer.java 2011-01-25
12:19:05 UTC (rev 3882)
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2003-2011 eXo Platform SAS.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not,
see<http://www.gnu.org/licenses/>.
+ */
+package org.exoplatform.services.document.test.usecases;
+
+import org.exoplatform.services.document.DocumentReadException;
+import org.exoplatform.services.document.DocumentReader;
+import org.exoplatform.services.document.impl.DocumentReaderServiceImpl;
+import org.exoplatform.services.document.impl.PDFDocumentReader;
+import org.exoplatform.services.document.test.BaseStandaloneTest;
+import org.exoplatform.services.document.test.TestPropertiesExtracting;
+
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Created by The eXo Platform SAS.
+ *
+ * <br/>Date:
+ *
+ * @author <a href="karpenko.sergiy(a)gmail.com">Karpenko Sergiy</a>
+ * @version $Id: TestPDFNullPointer.java 111 2008-11-11 11:11:11Z serg $
+ */
+public class TestPDFNullPointer extends BaseStandaloneTest
+{
+ DocumentReaderServiceImpl service;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ service = new DocumentReaderServiceImpl(null);
+ service.addDocumentReader(new PDFDocumentReader());
+ }
+
+ public void testPDFDocumentReaderServiceXMPMetadata() throws Exception
+ {
+ InputStream is =
TestPropertiesExtracting.class.getResourceAsStream("/pfs_accapp.pdf");
+ try
+ {
+ try
+ {
+ DocumentReader rdr = service.getDocumentReader("application/pdf");
+ Properties testprops = rdr.getProperties(is);
+ fail("There must be exception.");
+ }
+ catch (DocumentReadException e)
+ {
+ //ok
+ }
+ }
+ finally
+ {
+ is.close();
+ }
+ }
+
+ private void evalProps(Properties etalon, Properties testedProps)
+ {
+ Iterator it = etalon.entrySet().iterator();
+ while (it.hasNext())
+ {
+ Map.Entry prop = (Map.Entry)it.next();
+ Object tval = testedProps.get(prop.getKey());
+ assertNotNull(prop.getKey() + " property not founded. ", tval);
+ assertEquals(prop.getKey() + " property value is incorrect",
prop.getValue(), tval);
+ }
+ assertEquals("size is incorrect", etalon.size(), testedProps.size());
+ }
+
+}
Added: core/trunk/exo.core.component.document/src/test/resources/pfs_accapp.pdf
===================================================================
(Binary files differ)
Property changes on:
core/trunk/exo.core.component.document/src/test/resources/pfs_accapp.pdf
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream