Hello.

I migrated from 0.9.2 to 1.0.0.

Thanks a lot. The Lombok part spared me a great deal of time.

I had problems while serializing objects that contained cross references. I 
started having the following exception: 
*org.glassfish.jersey.server.internal.process.MappableException: 
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion. *While 
it makes sense for this exception to happen, it didn't happen before the 
migration.

Passing null as a parameter correspondent to the body of a POST request 
annotated with @Valid and @NotNull generated a 422 HTTP error. Previously 
it was a 400 error.


On Thursday, August 11, 2016 at 11:13:30 AM UTC-3, Natan Abolafya wrote:
>
> Hi,
>
> I just want to share our (somewhat painful) migration experiences here. I 
> think it could be useful for the other people as there seems to be a lack 
> of documentation about migration. It's mostly the other technologies 
> dropwizard depends on and some of them are rather obvious and normal to not 
> mention.
>
> Jackson:
> - In order to ignore certain fields, we were using *AnnotationIntrospector 
> *feature by overriding "*hasIgnoreMarker*" method. That stopped working 
> for some reason. Having not able to find the cause, and not wanting to 
> spend too much time, we have decided to use *FilterProvider *feature 
> instead.
> - No need for extra java8 modules anymore. They are already included.
> - Jackson has a new feature which treats @
> *javax.beans.ConstructorProperties* as *@JsonCreator *(
> https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.7). We use 
> lombok, and have a lot of *@AllArgsConstructor*s for the json objects. 
> Turns out, this annotation also adds @*javax.beans.ConstructorProperties *to 
> the constructor. This makes Jackson to use that constructor instead of the 
> empty one. This leads to setting nulls to non-existing fields even though 
> we have *JsonInclude.Include.NON_ABSENT*. Thus, our default values were 
> ignored.
> I've decided to fix this by creating a lombok.config file and adding '
> lombok.anyConstructor.suppressConstructorProperties = true' to it.
> I've found another solution, but I didn't know what might be the side 
> effect as it may be overriding the existing introspector: 
> objectMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector
> ().setConstructorPropertiesImpliesCreator(false));
>
>
> Validation:
> - No more *OptionalValidatedValueUnwrapper* needed.
> - As *@Validated* used to be enough previously, we didn't follow the 
> documentation and just kept *@Validated* on the parameters. This is not 
> enough anymore, both *@Valid* and *@Validated* is required to have 
> validation, if you need grouping.
> https://github.com/dropwizard/dropwizard/pull/1251#issuecomment-142645734
> - We have our own *ConstraintViolationException *mapper to be able to 
> provide custom error objects which includes a "field" field which gives the 
> field path. *c**onstraintViolation.getPropertyPath() *used to return the 
> direct path of the field, like *childObject[1].field*. And 
> *constraintViolation.getRootBeanClass() 
> *used to return the json object. We do some reflection and annotation 
> processing in order to get the *@JsonProperty("fieldName") *correctly on 
> this json object. Now *propertyPath* is something like 
> *post.args1.childObject[1].field* and *rootBeanClass* is the resource 
> class. This needed considerable changes in order to continue to work as 
> before.
> - *@ValidationMethod *is now called even when when the regular validation 
> fails.* B*efore, if, say, *@NotNull* fails, validation methods were not 
> evaluated. So we didn't have '*if(null) return true' *in those methods 
> before. 
> With dropwizard 1.0.0 they started throwing null pointer exception and 
> returning 500. Adding null checks fixed it of course.
>
>
> Logging:
> - We were using a 3rd party code that overrides "*AbstractAppenderFactory*". 
> The signature has changed and broke the compatibility. We've done the 
> necessary changes.
>
> Configuration:
> - In order to have a HTTPs server with a self-signed certificate, one 
> needed to have *validateCerts: false* in the configuration yaml. Now this 
> isn't enough. Now one also needs *validatePeers: false*.
> - Jersey client gets 'Connection Reset' errors. Explained here: 
> https://groups.google.com/forum/#!topic/dropwizard-user/gEwrTwRZez0. I've 
> made it work with enabling *retries *on the configuration but would 
> prefer to understand why it's failing in the first place. Which doesn't 
> work out of box. You also need *chunkedEncodingEnabled: false *for it to 
> work*.*
> - https://github.com/tkrille/dropwizard-environment-config  
> <https://github.com/tkrille/dropwizard-environment-config>is not 
> compatible anymore. We have moved to 
> https://github.com/tkrille/dropwizard-template-config. Which was already 
> recommended apparently but we haven't been following the repository.
>
> Feel free to add more of your experiences here so this can become some 
> sort of documentation. Also corrections are obviously welcome.
>
> Natan
>

-- 
You received this message because you are subscribed to the Google Groups 
"dropwizard-user" 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