users@jersey.java.net

Re: [Jersey] jersey with jackson

From: Matthew M. Boedicker <matthewm_at_boedicker.org>
Date: Wed, 27 Oct 2010 09:04:49 -0400

I'm not using Maven but I am seeing the same thing with Tomcat. When
the jackson jars are in my classpath I see them found as providers in
the log and I get natural JSON notation. If I move them out of the
classpath I get mapped notation JSON.

If there are multiple providers maybe it just uses the first one it finds?

On Wed, Oct 27, 2010 at 3:37 AM, Jason Drake <jadrake75_at_comcast.net> wrote:
> I am having a problem which is somewhat related and it is driving me up the
> wall......
>
> Essentially my application has a custom JAXBContextResolver object which
> implements ContentResolver<JAXBContext>.  I am using Mapped Notation.  My
> context resolver builds the type list based on my types in a properties
> config file and sets up the mappings (all defined in this file)
>
> I recently switched to Glassfish 3.0.1 Open Source instead of Tomcat.  My
> JPA app is currently RESOURCE_LOCAL so it works in either.  I am noticing a
> really strange difference between publishing the app in Eclipse vs.
> deploying the maven "compiled and installed/distributed" WAR file into
> glassfish.  In eclipse (like Tomcat) when the app is started I will see this
> output (the types and notation type are being printed from my
> JAXBContextResolver class.....
>
>   INFO: Scanning for root resource and provider classes in the Web app
>   resource paths:
>     /WEB-INF/lib
>     /WEB-INF/classes
>   INFO: Root resource classes found:
>     class
>   org.javad.preferences.model.services.resources.PreferenceResource
>     class org.javad.stamp.model.services.resources.StampCollectionResource
>     class org.javad.stamp.model.services.resources.AlbumResource
>     class org.javad.stamp.model.services.resources.CatalogueNumberResource
>     class org.javad.stamp.model.services.resources.CountryResource
>     class org.javad.stamp.model.services.resources.StampResource
>     class org.javad.stamp.model.services.resources.CatalogueResource
>   INFO: Provider classes found:
>     class org.javad.xml.jaxb.JAXBContextResolver
>   INFO: Initiating Jersey application, version 'Jersey: 1.1.5
>   01/20/2010 04:04 PM'
>   INFO: Adding the following classes declared in
>   META-INF/services/jersey-server-components to the resource
>   configuration:
>     class com.sun.jersey.multipart.impl.FormDataMultiPartDispatchProvider
>     class com.sun.jersey.multipart.impl.MultiPartConfigProvider
>     class com.sun.jersey.multipart.impl.MultiPartReader
>     class com.sun.jersey.multipart.impl.MultiPartWriter
>   INFO: Adding JAXB Resolver support for the following classes:
>      class org.javad.preferences.model.PreferenceValue
>      class org.javad.preferences.model.collections.PreferencesModelList
>      class org.javad.stamp.model.Stamp
>      class org.javad.stamp.model.Country
>      class org.javad.stamp.model.Catalogue
>      class org.javad.stamp.model.CatalogueNumber
>      class org.javad.stamp.model.Album
>      class org.javad.stamp.model.StampCollection
>      class org.javad.stamp.model.Ownership
>      class org.javad.stamp.model.collections.ModelList
>      class org.javad.stamp.model.collections.AlbumModelList
>      class org.javad.stamp.model.collections.StampCollectionModelList
>      class org.javad.stamp.model.collections.CountryModelList
>      class org.javad.stamp.common.model.StampIssue
>      class org.javad.util.common.status.ValidationStatus
>   INFO: Using notation: MAPPED
>
> You'll notice only one provider is found..... my "JAXBContextResolver."
>  Now, when I deploy the WAR to glassfish I am getting a different result for
> the providers....
>
>   INFO: Scanning for root resource and provider classes in the Web app
>   resource paths:
>     /WEB-INF/lib
>     /WEB-INF/classes
>
>   INFO: Root resource classes found:
>     class org.javad.stamp.model.services.resources.StampCollectionResource
>     class
>   org.javad.preferences.model.services.resources.PreferenceResource
>     class org.javad.stamp.model.services.resources.CountryResource
>     class org.javad.stamp.model.services.resources.StampResource
>     class org.javad.stamp.model.services.resources.AlbumResource
>     class org.javad.stamp.model.services.resources.CatalogueResource
>     class org.javad.stamp.model.services.resources.CatalogueNumberResource
>   INFO: Provider classes found:
>     class org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
>     class org.codehaus.jackson.jaxrs.JsonParseExceptionMapper
>     class org.codehaus.jackson.jaxrs.JacksonJsonProvider
>     class org.javad.xml.jaxb.JAXBContextResolver
>     class org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper
>   INFO: Initiating Jersey application, version 'Jersey: 1.1.5
>   01/20/2010 04:04 PM'
>   INFO: Adding the following classes declared in
>   META-INF/services/jersey-server-components to the resource
>   configuration:
>     class com.sun.jersey.multipart.impl.FormDataMultiPartDispatchProvider
>     class com.sun.jersey.multipart.impl.MultiPartConfigProvider
>     class com.sun.jersey.multipart.impl.MultiPartReader
>     class com.sun.jersey.multipart.impl.MultiPartWriter
>   INFO: Adding JAXB Resolver support for the following classes:
>      class org.javad.preferences.model.PreferenceValue
>      class org.javad.preferences.model.collections.PreferencesModelList
>      class org.javad.stamp.model.Stamp
>      class org.javad.stamp.model.Country
>      class org.javad.stamp.model.Catalogue
>      class org.javad.stamp.model.CatalogueNumber
>      class org.javad.stamp.model.Album
>      class org.javad.stamp.model.StampCollection
>      class org.javad.stamp.model.Ownership
>      class org.javad.stamp.model.collections.ModelList
>      class org.javad.stamp.model.collections.AlbumModelList
>      class org.javad.stamp.model.collections.StampCollectionModelList
>      class org.javad.stamp.model.collections.CountryModelList
>      class org.javad.stamp.common.model.StampIssue
>      class org.javad.util.common.status.ValidationStatus
>   INFO: Using notation: MAPPED
>
> Now it is finding the jackson/jaxrs providers/mappers, and while my
> JAXBContextResolver was loaded, it is not using MAPPED notation in the
> returning JSON (thus corrupting my client app - I believe it is using either
> natural or mapped json?).   I know this has to be a classpath issue, in that
> in the eclipse embedded environment, it is not  finding the  Jackson JARs
> whereas in the WAR deployment case, because they are in the WAR it is using
> them.  I did a small test where I actually added jackson-jaxrs to my pom.xml
> and set it to "provided" instead of compile.  This did result in it being
> excluded from the output WAR.  Should I be setting this jackson JAR to
> provided?  What about the other ones? ( jackson-core-asl,
> jackson-mapper-asl, jackson-xc)?
>
> This tripped me up for ~ 2.0 hours (why it worked perfectly in eclipse and
> not at all in standalone deploy) and I'd like to make I understand/set this
> up correctly.
>
> Thanks
>   Jason
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
>