I have not tested Skeleton key with Wildfly nor the Jackson2 provider. 
I had some classloading issues when trying to use Jackson2 with AS7 and 
Resteasy so I never changed Skeleton key to use Jackson2.

Getting Skeleton key to work with Wildfly is on my todo list, but I'm 
currently working on passing the TCK.

On 5/25/2013 6: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
>

-- 
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com

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

Reply via email to