2016-02-08 6 views
1

У меня есть рабочая весна mvc webapp и она основана на xml, поэтому мне приходится использовать те же процедуры, а не «чистые java-конфиги».Интеграция Spring Socials (Facebook) с Spring MVC на основе XML

Я пытаюсь интегрировать подписку facebook в свое приложение, и я попытался следовать многим учебникам, но не смог заставить их работать.

Вот одна из моих попыток: (https://spring.io/guides/gs/accessing-facebook/)

EDIT:

Мой XML в настоящее время это:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:facebook="http://www.springframework.org/schema/social/facebook" 
    xmlns:twitter="http://www.springframework.org/schema/social/twitter" 
    xmlns:social="http://www.springframework.org/schema/social" 
    xmlns:linkedin="http://www.springframework.org/schema/social/linkedin" 
    xmlns:c="http://www.springframework.org/schema/c" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/social/facebook http://www.springframework.org/schema/social/spring-social-facebook.xsd 
     http://www.springframework.org/schema/social/linkedin http://www.springframework.org/schema/social/spring-social-linkedin.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/social/twitter http://www.springframework.org/schema/social/spring-social-twitter.xsd 
     http://www.springframework.org/schema/social http://www.springframework.org/schema/social/spring-social.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> 

     <bean id="connectionFactoryLocator" 
       class="org.springframework.social.connect.support.ConnectionFactoryRegistry"> 
      <property name="connectionFactories"> 
       <list> 

        <bean class="org.springframework.social.facebook.connect.FacebookConnectionFactory"> 
         <constructor-arg value="${facebook.clientId}" /> 
         <constructor-arg value="${facebook.clientSecret}" />     
        </bean> 
       </list> 
      </property> 
     </bean> 

     <bean id="usersConnectionRepository" 
       class="org.springframework.social.connect.jdbc.JdbcUsersConnectionRepository"> 
      <constructor-arg ref="dataSource" /> 
      <constructor-arg ref="connectionFactoryLocator" /> 
      <constructor-arg ref="textEncryptor" /> 
     </bean> 

     <bean id="connectionRepository" factory-method="createConnectionRepository" 
       factory-bean="usersConnectionRepository" scope="request"> 
      <constructor-arg value="#{request.userPrincipal.name}" /> 
      <aop:scoped-proxy proxy-target-class="false" /> 
     </bean> 

     <bean class="org.springframework.social.connect.web.ConnectController"> 
      <!-- relies on by-type autowiring for the constructor-args --> 
     </bean> 

     <bean class="org.springframework.social.connect.web.ConnectController"> 
      <!-- relies on by-type autowiring for the constructor-args --> 
      <property name="applicationUrl" value="${application.url}" /> 
     </bean> 



    <facebook:config app-id="962223610477458" app-secret="b7dfec28b08ac4e8c2a09cbac4662c15" app-namespace="setelog_selectandwin" /> 

</beans> 

HomeController:

@Controller общественного класса HomeController {

private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 

private Facebook facebook; 
private ConnectionRepository connectionRepository; 

@Inject 
public HomeController(Facebook facebook, ConnectionRepository connectionRepository) { 
    this.facebook = facebook; 
    this.connectionRepository = connectionRepository; 
} 

/** 
* Simply selects the home view to render by returning its name. 
*/ 
@RequestMapping(value = "/", method = RequestMethod.GET) 
public String home(Locale locale, Model model) { 
    if (connectionRepository.findPrimaryConnection(Facebook.class) == null) { 
      return "redirect:/connect/facebook"; 
     } 

     model.addAttribute("facebookProfile", facebook.userOperations().getUserProfile()); 
     PagedList<Post> feed = facebook.feedOperations().getFeed(); 
     model.addAttribute("feed", feed); 
     return "facebook/hello"; 
} 

}

NOW ошибка не Вызванный: org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет боб с именем 'scopedTarget.connectionFactoryLocator' определяется

Если удалить й Facebook: конфиг тег это дает мне следующую ошибку, потому что такой фасоли нет:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.social.facebook.api.Facebook] found for dependency: expected at least 1 bean which 

Любые предложения?

+0

Какую версию весеннего каркаса вы используете? –

ответ

2

Вам не нужно добавлять интерфейс facebook в качестве класса в xml. Вместо этого создайте FacebookConnectionFactory, используя идентификатор клиента facebook и секрет, используя xml или java-код.

@Configuration 
public class SocialConfig implements SocialConfigurer { 

    @Override 
    public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) { 
     cfConfig.addConnectionFactory(new FacebookConnectionFactory(
      env.getProperty("facebook.clientId"), 
      env.getProperty("facebook.clientSecret"))); 
    } 

    ... 
} 

или

Использование конфигурации XML пространство имен Spring Social на Facebook:

<facebook:config app-id="${facebook.clientId}" 
       app-secret="${facebook.clientSecret}" 
       app-namespace="socialshowcase" /> 

См: Spring Social Facebook Reference

+2

Добавление к тому, что уже упоминалось в @EvaMariam. проверьте следующую конфигурацию xml https://github.com/spring-projects/spring-social-samples/blob/master/attic/spring-social-showcase-xml/src/main/webapp/WEB-INF/spring/social .xml – shazin

+0

Спасибо за ваши предложения ребята и @shazin, что ссылка была очень полезной, но все еще не может заставить ее работать. Я обновил свой вопрос. – Kunal

+0

Обновлен мой вопрос. благодаря – Kunal

0

взяты из примера весной социального быстрого старта. Возможно, вы не можете вводить его самостоятельно, вместо этого вы должны использовать заводскую как метод:

@Bean 
@Scope(value="request", proxyMode=ScopedProxyMode.INTERFACES) 
public Facebook facebook() { 
    return connectionRepository().getPrimaryConnection(Facebook.class).getApi(); 
} 

он нуждается в других зависимостей, нет смысла копировать-вставить их все здесь. Посмотрите на: https://github.com/spring-projects/spring-social-samples/blob/master/spring-social-quickstart/src/main/java/org/springframework/social/quickstart/config/SocialConfig.java