在SpringSocial中从Facebook获取fetchUserProfile时出错

时间:2016-01-05 12:50:40

标签: java spring facebook jackson

我在我的网络服务器中使用Spring框架。我正在使用的一些库的版本,我认为重要的是:

春季4.1.6.RELEASE
Spring Social Facebook 2.0.2.RELEASE
春季社会1.1.4.RELEASE
杰克逊2.5.3

当我从登录的Facebook收到accessToken,并尝试getUserProfile()时,我遇到以下异常:

    jan 05, 2016 12:13:52 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [/fr-server] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://graph.facebook.com/v2.3/me?fields=id%2Cabout%2Cage_range%2Cbio%2Cbirthday%2Ccontext%2Ccover%2Ccurrency%2Cdevices%2Ceducation%2Cemail%2Cfavorite_athletes%2Cfavorite_teams%2Cfirst_name%2Cgender%2Chometown%2Cinspirational_people%2Cinstalled%2Cinstall_type%2Cis_verified%2Clanguages%2Clast_name%2Clink%2Clocale%2Clocation%2Cmeeting_for%2Cmiddle_name%2Cname%2Cname_format%2Cpolitical%2Cquotes%2Cpayment_pricepoints%2Crelationship_status%2Creligion%2Csecurity_settings%2Csignificant_other%2Csports%2Ctest_group%2Ctimezone%2Cthird_party_id%2Cupdated_time%2Cverified%2Cvideo_upload_limits%2Cviewer_can_send_gift%2Cwebsite%2Cwork":No content to map due to end-of-input
 at [Source: ; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: ; line: 1, column: 1]] with root cause
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: ; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
    at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3607)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3547)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2578)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.extractErrorFromResponse(FacebookErrorHandler.java:101)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:58)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:614)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:570)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:545)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:253)
    at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:214)
    at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:209)
    at org.springframework.social.facebook.api.impl.UserTemplate.getUserProfile(UserTemplate.java:53)
    at org.springframework.social.facebook.api.impl.UserTemplate.getUserProfile(UserTemplate.java:49)
    at org.springframework.social.facebook.connect.FacebookAdapter.fetchUserProfile(FacebookAdapter.java:51)
    at org.springframework.social.facebook.connect.FacebookAdapter.fetchUserProfile(FacebookAdapter.java:31)
    at org.springframework.social.connect.support.AbstractConnection.fetchUserProfile(AbstractConnection.java:111)
    at fr.server.login.controller.RegistrationController.registrationFacebook(RegistrationController.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

我不明白为什么,因为我的上一个版本在我的网站上工作正常,直到昨天。现在这个版本也得到了同样的错误。我的ID和Facebook的密钥是正确的。

看看我的代码部分工作:

    Connection<Facebook> connection = (Connection<Facebook>) providerSignInUtils.getConnectionFromSession(request);
    ConnectionKey providerKey = connection.getKey();

    LOGGER.info("User name {} " , connection.getDisplayName());
    LOGGER.info("User url {} " , connection.getProfileUrl());
    LOGGER.info("Provider {} " , providerKey.getProviderId().toUpperCase());

    /* ERROR HERE IN THESE TWO LINES*/
    LOGGER.info("objeto {} " , connection.fetchUserProfile().toString());   
    LOGGER.info("objeto {} " , connection.getApi().userOperations().getUserProfile().toString());

我现在不知道该怎么做..我搜索了但是我没有成功找到解决方案。谁能帮我? 谢谢。

1 个答案:

答案 0 :(得分:0)

事实证明这是一个奇怪的Facebook问题。 Facebook是一个可以有bug的系统,就像任何其他系统一样。当人们看到异常时,他应该研究案例,以了解Facebook如何未能达到预期目标。当知道这一点时,应该修改他/她的期望是否有效。如果没有,那么就会学到一些关于Facebook的东西,并且应该重新考虑期望。如果是的话,那么人们应该在等待问题得到解决的同时考虑可能的解决办法,但是,为了提高服务的整体质量,应该向Facebook报告这些问题。根据我的经验,Facebook的支持非常快。

为了将上述观点应用于此案,威廉观察到了一个异常现象。从逻辑上讲,他试图修复它并搜索可能的原因,因为他的用户期望与其他用户一样处理似乎是有效的。过了一会儿,他找到了可能遇到同样问题的人,并得出结论,这可能是Facebook的bug或者是他的用户的一些设置。在任何一种情况下,他肯定都试图找出自己的问题,所以向Facebook发票是完全有效的。