You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2017/10/18 12:24:39 UTC
svn commit: r1812502 - in /sling/trunk/bundles/jcr/contentparser/src:
main/java/org/apache/sling/jcr/contentparser/impl/ParserHelper.java
test/java/org/apache/sling/jcr/contentparser/impl/JsonContentParserTest.java
Author: sseifert
Date: Wed Oct 18 12:24:39 2017
New Revision: 1812502
URL: http://svn.apache.org/viewvc?rev=1812502&view=rev
Log:
SLING-7185 Content Parser: Support for ISO-8601 (patch provided by Jason E Bailey)
closes #261
Modified:
sling/trunk/bundles/jcr/contentparser/src/main/java/org/apache/sling/jcr/contentparser/impl/ParserHelper.java
sling/trunk/bundles/jcr/contentparser/src/test/java/org/apache/sling/jcr/contentparser/impl/JsonContentParserTest.java
Modified: sling/trunk/bundles/jcr/contentparser/src/main/java/org/apache/sling/jcr/contentparser/impl/ParserHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentparser/src/main/java/org/apache/sling/jcr/contentparser/impl/ParserHelper.java?rev=1812502&r1=1812501&r2=1812502&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentparser/src/main/java/org/apache/sling/jcr/contentparser/impl/ParserHelper.java (original)
+++ sling/trunk/bundles/jcr/contentparser/src/main/java/org/apache/sling/jcr/contentparser/impl/ParserHelper.java Wed Oct 18 12:24:39 2017
@@ -30,6 +30,7 @@ import java.util.Set;
import javax.json.JsonObject;
import org.apache.commons.lang3.StringUtils;
+import org.apache.jackrabbit.util.ISO8601;
import org.apache.sling.jcr.contentparser.ParseException;
import org.apache.sling.jcr.contentparser.ParserOptions;
@@ -67,16 +68,21 @@ class ParserHelper {
public Calendar tryParseCalendar(String value) {
if (options.isDetectCalendarValues() && !StringUtils.isBlank(value)) {
- synchronized (calendarFormat) {
- try {
+ // 1st try: parse with ISO-8601 format first
+ Calendar calendar = ISO8601.parse(value);
+ if (calendar != null) {
+ return calendar;
+ }
+ // 2nd try: parse with ECMA date format which is used by Sling GET servlet
+ calendar = Calendar.getInstance();
+ try {
+ synchronized (calendarFormat) {
Date date = calendarFormat.parse(value);
- Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
- return calendar;
- }
- catch (java.text.ParseException ex) {
- // ignore
}
+ return calendar;
+ } catch (java.text.ParseException ex) {
+ // ignore
}
}
return null;
Modified: sling/trunk/bundles/jcr/contentparser/src/test/java/org/apache/sling/jcr/contentparser/impl/JsonContentParserTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentparser/src/test/java/org/apache/sling/jcr/contentparser/impl/JsonContentParserTest.java?rev=1812502&r1=1812501&r2=1812502&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentparser/src/test/java/org/apache/sling/jcr/contentparser/impl/JsonContentParserTest.java (original)
+++ sling/trunk/bundles/jcr/contentparser/src/test/java/org/apache/sling/jcr/contentparser/impl/JsonContentParserTest.java Wed Oct 18 12:24:39 2017
@@ -107,6 +107,28 @@ public class JsonContentParserTest {
assertEquals(11, calendar.get(Calendar.MINUTE));
assertEquals(24, calendar.get(Calendar.SECOND));
}
+
+ @Test
+ public void testIso8601Calendar() throws Exception {
+ ContentParser underTest = ContentParserFactory.create(ContentType.JSON,
+ new ParserOptions().detectCalendarValues(true));
+ ContentElement content = parse(underTest, file);
+
+ Map<String, Object> props = content.getChild("jcr:content").getProperties();
+
+ Calendar calendar = (Calendar) props.get("dateISO8601String");
+ assertNotNull(calendar);
+
+ calendar.setTimeZone(TimeZone.getTimeZone("GMT+2"));
+
+ assertEquals(2014, calendar.get(Calendar.YEAR));
+ assertEquals(4, calendar.get(Calendar.MONTH) + 1);
+ assertEquals(22, calendar.get(Calendar.DAY_OF_MONTH));
+
+ assertEquals(15, calendar.get(Calendar.HOUR_OF_DAY));
+ assertEquals(11, calendar.get(Calendar.MINUTE));
+ assertEquals(24, calendar.get(Calendar.SECOND));
+ }
@Test
public void testUTF8Chars() throws Exception {