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()));
+ }
}
/**