ical4j / ical4j-serializer

Marshalling iCalendar and vCard to XML and JSON formats
http://www.ical4j.org/serializer/
BSD 3-Clause "New" or "Revised" License
2 stars 2 forks source link

Example from RFC 7265 doesn't parse: Unparseable date: "2008-10-06" #7

Open rfc2822 opened 2 years ago

rfc2822 commented 2 years ago

Hi,

Thanks for the updated libraries, which are used for this test:

ical4j 3.1.1 ical4j-json 0.1.4

I have tested the jCalendar from RFC 7265:

@Test
fun testJCal() {
    val module = SimpleModule()
    module.addDeserializer(Calendar::class.java, JCalMapper(null))
    val mapper = ObjectMapper()
    mapper.registerModule(module)

    // example from RFC 7265 B.1.2
    val jsonString = "[\"vcalendar\",\n" +
            " [\n" +
            "   [\"calscale\", {}, \"text\", \"GREGORIAN\"],\n" +
            "   [\"prodid\", {}, \"text\", \"-//Example Inc.//Example Calendar//EN\"],\n" +
            "   [\"version\", {}, \"text\", \"2.0\"]\n" +
            " ],\n" +
            " [\n" +
            "   [\"vevent\",\n" +
            "     [\n" +
            "       [\"dtstamp\", {}, \"date-time\", \"2008-02-05T19:12:24Z\"],\n" +
            "       [\"dtstart\", {}, \"date\", \"2008-10-06\"],\n" +
            "       [\"summary\", {}, \"text\", \"Planning meeting\"],\n" +
            "       [\"uid\", {}, \"text\", \"4088E990AD89CB3DBB484909\"]\n" +
            "     ],\n" +
            "     []\n" +
            "   ]\n" +
            " ]\n" +
            "]\n"
    val calendar = mapper.readValue(jsonString, Calendar::class.java)
}

This test throws

java.text.ParseException: Unparseable date: "2008-10-06"
java.lang.IllegalArgumentException: java.text.ParseException: Unparseable date: "2008-10-06"
    at org.mnode.ical4j.json.JCalMapper.deserialize(JCalMapper.java:56)
    at org.mnode.ical4j.json.JCalMapper.deserialize(JCalMapper.java:19)
    at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
    at at.bitfire.ical4android.Ical4jTest.testJCal(Ical4jTest.kt:137)
        …
Caused by: java.text.ParseException: Unparseable date: "2008-10-06"
    at java.base/java.text.DateFormat.parse(DateFormat.java:395)
    at net.fortuna.ical4j.model.Date.<init>(Date.java:176)
    at net.fortuna.ical4j.model.property.DateProperty.setValue(DateProperty.java:137)
    at net.fortuna.ical4j.model.property.DtStart.<init>(DtStart.java:157)
    at net.fortuna.ical4j.model.property.DtStart$Factory.createProperty(DtStart.java:203)
    at net.fortuna.ical4j.model.PropertyBuilder.build(PropertyBuilder.java:63)
    at org.mnode.ical4j.json.JCalMapper.parseProperty(JCalMapper.java:113)
    at org.mnode.ical4j.json.JCalMapper.parseComponent(JCalMapper.java:69)
    at org.mnode.ical4j.json.JCalMapper.deserialize(JCalMapper.java:54)
    ... 56 more

Seems that the date format (with hyphens) is not supported?

benfortuna commented 2 years ago

Yup, I haven't looked at the value representation differences for JCal yet, so it probably isn't going to work so well.

I will focus next release on handling the different formats for JCal as specified in section 3.6:

https://datatracker.ietf.org/doc/html/rfc7265#section-3.6

benfortuna commented 2 years ago

New release 0.1.5 includes support for JCal date, date-time, time and utc-offset formats. More complex formats such as period and recurrence yet to be implemented.