This is the base factory that will create converters based on the default ones and on custom
Serializer, Deserializer and Converter. But it also uses factories (default and custom) and
BeanDescriptorProvider that is
responsible of creating bean converters.
When you ask for a Converter it will
Lookup in the registered Serializers for one that is parameterized with the current type, if
found we finished (it takes the first one, so the order matters).
Else we will try the factories by searching the ones that can create and instance of
Serializer<CurrentType> (again the order is very important). We continue while they return
If no factory could create an instance we will use BeanDescriptorProvider.
We apply all the same logic a second time for Deserializer.
If they are both an instance of Converter then we return one of them
Otherwise we will wrap both into a Converter.
Note that the create method from the registered factories will only be called if the type with
which they are parameterized is assignable from the current type. For example, if we look for a
serializer of Integer then Factory<Converter<Integer>> and Factory<Serializer<Object>> match
both, the first registered will be used.