Index: src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java (revision 746932) +++ src/main/java/org/apache/jackrabbit/core/query/lucene/DateField.java (working copy) @@ -74,6 +74,8 @@ /** * Converts a millisecond time to a string suitable for indexing. * Supported date range is: 30 BC - 3189 + * @throws IllegalArgumentException if the given time is not + * within the supported date range. */ public static String timeToString(long time) { @@ -81,13 +83,13 @@ if (time < 0) { - throw new RuntimeException("time too early"); + throw new IllegalArgumentException("time too early"); } String s = Long.toString(time, Character.MAX_RADIX); if (s.length() > DATE_LEN) { - throw new RuntimeException("time too late"); + throw new IllegalArgumentException("time too late"); } // Pad with leading zeros Index: src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java (revision 746932) +++ src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java (working copy) @@ -49,6 +49,7 @@ import java.util.Set; import java.util.List; import java.util.ArrayList; +import java.util.Date; /** * Creates a lucene Document object from a {@link javax.jcr.Node}. @@ -505,8 +506,13 @@ protected void addCalendarValue(Document doc, String fieldName, Object internalValue) { Calendar value = (Calendar) internalValue; long millis = value.getTimeInMillis(); - doc.add(createFieldWithoutNorms(fieldName, DateField.timeToString(millis), - PropertyType.DATE)); + try { + doc.add(createFieldWithoutNorms(fieldName, DateField.timeToString(millis), + PropertyType.DATE)); + } catch (IllegalArgumentException e) { + log.warn("'{}' is outside of supported date value range.", + new Date(value.getTimeInMillis())); + } } /**