Hey All! I'd really like to improve the above error message, but I would like to do it in a way that has the highest chance to be merged so first asking for guidance.
Ideally the message would tell me: 1) the class annotated with @JsonbCreator 2) the arguments that are missing A very optional, but would be slick: 3) that the `johnzon.failOnMissingCreatorValues` flag exists The most obvious trick to this is that the validation is done in a lambda here: - https://github.com/apache/johnzon/blob/master/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java#L223 However the data we would need to produce an informative message is here: - https://github.com/apache/johnzon/blob/master/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java#L322 This is me brainstorming as I type, but I can imagine a few ways this could be solved: 1) Move the lambda down to after the `if` block that sets `final String[] params`, then we have what we need to build a better message. 2) Replace the lambda `factoryValidator.accept(params)` with a plain method call `validateFactory(clazz, params, args)`. We'd need to rename `public Object create(final Object[] params)` to public Object create(final Object[] args)` so there's no conflict with the `String[] params` in the outter method signature. 3) Make the `factoryValidator` lambda throw a subclass of JsonbException that has a field indicating the `args` array positions that are null. Then make `public Object create(final Object[] params)` method catch it, match up the missing arg positions with the names and wrap the exception with a more detailed exception. 4) Change the lambda from `final Consumer<Object[]> factoryValidator` to something like `final Consumer<FactoryMetadata> factoryValidator` and introduce a small inner class FactoryMetadata that has clazz, params, args as fields. Possibly some other options jump out at others. If I don't hear anything, I'll pick one and see how it goes. While I'm at it I'd like to improve the other error messages in the area so at minimum they say the affected class: - https://github.com/apache/johnzon/blob/master/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java#L192 - https://github.com/apache/johnzon/blob/master/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java#L206 - https://github.com/apache/johnzon/blob/master/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java#L292 -David
smime.p7s
Description: S/MIME cryptographic signature