【问题标题】:spring-social-linkedin compatibility with spring-social 1.1spring-social-linkedin 与 spring-social 1.1 的兼容性
【发布时间】:2014-10-10 08:41:13
【问题描述】:

我们有一个使用 spring-social-facebook、spring-social-twitter、spring-social-linkedin 和 spring-social-google 的项目。我们目前使用以下版本:

  • spring-social-core: 1.0.3
  • spring-social-facebook: 1.0.1
  • spring-social-twitter:1.0.5
  • spring-social-google:1.0.0
  • spring-social-linkedin: 1.0.0.RC1

我们正在尝试将 Facebook 和 Twitter 更新到 1.1 目前没有可用于 LinkedIn 和 Google+ 的 1.1 库,因此生成的版本是:

  • spring-social-core:1.1.0.RELEASE
  • spring-social-facebook:1.1.1.RELEASE
  • spring-social-twitter: 1.1.0.RELEASE
  • spring-social-google: 1.0.0
  • spring-social-linkedin: 1.0.0.RC1

自从进行此更改后,LinkedIn 登录不再有效,引发以下异常:

org.springframework.http.converter.HttpMessageNotReadableException'。 org.springframework.http.converter.HttpMessageNotReadableException:无法读取 JSON:没有找到适合类型 [简单类型,类 org.springframework.social.linkedin.api.LinkedInProfile] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?) 在 [来源:org.apache.http.conn.EofSensorInputStream@7659b0e8;行:2,列:3];嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:没有找到适合类型 [简单类型,类 org.springframework.social.linkedin.api.LinkedInProfile] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?) 在 [来源:org.apache.http.conn.EofSensorInputStream@7659b0e8;行:2,列:3] 在 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:170) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.read(MappingJackson2HttpMessageConverter.java:162) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:94) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:492) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:447) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:215) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.social.linkedin.api.impl.ProfileTemplate.getUserProfile(ProfileTemplate.java:79) ~[spring-social-linkedin-1.0.0.RC1.jar:na] 在 com.globaldawn.social.core.oauth.handler.LinkedInOAuthHandler.authenticate(LinkedInOAuthHandler.java:94) ~[social-core-4.0.4219.jar:na] 在 com.globaldawn.social.core.oauth.service.SocialOAuthService.authenticateWithSocialNetwork(SocialOAuthService.java:371) ~[social-core-4.0.4219.jar:na] 在 com.globaldawn.social.core.oauth.service.SocialOAuthService.authenticate(SocialOAuthService.java:160) ~[social-core-4.0.4219.jar:na] 在 com.globaldawn.social.web.controller.login.SocialLoginControllerUtil.login(SocialLoginControllerUtil.java:194) ~[classes/:na] 在 com.globaldawn.social.web.controller.login.SocialLoginControllerUtil.successfulLoginCallback(SocialLoginControllerUtil.java:117) ~[classes/:na] 在 com.globaldawn.social.web.controller.login.LinkedInSocialLoginController.successfulOAuthLoginCallback(LinkedInSocialLoginController.java:126) ~[classes/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_51] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_51] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_51] 在 java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_51] 在 org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) ~[spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:735) [social-rest-service.war:na] 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) [spring-webmvc-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:848) [social-rest-service.war:na] 在 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:698) [social-rest-service.war:na] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1506) [social-rest-service.war:na] 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494) [social-rest-service.war:na] 在 org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89) [spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486) [social-rest-service.war:na] 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138) [social-rest-service.war:na] 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:564) [social-rest-service.war:na] 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1096) [social-rest-service.war:na] 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:432) [social-rest-service.war:na] 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1030) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [social-rest-service.war:na] 在 com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:173) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [social-rest-service.war:na] 在 com.globaldawn.application.monitoring.RequestMetricsHandler.handle(RequestMetricsHandler.java:98) [social-rest-service.war:na] 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [social-rest-service.war:na] 在 org.eclipse.jetty.server.Server.handle(Server.java:445) [social-rest-service.war:na] 在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:268) [social-rest-service.war:na] 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229) [social-rest-service.war:na] 在 org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358) [social-rest-service.war:na] 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601) [social-rest-service.war:na] 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532) [social-rest-service.war:na] 在 java.lang.Thread.run(Thread.java:744) [na:1.7.0_51] 原因:com.fasterxml.jackson.databind.JsonMappingException:没有找到适合类型[简单类型,类 org.springframework.social.linkedin.api.LinkedInProfile] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?) 在 [来源:org.apache.http.conn.EofSensorInputStream@7659b0e8;行:2,列:3] 在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) ~[jackson-databind-2.3.2.jar:2.3.2] 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1078) ~[jackson-databind-2.3.2.jar:2.3.2] 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:268) ~[jackson-databind-2.3.2.jar:2.3.2] 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:124) ~[jackson-databind-2.3.2.jar:2.3.2] 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993) ~[jackson-databind-2.3.2.jar:2.3.2] 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2158) ~[jackson-databind-2.3.2.jar:2.3.2] 在 org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:167) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE] ...省略了58个常用框架

我们使用 gradle 进行依赖管理,在需要不同版本包的地方总是取最高版本号,所以 spring-social-linkedin 对 spring-social-core 1.0.3 的依赖被强制“升级”到 1.1.0。这兼容吗?是否可以在使用 spring-social-facebook 和/或 spring-social-twitter 1.1 版的项目中使用 spring-social-linkedin?

【问题讨论】:

    标签: spring-social-linkedin


    【解决方案1】:

    答案似乎是 spring-social-core v1.1 与 spring-social-linkedin v1.0 不兼容 - v1.0 使用 org.codehaus.jackson 序列化 JSON,而 v1.1 使用 com。更快的xml.jackson.core。

    如果您需要在同一模块中使用 spring-social-linkedin,则无法将 spring-social-facebook 或 spring-social-twitter 升级到 v1.1。

    这并不令人惊讶,但我们可能需要完全摆脱 spring-social,因为我们需要一些更新的功能并且无法分离不同的社交网络。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多