> 
> And right after sending my reply, it occurred to me that `shared()`
> 
> just might be the most obvious name to use?

shared() sounds good to me! Good call!

Michel


> 
>> It would return a lazily-created (on first access) globally
>> (per-ClassLoader) shared instance with default configuration.
>> So basically replacing "private final static ObjectMapper MAPPER = new
>> ObjectMapper()" pattern, for non-DI use cases.
>> 
>> Use case, I think, would mostly be:
>> 
>> 1. Reading as `Map`s ("untyped")
>> 2. Reading as `JsonNode`s (tree)
>> 3. Writing of Maps, JsonNodes as POJOs
>> 
>>> ## UncheckedObjectReader
>>> 
>>> Do you have examples from other libraries offering the same kind of 
>>> flexibility? I think this approach is really unusual and you should 
>>> probably stick to one or the other. I don't have a strong opinion which one 
>>> to chose actually but there's a trend towards unchecked exceptions in the 
>>> community.
>> 
>> I do not recall seeing this elsewhere (but need to go google now!),
>> but the idea has been floated around for years for Jackson at least:
>> 
>> https://github.com/FasterXML/jackson-databind/issues/779
>> 
>> which was created in 2015.
>> 
>> But I guess it is a fair point: alternative would be to rebase
>> `JsonProcessingException` as `RuntimeException`.
>> And the reason this has not been possible to do before is that it is a
>> major-version change, and that has not been available
>> for a while. But it now is.
>> 
>> Changes might not have to be quite as extensive as I first thought,
>> either, since the only places where IOException comes into
>> play are couple of low-level buffer-filling read methods. And
>> conversion from those is much less work than having to wrap all
>> access points.
>> 
>> It would even be possible I suppose to add exception converters so
>> users could choose alternate unchecked exceptions
>> for IOExceptions, and maybe even translation/wrapping of
>> `JsonProcessingException`, for convenience (to match framework they
>> use
>> or something). But that's just possibility.
>> 
>>> I hope this helps!
>> 
>> Sure did!
>> 
>> -+ Tatu +-
> 
> -+ Tatu +-
>> 
>>> 
>>> Michel
>>> 
>>> 
>>>> On 3. Nov 2018, at 03:07, Tatu Saloranta <[email protected]> wrote:
>>>> 
>>>> Ok but seriously this is important. I have 2 things to name, for Jackson 
>>>> 3.0:
>>>> 
>>>> 1. Term to use for "standard" or "vanillla" JsonMapper
>>>> 2. Term to use for "ObjectReader"/"ObjectWriter"s that do not throw
>>>> exceptions ("safe", "unchecked"?)
>>>> 
>>>> ## One: "vanilla mapper"
>>>> 
>>>> Unlike many other json libraries, Jackson does not provide a "default"
>>>> ObjectMapper instance.
>>>> This because of statefulness (mutability) of ObjectMapper: as a
>>>> general rule, Stateful JVM-wide Singletons are Bad.
>>>> 
>>>> But.... With Jackson 3.0, mappers are no longer mutable at all, as
>>>> they are built using builder() pattern. So while there is some actual
>>>> state for caching of handlers, there is no user-tweakable or visible
>>>> mutable state.
>>>> 
>>>> This open door for something like:
>>>> 
>>>> String json = JsonMapper.vanilla().writeValueAsString(pojo);
>>>>  // yes: there's still `ObjectMapper`... but that's base class, with
>>>> format-specific impls
>>>> 
>>>> which is something that works well for some uses, and is something
>>>> `jackson-jr` does:
>>>> 
>>>>   String json = JSON.std.asString(map);
>>>> 
>>>> This leaves naming. While "std" is short for "standard", it has other
>>>> connotations too as abbreviation. "default" is one possibility, except
>>>> that it's now a keyword in Java 8 (isn't it?).
>>>> I sort of like "vanilla" personally.
>>>> What do you think?
>>>> 
>>>> ## Two: "SafeObjectReader", "UncheckedObjectReader"
>>>> 
>>>> Another big pain point that I get annoyed by myself nowadays is the
>>>> fact that most Jackson read/write methods expose checked exceptions.
>>>> While I would otherwise prefer checked over unchecked (yes, I am Old
>>>> Skool), this wreaks havoc on Java 8 Streams, chaining, closures.
>>>> So... there is value in having something that does NOT throw them.
>>>> At the same time, I am not sure I want to throw out existing exception
>>>> hierarchy,... mostly because due to actual reading/writing, we'll
>>>> always have `IOException`s to deal with.
>>>> 
>>>> So: assuming we will keep `JsonProcessingException` and others
>>>> extending `IOException`,
>>>> there is another possibility: create subtypes of `ObjectReader` and
>>>> `ObjectWriter` that do NOT throw checked exceptions, but simply handle
>>>> them differently (throw unchecked exceptions, typically, or maybe call
>>>> a handler, pass failure some other way).
>>>> The only things of note really are that:
>>>> 
>>>> 1. There's a subtype, with naming prefix ("XxxObjectReader", 
>>>> "XxxObjectWriter")
>>>> 2. One gets instances from "ObjectMapper" same to regular
>>>> reader/writer, passing optional handler for `IOException` subtypes (or
>>>> if not passed, use default one that constructs RuntimeException of
>>>> some kind that nests original one)
>>>> 3. Resulting instances behavior is otherwise identical to default
>>>> readers, writers
>>>> 
>>>> So, naming: my initial naming ideas would be:
>>>> 
>>>> * "SafeObjectReader", "SafeObjectWriter"
>>>> * "UncheckedObjectReader", "UncheckedObjectWriter"
>>>> 
>>>> but neither feels exactly accurate. There isn't anything particularly
>>>> safe there (... but there are other libraries that use this
>>>> connotation...). And "Unchecked" is, well, bit too technically
>>>> accurate, yet sort of awkward.
>>>> Or put different way: these are neither more safe nor less checked:
>>>> handling is the same, only error reporting is bit different.
>>>> 
>>>> What say you?
>>>> 
>>>> -+ Tatu +-
>>>> 
>>>> --
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "jackson-dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "jackson-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "jackson-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to