Natan, thanks for starting this thread, and Frederico, thanks for chiming
in. These items would be great additions to the migration guide on the wiki
<https://github.com/dropwizard/dropwizard/wiki/Upgrade-guide-0.9.x-to-1.0.x>,
which unfortunately <https://twitter.com/skamille/status/765983310589943808>
can't be targeted with pull requests. I'll do a pass on the document when I
get some time so that these painpoints aren't locked away in the mailing
list.

On Wed, Aug 17, 2016 at 1:44 PM, Frederico Zica <[email protected]> wrote:

> 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.
>



-- 
Evan Meagher

-- 
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