if the performances are the same we can, I guess doing a contains('-')
is enough to switch between two formatters. Issue on j7 was there was
no built-in way to have this pattern (the SimpleDateFormat hack you
sometimes see *doesn't* work). Now we are on j8 I guess you are right
and can support both OOTB.Romain Manni-Bucau @rmannibucau | Blog | Old Blog | Github | LinkedIn 2017-10-14 16:09 GMT+02:00 Paul Carter-Brown <[email protected]>: > Hi Romain, > > Any way we can allow it to happily parse boih long and short ISO 8601 > strings. Technically its possible but would you have an objection? The > issue is that less and less people are using the short format in JSON due > to the default way javascript maps date to string. > > On Sat, Oct 14, 2017 at 3:32 PM, Romain Manni-Bucau <[email protected]> > wrote: > >> Hi Paul, >> >> answered, story short we should just import the ones from jsonb >> modules (all are there I think) now master is java 8 - was the only >> reason why it was not in mapper, because mapper was java 7. >> >> A small side note: we can probably not break the java.util.Date >> formatter which uses short iso8061 pattern instead of the long one. >> >> Romain Manni-Bucau >> @rmannibucau | Blog | Old Blog | Github | LinkedIn >> >> >> 2017-10-14 15:10 GMT+02:00 Paul Carter-Brown <paul.carter-brown@smilecoms. >> com>: >> > Hi Romain, >> > >> > With JDK 1.8 becoming mainstream there will be a lot more use of >> > java.time.Instant as the standard way of handling dates as opposed to >> > java.util.date. In addition, rest services are standardising more and >> more >> > on the ISO 8061 date format (e.g. 2007-12-03T17:15:30+03:00). I thus >> > believe that Johnzon should support this out of the box In this regard >> > I've created a pull request for this functionality so it can be included >> in >> > future TomEE releases https://github.com/apache/johnzon/pull/13 >> > >> > I've use my fork on TomEE 7.0.4 and it now natively works with POJO's >> using >> > Instant data type >> > >> > Paul >> > >> > On 14 October 2017 at 11:07, Romain Manni-Bucau <[email protected]> >> > wrote: >> > >> >> that was the question ;) >> >> >> >> you can extend JohnzonProvider and pass it the mapper instance you >> >> want - pre configured. >> >> >> >> Romain Manni-Bucau >> >> @rmannibucau | Blog | Old Blog | Github | LinkedIn >> >> >> >> >> >> 2017-10-14 10:39 GMT+02:00 Paul Carter-Brown >> <paul.carter-brown@smilecoms. >> >> com>: >> >> > Yea bit of a false positive I'm afraid. I ended up getting it to be >> used >> >> in >> >> > a manual mapping operation and saw it was being called but >> unfortunately >> >> > its not being used when called via jax-rs >> >> > >> >> > Will battle on a bit more before reverting to annotations >> >> > >> >> > On 14 October 2017 at 10:27, Romain Manni-Bucau < >> [email protected]> >> >> > wrote: >> >> > >> >> >> Hmm, earlier in the boot process shouldn't change anything if you >> >> >> manage yourself the builder, can you add why it impacted the behavior >> >> >> please (for completeness of this thread)? >> >> >> >> >> >> side note: you can add annotations on generated jaxb models -> >> >> >> https://github.com/highsource/jaxb2-annotate-plugin . >> >> >> >> >> >> Romain Manni-Bucau >> >> >> @rmannibucau | Blog | Old Blog | Github | LinkedIn >> >> >> >> >> >> >> >> >> 2017-10-14 10:08 GMT+02:00 Paul Carter-Brown >> >> <paul.carter-brown@smilecoms. >> >> >> com>: >> >> >> > Hi Romain, >> >> >> > >> >> >> > I managed to get it to work by calling new >> >> MapperBuilder().addAdapter(new >> >> >> > JavascriptDate()).build(); far earlier in the bootup process. >> >> >> > >> >> >> > On 14 October 2017 at 09:40, Paul Carter-Brown < >> >> >> > [email protected]> wrote: >> >> >> > >> >> >> >> Hi Romain, >> >> >> >> >> >> >> >> The model is generated using jaxb from an XSD. Jaxb has been set >> up >> >> to >> >> >> map >> >> >> >> xs:dateTime to java.time.Instant >> >> >> >> >> >> >> >> getters/setters look like this: >> >> >> >> public Instant getDate() { >> >> >> >> return date; >> >> >> >> } >> >> >> >> >> >> >> >> public void setDate(Instant value) { >> >> >> >> this.date = value; >> >> >> >> } >> >> >> >> >> >> >> >> As the model is generated I don't have the option of adding >> >> annotations >> >> >> on >> >> >> >> it and need to configure Johnzon to globally deal with Instant >> data >> >> type >> >> >> >> >> >> >> >> Paul >> >> >> >> >> >> >> >> On 14 October 2017 at 09:36, Romain Manni-Bucau < >> >> [email protected]> >> >> >> >> wrote: >> >> >> >> >> >> >> >>> Hi >> >> >> >>> >> >> >> >>> What is your model? >> >> >> >>> >> >> >> >>> Did you try @JohnzonConverter too? >> >> >> >>> >> >> >> >>> Tomee uses an old johnzon too so can need some enhancements from >> >> >> master. >> >> >> >>> >> >> >> >>> Le 14 oct. 2017 03:10, "Paul Carter-Brown" >> >> >> <[email protected] >> >> >> >>> om> >> >> >> >>> a écrit : >> >> >> >>> >> >> >> >>> > Hi, >> >> >> >>> > >> >> >> >>> > I've created an adapter as follows: >> >> >> >>> > >> >> >> >>> > public class JavascriptDate implements Adapter<String, >> Instant> { >> >> >> >>> > >> >> >> >>> > @Override >> >> >> >>> > public String to(Instant instance) { >> >> >> >>> > final Calendar cal = GregorianCalendar.getInstance(); >> >> >> >>> > cal.setTime(Date.from(instance)); >> >> >> >>> > return DatatypeConverter.printDateTime(cal); >> >> >> >>> > } >> >> >> >>> > >> >> >> >>> > @Override >> >> >> >>> > public Instant from(String text) { >> >> >> >>> > return DatatypeConverter. >> parseDateTime(text).getTime(). >> >> >> >>> > toInstant(); >> >> >> >>> > } >> >> >> >>> > } >> >> >> >>> > >> >> >> >>> > and register it globally like this in a servlet init: >> >> >> >>> > >> >> >> >>> > new MapperBuilder().addAdapter(new JavascriptDate()).build(); >> >> >> >>> > >> >> >> >>> > When I call a rest service passing a date formatted string >> field >> >> that >> >> >> >>> needs >> >> >> >>> > to map to an Instant I get an error: >> >> >> >>> > >> >> >> >>> > org.apache.johnzon.mapper.MapperException: Using fallback >> >> converter, >> >> >> >>> this >> >> >> >>> > only works in write mode but not in read. Please register a >> custom >> >> >> >>> > converter to do so. >> >> >> >>> > at >> >> >> >>> > org.apache.johnzon.mapper.MappingParserImpl$FallbackConverte >> >> >> >>> r.fromString( >> >> >> >>> > MappingParserImpl.java:715) >> >> >> >>> > at org.apache.johnzon.mapper.internal.ConverterAdapter.to >> >> >> >>> > (ConverterAdapter.java:37) >> >> >> >>> > at org.apache.johnzon.mapper.internal.ConverterAdapter.to >> >> >> >>> > (ConverterAdapter.java:24) >> >> >> >>> > at >> >> >> >>> > org.apache.johnzon.mapper.MappingParserImpl.convertTo( >> >> >> >>> > MappingParserImpl.java:682) >> >> >> >>> > at >> >> >> >>> > org.apache.johnzon.mapper.MappingParserImpl.toObject( >> >> >> >>> > MappingParserImpl.java:523) >> >> >> >>> > at >> >> >> >>> > org.apache.johnzon.mapper.MappingParserImpl.toValue( >> >> >> >>> > MappingParserImpl.java:634) >> >> >> >>> > at >> >> >> >>> > org.apache.johnzon.mapper.MappingParserImpl.buildObject( >> >> >> >>> > MappingParserImpl.java:318) >> >> >> >>> > at >> >> >> >>> > org.apache.johnzon.mapper.MappingParserImpl.readObject( >> >> >> >>> > MappingParserImpl.java:133) >> >> >> >>> > >> >> >> >>> > >> >> >> >>> > Any ideas why my mapper is not being used? >> >> >> >>> > >> >> >> >>> > Thanks >> >> >> >>> > Paul >> >> >> >>> > >> >> >> >>> > -- >> >> >> >>> > >> >> >> >>> > >> >> >> >>> > This email is subject to the disclaimer of Smile >> Communications at >> >> >> >>> > http://www.smilecoms.com/home/email-disclaimer/ < >> >> >> >>> http://www.smilecoms.com/ >> >> >> >>> > disclaimer> >> >> >> >>> > >> >> >> >>> > >> >> >> >>> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> > >> >> >> > -- >> >> >> > >> >> >> > *Paul Carter-Brown* >> >> >> > >> >> >> > *Group Chief Information Officer* >> >> >> > >> >> >> > *Smile Communications Pty (Ltd) * >> >> >> > Smile +234 (0) 702 000 1234 >> >> >> > Mobile +27 (0) 83 4427 179 >> >> >> > Skype PaulC-B >> >> >> > [email protected] >> >> >> > www.smilecoms.com >> >> >> > >> >> >> > -- >> >> >> > >> >> >> > >> >> >> > This email is subject to the disclaimer of Smile Communications at >> >> >> http://www.smilecoms.com/home/email-disclaimer/ < >> >> http://www.smilecoms.com/ >> >> >> disclaimer> >> >> >> > >> >> >> >> >> > >> >> > >> >> > >> >> > -- >> >> > >> >> > *Paul Carter-Brown* >> >> > >> >> > *Group Chief Information Officer* >> >> > >> >> > *Smile Communications Pty (Ltd) * >> >> > Smile +234 (0) 702 000 1234 >> >> > Mobile +27 (0) 83 4427 179 >> >> > Skype PaulC-B >> >> > [email protected] >> >> > www.smilecoms.com >> >> > >> >> > -- >> >> > >> >> > >> >> > This email is subject to the disclaimer of Smile Communications at >> >> http://www.smilecoms.com/home/email-disclaimer/ < >> http://www.smilecoms.com/ >> >> disclaimer> >> >> > >> >> >> > >> > >> > >> > -- >> > >> > *Paul Carter-Brown* >> > >> > *Group Chief Information Officer* >> > >> > *Smile Communications Pty (Ltd) * >> > Smile +234 (0) 702 000 1234 >> > Mobile +27 (0) 83 4427 179 >> > Skype PaulC-B >> > [email protected] >> > www.smilecoms.com >> > >> > -- >> > >> > >> > This email is subject to the disclaimer of Smile Communications at >> http://www.smilecoms.com/home/email-disclaimer/ <http://www.smilecoms.com/ >> disclaimer> >> > >>
