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
>

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

Reply via email to