You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/07/27 20:07:17 UTC

svn commit: r1754338 - in /pdfbox/trunk/xmpbox/src: main/java/org/apache/xmpbox/DateConverter.java main/java/org/apache/xmpbox/type/TypeMapping.java test/java/org/apache/xmpbox/DateConverterTest.java

Author: tilman
Date: Wed Jul 27 20:07:16 2016
New Revision: 1754338

URL: http://svn.apache.org/viewvc?rev=1754338&view=rev
Log:
PDFBOX-3439: avoid another exception if seconds are missing, which is valid ISO8601 but not xsd:datetime; improve error message

Modified:
    pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java
    pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/TypeMapping.java
    pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java

Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java?rev=1754338&r1=1754337&r2=1754338&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/DateConverter.java Wed Jul 27 20:07:16 2016
@@ -365,20 +365,23 @@ public final class DateConverter
 
         if (timeZoneString != null)
         {
-            
-            Calendar cal = javax.xml.bind.DatatypeConverter.parseDateTime(
-                        dateString.substring(0, dateString.indexOf(timeZoneString))
-                    );
-            
+            // can't use parseDateTime immediately, first do handling for time that has no seconds
+            int teeIndex = dateString.indexOf('T');
+            int tzIndex = dateString.indexOf(timeZoneString);
+            String toParse = dateString.substring(0, tzIndex);
+            if (tzIndex - teeIndex == 6)
+            {
+                toParse = dateString.substring(0, tzIndex) + ":00";
+            }
+            Calendar cal = javax.xml.bind.DatatypeConverter.parseDateTime(toParse);
+
             TimeZone z = TimeZone.getTimeZone(timeZoneString);
-            cal.setTimeZone(z);
-            
+            cal.setTimeZone(z);            
             return cal;
         }
         else
         {
-            // can't use parseDateTime immediately, 
-            // first do handling for time that has no seconds
+            // can't use parseDateTime immediately, first do handling for time that has no seconds
             int teeIndex = dateString.indexOf('T');
             if (teeIndex == -1)
             {

Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/TypeMapping.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/TypeMapping.java?rev=1754338&r1=1754337&r2=1754338&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/TypeMapping.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/type/TypeMapping.java Wed Jul 27 20:07:16 2016
@@ -176,40 +176,40 @@ public final class TypeMapping
         // constructor parameters
         Object[] params = new Object[] { metadata, nsuri, prefix, name, value };
         // type
+        Class<? extends AbstractSimpleProperty> clz =
+                type.getImplementingClass().asSubclass(AbstractSimpleProperty.class);
         try
         {
-            Class<? extends AbstractSimpleProperty> clz = type.getImplementingClass().asSubclass(
-                    AbstractSimpleProperty.class);
             Constructor<? extends AbstractSimpleProperty> cons = clz.getConstructor(SIMPLEPROPERTYCONSTPARAMS);
             return cons.newInstance(params);
         }
         catch (NoSuchMethodError e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
         catch (IllegalArgumentException e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
         catch (InstantiationException e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
         catch (IllegalAccessException e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
         catch (InvocationTargetException e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
         catch (SecurityException e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
         catch (NoSuchMethodException e)
         {
-            throw new IllegalArgumentException("Failed to instanciate property", e);
+            throw new IllegalArgumentException("Failed to instanciate " + clz.getSimpleName() + " property with value " + value, e);
         }
     }
 

Modified: pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java?rev=1754338&r1=1754337&r2=1754338&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java (original)
+++ pdfbox/trunk/xmpbox/src/test/java/org/apache/xmpbox/DateConverterTest.java Wed Jul 27 20:07:16 2016
@@ -57,6 +57,8 @@ public class DateConverterTest
         //Test missing seconds
         assertEquals(DateConverter.toCalendar("2015-12-08T12:07:00-05:00"),
                      DateConverter.toCalendar("2015-12-08T12:07-05:00"));
+        assertEquals(DateConverter.toCalendar("2011-11-20T10:09:00Z"),
+                     DateConverter.toCalendar("2011-11-20T10:09Z"));
         
         // Test some time zone offsets
         jaxbCal = javax.xml.bind.DatatypeConverter.parseDateTime("2015-02-02T16:37:19.192Z");