Author: mattmann
Date: Sat Oct 4 02:21:31 2014
New Revision: 1629347
URL: http://svn.apache.org/r1629347
Log:
Fix for TIKA-1369: Resolve thread safety issue in ImageMetadataExtractor.
Contributed by Vilmos Papp <[email protected]>. This closes #15.
Modified:
tika/trunk/CHANGES.txt
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java
Modified: tika/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/tika/trunk/CHANGES.txt?rev=1629347&r1=1629346&r2=1629347&view=diff
==============================================================================
--- tika/trunk/CHANGES.txt (original)
+++ tika/trunk/CHANGES.txt Sat Oct 4 02:21:31 2014
@@ -1,4 +1,7 @@
Release 1.7 - Current Development
+
+ * Thread safety issue in ImageMetadataExtractor were resolved
+ (TIKA-1369).
* The ForkParser service is now registered in Activator
(TIKA-1354).
Modified:
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java
URL:
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java?rev=1629347&r1=1629346&r2=1629347&view=diff
==============================================================================
---
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java
(original)
+++
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/image/ImageMetadataExtractor.java
Sat Oct 4 02:21:31 2014
@@ -246,7 +246,13 @@ public class ImageMetadataExtractor {
static class ExifHandler implements DirectoryHandler {
// There's a new ExifHandler for each file processed, so this is
thread safe
- private final SimpleDateFormat DATE_UNSPECIFIED_TZ = new
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ROOT);
+ private static final ThreadLocal<SimpleDateFormat> DATE_UNSPECIFIED_TZ
= new ThreadLocal<SimpleDateFormat>(){
+ @Override
+ protected SimpleDateFormat initialValue()
+ {
+ return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
+ }
+ };
public boolean supports(Class<? extends Directory> directoryType) {
return directoryType == ExifIFD0Directory.class ||
@@ -379,7 +385,7 @@ public class ImageMetadataExtractor {
// Unless we have GPS time we don't know the time zone so date
must be set
// as ISO 8601 datetime without timezone suffix (no Z or +/-)
if (original != null) {
- String datetimeNoTimeZone =
DATE_UNSPECIFIED_TZ.format(original); // Same time zone as Metadata Extractor
uses
+ String datetimeNoTimeZone =
DATE_UNSPECIFIED_TZ.get().format(original); // Same time zone as Metadata
Extractor uses
metadata.set(TikaCoreProperties.CREATED,
datetimeNoTimeZone);
metadata.set(Metadata.ORIGINAL_DATE, datetimeNoTimeZone);
}
@@ -387,7 +393,7 @@ public class ImageMetadataExtractor {
if (directory.containsTag(ExifIFD0Directory.TAG_DATETIME)) {
Date datetime =
directory.getDate(ExifIFD0Directory.TAG_DATETIME);
if (datetime != null) {
- String datetimeNoTimeZone =
DATE_UNSPECIFIED_TZ.format(datetime);
+ String datetimeNoTimeZone =
DATE_UNSPECIFIED_TZ.get().format(datetime);
metadata.set(TikaCoreProperties.MODIFIED,
datetimeNoTimeZone);
// If Date/Time Original does not exist this might be
creation date
if (metadata.get(TikaCoreProperties.CREATED) == null) {