+1 :) LieGrue, strub
> Am 24.06.2017 um 17:56 schrieb Romain Manni-Bucau <[email protected]>: > > Nobody bothers a community when that accurate ;). Loved the proactiveness > with the PR! > > Le 24 juin 2017 15:48, "James Carman" <[email protected]> a écrit : > >> Yep, let me tinker around a bit. If I run into trouble I'll holler back. >> Thanks for your help, Romain! You've been extremely responsive today. >> Hope I'm not being too much of a bother. :) >> >> >> On Sat, Jun 24, 2017 at 9:44 AM Romain Manni-Bucau <[email protected]> >> wrote: >> >>> If temporarly forking jsonbaccessmode you will have this control. Master >>> will let you configure it. Does that work? >>> >>> Le 24 juin 2017 15:40, "James Carman" <[email protected]> a >>> écrit : >>> >>>> I'm not saying it won't work, but it would require me going in and >>> fixing a >>>> ton of code to have all of these annotations. I can probably do that >>> over >>>> time, but trying to cover all the cases and not break anyone while I >>>> migrate us over to Johnzon would be very difficult. If I could mimic >>> GSON >>>> as a stopgap measure, that would be the least invasive option for us. >>>> >>>> >>>> On Sat, Jun 24, 2017 at 9:37 AM Romain Manni-Bucau < >>> [email protected]> >>>> wrote: >>>> >>>>> Hmm, why this model wouldn't work? It would be saner and wouldn't >>> require >>>>> to rely on unsafe for something as simple as that which also ensures >> it >>>>> works on GAE ;) >>>>> >>>>> public class ConsulNode { >>>>> >>>>> @JsonbCreator >>>>> public ConsulNode(@JsonbProperty("Key") String key, >>>>> @JsonbProperty("Value") String >>>>> value) { >>>>> this.key = key; >>>>> this.value = value; >>>>> } >>>>> >>>>> // getters on final or not fields >>>>> >>>>> } >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Romain Manni-Bucau >>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog >>>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog >>>>> <http://rmannibucau.wordpress.com> | Github < >>>>> https://github.com/rmannibucau> | >>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory >>>>> <https://javaeefactory-rmannibucau.rhcloud.com> >>>>> >>>>> 2017-06-24 15:30 GMT+02:00 James Carman <[email protected] >>> : >>>>> >>>>>> Well, I have a ton of existing code that uses this pattern, so I'd >>>> rather >>>>>> not have to force everyone to have to go through that hassle. If >>>>> there's a >>>>>> way that I can mimic GSON's functionality seamlessly, then I'd like >>> to >>>>> take >>>>>> that route. >>>>>> >>>>>> On Sat, Jun 24, 2017 at 9:07 AM Romain Manni-Bucau < >>>>> [email protected]> >>>>>> wrote: >>>>>> >>>>>>> What about adding @JsonbCreator on the constructor and moving the >>>>>> property >>>>>>> to the constructor arguments? >>>>>>> >>>>>>> >>>>>>> Romain Manni-Bucau >>>>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog >>>>>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog >>>>>>> <http://rmannibucau.wordpress.com> | Github < >>>>>>> https://github.com/rmannibucau> | >>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE >>> Factory >>>>>>> <https://javaeefactory-rmannibucau.rhcloud.com> >>>>>>> >>>>>>> 2017-06-24 15:05 GMT+02:00 James Carman < >>> [email protected] >>>>> : >>>>>>> >>>>>>>> Okay, let me fully explain what I'm trying to do. I'll take a >>>> simple >>>>>>>> example. I'm trying to read data from Consul. So, I'm using a >>>>>>>> WebTarget-based implementation to talk to Consul, but I'm >> trying >>> to >>>>> use >>>>>>>> JSON-B to parse the response. I have a ConsulNode class: >>>>>>>> >>>>>>>> public class ConsulNode { >>>>>>>> >>>>>>>> @JsonbProperty("Key") >>>>>>>> private final String key; >>>>>>>> >>>>>>>> @JsonbProperty("Value") >>>>>>>> private final String value; >>>>>>>> >>>>>>>> public ConsulNode(String key, String value) { >>>>>>>> this.key = key; >>>>>>>> this.value = value; >>>>>>>> } >>>>>>>> >>>>>>>> public String getKey() { >>>>>>>> return key; >>>>>>>> } >>>>>>>> >>>>>>>> public String getValue() { >>>>>>>> return value; >>>>>>>> } >>>>>>>> } >>>>>>>> >>>>>>>> When I attempt to parse the response into a List<ConsulNode>, I >>> get >>>>> the >>>>>>>> following exception: >>>>>>>> >>>>>>>> javax.json.bind.JsonbException: class >>>>>>>> org.microbule.config.consul.ConsulNode not instantiable >>>>>>>> >>>>>>>> at org.apache.johnzon.jsonb.JohnsonJsonb.fromJson( >>>>>> JohnsonJsonb.java:160) >>>>>>>> at >>>>>>>> org.microbule.config.consul.ConsulConfigProviderTest. >>>> parseResponse( >>>>>>>> ConsulConfigProviderTest.java:83) >>>>>>>> at >>>>>>>> org.microbule.config.consul.ConsulConfigProviderTest. >>>> testGetConfig( >>>>>>>> ConsulConfigProviderTest.java:75) >>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>>> at >>>>>>>> >>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke( >>>>>> NativeMethodAccessorImpl.java: >>>>>>>> 62) >>>>>>>> at >>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke( >>>>>>>> DelegatingMethodAccessorImpl.java:43) >>>>>>>> at java.lang.reflect.Method.invoke(Method.java:497) >>>>>>>> at >>>>>>>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( >>>>>>>> FrameworkMethod.java:50) >>>>>>>> at >>>>>>>> org.junit.internal.runners.model.ReflectiveCallable.run( >>>>>>>> ReflectiveCallable.java:12) >>>>>>>> at >>>>>>>> org.junit.runners.model.FrameworkMethod.invokeExplosively( >>>>>>>> FrameworkMethod.java:47) >>>>>>>> at >>>>>>>> org.junit.internal.runners.statements.InvokeMethod. >>>>>>>> evaluate(InvokeMethod.java:17) >>>>>>>> at >>>>>>>> org.junit.internal.runners.statements.RunBefores. >>>>>>>> evaluate(RunBefores.java:26) >>>>>>>> at >>>>>>>> org.junit.internal.runners.statements.RunAfters.evaluate( >>>>>>>> RunAfters.java:27) >>>>>>>> at >>>>>>>> org.junit.rules.ExpectedException$ExpectedExceptionStatement. >>>>>>>> evaluate(ExpectedException.java:239) >>>>>>>> at org.junit.rules.RunRules.evaluate(RunRules.java:20) >>>>>>>> at org.junit.runners.ParentRunner.runLeaf( >> ParentRunner.java:325) >>>>>>>> at >>>>>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild( >>>>>>>> BlockJUnit4ClassRunner.java:78) >>>>>>>> at >>>>>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild( >>>>>>>> BlockJUnit4ClassRunner.java:57) >>>>>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) >>>>>>>> at >>> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) >>>>>>>> at org.junit.runners.ParentRunner.runChildren( >>>> ParentRunner.java:288) >>>>>>>> at >>> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) >>>>>>>> at org.junit.runners.ParentRunner$2.evaluate( >>>> ParentRunner.java:268) >>>>>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:363) >>>>>>>> at org.junit.runner.JUnitCore.run(JUnitCore.java:137) >>>>>>>> at >>>>>>>> com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( >>>>>>>> JUnit4IdeaTestRunner.java:68) >>>>>>>> at >>>>>>>> com.intellij.rt.execution.junit.IdeaTestRunner$Repeater. >>>>>>>> startRunnerWithArgs(IdeaTestRunner.java:51) >>>>>>>> at >>>>>>>> com.intellij.rt.execution.junit.JUnitStarter. >>>> prepareStreamsAndStart( >>>>>>>> JUnitStarter.java:242) >>>>>>>> at >>>>>>> com.intellij.rt.execution.junit.JUnitStarter.main( >>>> JUnitStarter.java:70) >>>>>>>> Caused by: org.apache.johnzon.mapper.MapperException: class >>>>>>>> org.microbule.config.consul.ConsulNode not instantiable >>>>>>>> at >>>>>>>> org.apache.johnzon.mapper.MappingParserImpl.buildObject( >>>>>>>> MappingParserImpl.java:281) >>>>>>>> at >>>>>>>> org.apache.johnzon.mapper.MappingParserImpl.toObject( >>>>>>>> MappingParserImpl.java:484) >>>>>>>> at >>>>>>>> org.apache.johnzon.mapper.MappingParserImpl.mapCollection( >>>>>>>> MappingParserImpl.java:603) >>>>>>>> at >>>>>>>> org.apache.johnzon.mapper.MappingParserImpl.readObject( >>>>>>>> MappingParserImpl.java:175) >>>>>>>> at >>>>>>>> org.apache.johnzon.mapper.MappingParserImpl.readObject( >>>>>>>> MappingParserImpl.java:127) >>>>>>>> at >>>>>>>> org.apache.johnzon.mapper.MappingParserImpl.readObject( >>>>>>>> MappingParserImpl.java:117) >>>>>>>> at org.apache.johnzon.mapper.Mapper.mapObject(Mapper.java:236) >>>>>>>> at org.apache.johnzon.mapper.Mapper.readCollection(Mapper. >>>> java:207) >>>>>>>> at org.apache.johnzon.jsonb.JohnsonJsonb.fromJson( >>>>>> JohnsonJsonb.java:151) >>>>>>>> ... 28 more >>>>>>>> >>>>>>>> On Sat, Jun 24, 2017 at 8:55 AM Romain Manni-Bucau < >>>>>>> [email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Have to admit I don't fully see the use case since noarg >>>>> contructors >>>>>>> are >>>>>>>>> not mandatory but JOHNZON-130 opens the doort to custom >>>> extensions. >>>>>>>>> >>>>>>>>> If the need is something like myInstance == >>>>>> jsonMapper.map(myInstance, >>>>>>>>> input) it shouldnt be hard to extract it from our mapper but >>> not >>>>> sure >>>>>>> how >>>>>>>>> we would wire it in jsonb api, probably accesMode can help >>> with a >>>>>>>>> threadlocal or so. >>>>>>>>> >>>>>>>>> >>>>>>>>> Romain Manni-Bucau >>>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog >>>>>>>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog >>>>>>>>> <http://rmannibucau.wordpress.com> | Github < >>>>>>>>> https://github.com/rmannibucau> | >>>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE >>>>> Factory >>>>>>>>> <https://javaeefactory-rmannibucau.rhcloud.com> >>>>>>>>> >>>>>>>>> 2017-06-24 14:49 GMT+02:00 James Carman < >>>>> [email protected] >>>>>>> : >>>>>>>>> >>>>>>>>>> Well, my use case is that I want to let Johnzon instantiate >>>>> objects >>>>>>>> when >>>>>>>>>> there is no special annotation or factory method present. >> I >>>> just >>>>>>> want >>>>>>>> it >>>>>>>>>> to instantiate the object and then populate the fields. I >>>>> realize >>>>>>> this >>>>>>>>> is >>>>>>>>>> somewhat niche, so I don't know if I'll push a PR for the >>>>>>>> implementation, >>>>>>>>>> unless you guys want me to. This will mimic what I >> currently >>>>> have >>>>>>> with >>>>>>>>>> GSON which proves to be very convenient, especially in >>> JAX-RS. >>>>>>>>>> >>>>>>>>>> On Sat, Jun 24, 2017 at 8:28 AM Romain Manni-Bucau < >>>>>>>>> [email protected]> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Internals: >>>>>>>>>>> >>>>>>>>>>> in general you do builder.setAccessMode(accessMode); >>>>>>>>>>> but in jsonb context we didnt wire it yet cause we >> enforce >>>>>>>>>>> JsonbAccessMode but >>>>>>>>>>> we can surely still expose it (in particular read from >>>>>> jsonbconfig >>>>>>>>>>> properties the delegate). >>>>>>>>>>> >>>>>>>>>>> Spec: >>>>>>>>>>> >>>>>>>>>>> In jsonb we have @JsonbCreator support for constructors. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Romain Manni-Bucau >>>>>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog >>>>>>>>>>> <https://blog-rmannibucau.rhcloud.com> | Old Blog >>>>>>>>>>> <http://rmannibucau.wordpress.com> | Github < >>>>>>>>>>> https://github.com/rmannibucau> | >>>>>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | >>> JavaEE >>>>>>> Factory >>>>>>>>>>> <https://javaeefactory-rmannibucau.rhcloud.com> >>>>>>>>>>> >>>>>>>>>>> 2017-06-24 14:19 GMT+02:00 James Carman < >>>>>>> [email protected] >>>>>>>>> : >>>>>>>>>>> >>>>>>>>>>>> Are there docs on how to provide my own AccessMode >>>>>>> implementation? >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sat, Jun 24, 2017 at 8:16 AM Romain Manni-Bucau < >>>>>>>>>>> [email protected]> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Using a custom accessmode you can. >>>>>>>>>>>>> >>>>>>>>>>>>> Side note: we have constructor support I think. >>>>>>>>>>>>> >>>>>>>>>>>>> Le 24 juin 2017 13:59, "James Carman" < >>>>>>>> [email protected]> >>>>>>>>> a >>>>>>>>>>>>> écrit : >>>>>>>>>>>>> >>>>>>>>>>>>>> Current, with Johnzon, I can't instantiate objects >>> for >>>>>>> classes >>>>>>>>>> where >>>>>>>>>>> I >>>>>>>>>>>>> have >>>>>>>>>>>>>> no default constructor available. With GSON, it >>>> supports >>>>>>> this >>>>>>>>>> using >>>>>>>>>>>> the >>>>>>>>>>>>>> Unsafe class I believe. Is there a way for me to >>>> provide >>>>>> my >>>>>>>> own >>>>>>>>>>>>>> instantiator implementation (I'd probably pick >>>>>> Objenesis)? I >>>>>>>>> don't >>>>>>>>>>>> want >>>>>>>>>>>>> to >>>>>>>>>>>>>> have to provide default constructors for all of my >>>>>> immutable >>>>>>>>>>> "request" >>>>>>>>>>>>>> objects when using Johnzon in my JAX-RS >>>>> MessageBodyReader/ >>>>>>>>>>>>>> MessageBodyWriter. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>> >>>>>>>>>>>>>> James >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >>
