Aren't you using Wildfly? Again, I do not support Wildfly yet. On 6/6/2013 10:47 AM, Pascal Gélinas wrote: > Well, the stack trace clearly references Jackson 2 classes: > > Caused by: > com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: > Unrecognized field "access_token" (class > org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse), > not marked as ignorable (4 known properties: , "token", "expiresIn", > "tokenType", "refreshToken"]) > at [Source: > org.jboss.resteasy.client.core.SelfExpandingBufferredInputStream@934ef4; > line: 1, column: 18] (through reference chain: > org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse["access_token"]) > at > com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1159) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1179) > [jackson-databind-2.2.1.jar:2.2.1] > at > com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:635) > [jackson-databind-2.2.1.jar:2.2.1] > at > org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:120) > [resteasy-jackson2-provider-3.0-beta-5.jar:] > at > org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:45) > [resteasy-jaxrs-3.0-beta-5.jar:] > at > org.jboss.resteasy.security.doseta.DigitalVerificationInterceptor.aroundReadFrom(DigitalVerificationInterceptor.java:32) > at > org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:48) > [resteasy-jaxrs-3.0-beta-5.jar:] > at > org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59) > [resteasy-jaxrs-3.0-beta-5.jar:] > at > org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:48) > [resteasy-jaxrs-3.0-beta-5.jar:] > at > org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:191) > [resteasy-client-3.0-beta-5.jar:] > ... 17 more > > something somewhere is making use of Jackson 2, but the classes are > annotated for Jackson 1. And the reason that his ObjectMapper context > resolver isn't being called is that it provides a Jackson 1 > ObjectMapper, but the runtime requires a Jackson 2. > > On 06/05/2013 01:24 PM, Bill Burke wrote: >> Skeleton Key still uses Jackson 1.9.x >> >> On 6/4/2013 2:25 PM, Pascal Gélinas wrote: >>> Just thaught I'd chip in: I've seen in your class that you are using the >>> old annotations (JsonProperty) from the old package >>> org.codehaus.jackson.*. The new packages are com.fasterxml.jackson.*, so >>> make sure to use those; the class names haven't changed, but the >>> packages did. That can cause some confusing when you've got both version >>> on the compile classpath. >>> >>> I'm also pretty sure that your CustomObjectMapperProvider provides an >>> old ObjectMapper from the codehaus packages. >>> >>> HTH >>> -- >>> Pascal Gélinas | Software Developer >>> *Nu Echo Inc. * >>> 1435, Saint-Alexandre, Suite 200, Montreal (Qc),Canada, H3A 2G4 >>> Tel: (514) 861-3246 ext 4234 | FAX: (514) 861-1676 >>> pascal.geli...@nuecho.com <mailto:pascal.geli...@nuecho.com> | >>> www.nuecho.com <http://www.nuecho.com/> | blog.nuecho.com >>> <http://blog.nuecho.com/> >>> >>> *Because performance matters. * >>> >>> >>> On 05/25/2013 06:20 PM, Charles wrote: >>>> Hi, >>>> >>>> I am using Resteasy 3.0-beta5 Skeleton Key in my project. I have setup >>>> the whole thing...SSL certs, skeleton key config and so on. I am using >>>> the OAuthManagedResourceValve to secure a jax-rs API. After >>>> authentication from the sso server, I get the following exception. >>>> >>>> 00:07:15,581 INFO [org.jboss.as<http://org.jboss.as>] (Controller >>>> Boot Thread) JBAS015874: WildFly 8.0.0.Alpha1 "WildFly" started in >>>> 29220ms - Started 1153 of 1247 services (228 services are lazy, >>>> passive or on-demand) >>>> 00:07:25,144 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) --- invoke: /login.jsp >>>> 00:07:32,068 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) --- invoke: /j_security_check >>>> 00:07:32,069 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) <--- Begin oauthAuthenticate >>>> 00:07:32,140 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) authenticate userSessionManage.login(): foobar >>>> 00:07:32,259 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) --- sign access code >>>> 00:07:32,289 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) --- build redirect >>>> 00:07:32,290 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-1) <--- end oauthAuthenticate >>>> 00:07:33,183 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.OAuthAuthenticationServerValve] >>>> (ajp-/192.168.1.101:8009-2) --- invoke: /j_oauth_resolve_access_code >>>> 00:07:33,390 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.ServletOAuthLogin] >>>> (ajp-/192.168.1.101:8009-1) media type: application/json >>>> 00:07:33,390 INFO >>>> [org.jboss.resteasy.skeleton.key.as7.ServletOAuthLogin] >>>> (ajp-/192.168.1.101:8009-1) Content-Type header: application/json >>>> 00:07:34,810 ERROR [org.apache.catalina.connector] >>>> (ajp-/192.168.1.101:8009-1) JBWEB001018: An exception or error >>>> occurred in the container during the request processing: >>>> org.jboss.resteasy.spi.ReaderException: >>>> com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: >>>> Unrecognized field "access_token" (class >>>> org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse), >>>> not marked as ignorable (4 known properties: , "token", "expiresIn", >>>> "tokenType", "refreshToken"]) >>>> at [Source: >>>> org.jboss.resteasy.client.core.SelfExpandingBufferredInputStream@934ef4; >>>> line: 1, column: 18] (through reference chain: >>>> org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse["access_token"]) >>>> at >>>> org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:227) >>>> [resteasy-client-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readEntity(ClientResponse.java:135) >>>> [resteasy-client-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:193) >>>> [resteasy-jaxrs-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.skeleton.key.as7.ServletOAuthLogin.resolveCode(ServletOAuthLogin.java:283) >>>> [skeleton-key-as7-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.skeleton.key.as7.OAuthManagedResourceValve.oauth(OAuthManagedResourceValve.java:272) >>>> [skeleton-key-as7-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.skeleton.key.as7.OAuthManagedResourceValve.authenticate(OAuthManagedResourceValve.java:174) >>>> [skeleton-key-as7-3.0-beta-5.jar:] >>>> at >>>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:447) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.jboss.resteasy.skeleton.key.as7.OAuthManagedResourceValve.invoke(OAuthManagedResourceValve.java:137) >>>> [skeleton-key-as7-3.0-beta-5.jar:] >>>> at >>>> org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) >>>> [wildfly-web-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:559) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:473) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:454) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at >>>> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2036) >>>> [jbossweb-8.0.0.Alpha1.jar:8.0.0.Alpha1] >>>> at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_01] >>>> Caused by: >>>> com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: >>>> Unrecognized field "access_token" (class >>>> org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse), >>>> not marked as ignorable (4 known properties: , "token", "expiresIn", >>>> "tokenType", "refreshToken"]) >>>> at [Source: >>>> org.jboss.resteasy.client.core.SelfExpandingBufferredInputStream@934ef4; >>>> line: 1, column: 18] (through reference chain: >>>> org.jboss.resteasy.skeleton.key.representations.AccessTokenResponse["access_token"]) >>>> at >>>> com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1159) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1179) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:635) >>>> [jackson-databind-2.2.1.jar:2.2.1] >>>> at >>>> org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:120) >>>> [resteasy-jackson2-provider-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:45) >>>> [resteasy-jaxrs-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.security.doseta.DigitalVerificationInterceptor.aroundReadFrom(DigitalVerificationInterceptor.java:32) >>>> at >>>> org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:48) >>>> [resteasy-jaxrs-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59) >>>> [resteasy-jaxrs-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:48) >>>> [resteasy-jaxrs-3.0-beta-5.jar:] >>>> at >>>> org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:191) >>>> [resteasy-client-3.0-beta-5.jar:] >>>> ... 17 more >>>> >>>> >>>> I have written a custom JacksonJsonProvider and ObjectMapper context >>>> resolver as follows: >>>> >>>> @Provider >>>> @Consumes(MediaType.WILDCARD) // NOTE: required to support >>>> "non-standard" JSON variants >>>> @Produces(MediaType.WILDCARD) >>>> public class CustomJacksonJsonProvider extends JacksonJsonProvider { >>>> public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; >>>> private Logger log = Logger.getLogger( this.getClass() ); >>>> public CustomJacksonJsonProvider(){ >>>> super(); >>>> try { >>>> _mapperConfig.setMapper( new ObjectMapper() >>>> .registerModule( new Hibernate4Module().configure( >>>> Hibernate4Module.Feature.FORCE_LAZY_LOADING, false ) ) >>>> .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) >>>> .configure(MapperFeature.USE_ANNOTATIONS, true) >>>> .configure(MapperFeature.AUTO_DETECT_FIELDS, false) >>>> .setDateFormat(new SimpleDateFormat(DATE_FORMAT))); >>>> log.info<http://log.info>( "FooBar API CustomJacksonJsonProvider >>>> initialized successfully" ); >>>> } catch (Exception e) { >>>> e.printStackTrace(); >>>> log.error( "FooBar API CustomJacksonJsonProvider initialization failed" ); >>>> } >>>> } >>>> @Override >>>> public boolean isReadable(Class<?> aClass, Type type, >>>> Annotation[] annotations, MediaType mediaType) { >>>> if (FindAnnotation.findAnnotation(aClass, annotations, >>>> NoJackson.class) != null) >>>> return false; >>>> return super.isReadable(aClass, type, annotations, mediaType); >>>> } >>>> >>>> @Override >>>> public boolean isWriteable(Class<?> aClass, Type type, >>>> Annotation[] annotations, MediaType mediaType) { >>>> if (FindAnnotation.findAnnotation(aClass, annotations, >>>> NoJackson.class) != null) >>>> return false; >>>> return super.isWriteable(aClass, type, annotations, mediaType); >>>> } >>>> @Override >>>> public void writeTo(Object value, Class<?> type, Type genericType, >>>> Annotation[] annotations, MediaType mediaType, >>>> MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream) >>>> throws IOException, WebApplicationException { >>>> super.writeTo(value, type, genericType, annotations, mediaType, >>>> httpHeaders, entityStream); >>>> } >>>> >>>> } >>>> >>>> >>>> @Provider >>>> public class CustomObjectMapperProvider implements >>>> ContextResolver<ObjectMapper> { >>>> private ObjectMapper mapper; >>>> public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; >>>> private Logger log = Logger.getLogger( this.getClass() ); >>>> >>>> public CustomObjectMapperProvider() throws Exception { >>>> this.mapper = new ObjectMapper(); >>>> mapper.registerModule( new Hibernate4Module().configure( >>>> Hibernate4Module.Feature.FORCE_LAZY_LOADING, false ) ); >>>> mapper.setDateFormat( new SimpleDateFormat(DATE_FORMAT) ); >>>> mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, >>>> false); >>>> mapper.setSerializationInclusion( Include.NON_NULL); >>>> mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); >>>> mapper.configure( MapperFeature.AUTO_DETECT_FIELDS, true ); >>>> mapper.setAnnotationIntrospector( new JacksonAnnotationIntrospector() ); >>>> log.info<http://log.info>( "FooBar API CustomObjectMapperProvider >>>> initialized successfully" ); >>>> } >>>> public ObjectMapper getContext(Class<?> objectType) { >>>> log.info<http://log.info>( "getMapper called" ); >>>> return mapper; >>>> } >>>> } >>>> >>>> >>>> But it seems my ObjectMapper context resolver isn't being called when >>>> an object mapper is needed. >>>> >>>> By the way, the source for the POJO involved in the exception can be >>>> found here: >>>> https://github.com/resteasy/Resteasy/blob/master/jaxrs/security/skeleton-key-idm/skeleton-key-core/src/main/java/org/jboss/resteasy/skeleton/key/representations/AccessTokenResponse.java >>>> >>>> >>>> Any help would be greatly appreciated. >>>> >>>> Thanks. >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Try New Relic Now & We'll Send You this Cool Shirt >>>> New Relic is the only SaaS-based application performance monitoring service >>>> that delivers powerful full stack analytics. Optimize and monitor your >>>> browser, app, & servers with just a few lines of code. Try New Relic >>>> and get this awesome Nerd Life shirt!http://p.sf.net/sfu/newrelic_d2d_may >>>> >>>> >>>> _______________________________________________ >>>> Resteasy-users mailing list >>>> Resteasy-users@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/resteasy-users >>> ------------------------------------------------------------------------------ >>> How ServiceNow helps IT people transform IT departments: >>> 1. A cloud service to automate IT design, transition and operations >>> 2. Dashboards that offer high-level views of enterprise services >>> 3. A single system of record for all IT processes >>> http://p.sf.net/sfu/servicenow-d2d-j >>> >>> >>> >>> _______________________________________________ >>> Resteasy-users mailing list >>> Resteasy-users@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/resteasy-users >>> > > > -- > Pascal Gélinas | Software Developer > *Nu Echo Inc. * > 1435, Saint-Alexandre, Suite 200, Montreal (Qc),Canada, H3A 2G4 > Tel: (514) 861-3246 ext 4234 | FAX: (514) 861-1676 > pascal.geli...@nuecho.com <mailto:pascal.geli...@nuecho.com> | > www.nuecho.com <http://www.nuecho.com/> | blog.nuecho.com > <http://blog.nuecho.com/> > > *Because performance matters. * > > > ------------------------------------------------------------------------------ > How ServiceNow helps IT people transform IT departments: > 1. A cloud service to automate IT design, transition and operations > 2. Dashboards that offer high-level views of enterprise services > 3. A single system of record for all IT processes > http://p.sf.net/sfu/servicenow-d2d-j > > > > _______________________________________________ > Resteasy-users mailing list > Resteasy-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/resteasy-users >
-- Bill Burke JBoss, a division of Red Hat http://bill.burkecentral.com ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. A cloud service to automate IT design, transition and operations 2. Dashboards that offer high-level views of enterprise services 3. A single system of record for all IT processes http://p.sf.net/sfu/servicenow-d2d-j _______________________________________________ Resteasy-users mailing list Resteasy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/resteasy-users