Phoenix Criminal Lawyer

Spring SOA, REST e Open Graph Facebook

Conforme deixei um aperitivo em meu post anterior :), neste vou deixar um exemplo de como efetuar login no Facebook através de uma requisição informando um access_token como validador. Basicamente a funcionalidade desta aplicação tem por receber um token válido gerado pelo facebook e retornar os dados desejados do usuário.

Crie um projeto SOA com o composite em branco. Antes de mais nada, já vamos criar nossas classes java para então prosseguirmos com a aplicação do Spring Contex. Clique com o botão direito em Application Sources > New, procure por interface e adicione uma interface de modo a ficar conforme o código apresentado abaixo.

public String[] InterFace(String accessToken);

Adicione a classe onde sua interface será implementada seguindo a mesma estrutura de criação. Implemente sua interface e já cria uma variável com o nome que desejar, só que passando o valor conforme apresentado:

private static String facebookService = "https://graph.facebook.com/me?access_token=";

O valor desta variável será o responsável por validar o access_token que será informado e retornar os dados com sucesso. Ela é composta por “../me..” que é a informação do usuário, por exemplo, um ID, e também é composta por “…?access_token=” que deve informando pela aplicação desenvolvida no facebook.

OBS.: Para esse tutorial, estou levando em conta que você já tenha uma aplicação criada junto a parte de developers do facebook e que sua aplicação já esteja efetuando suas funcionalidades esperadas. Ou seja, é o resultado desta sua aplicação que tem o valor do access_token que deverá ser informado para esta nossa aplicação.

Prosseguindo com a nossa implementação, crie um método que será responsável por efetuar a construção da url e chama-lá junto ao facebook para autenticar. A seguir irei apresentar alguns trechos deste método, onde primeiramente efetuar a declaração do método para receber o token que será informado e efetuo as declarações necessárias durante a implementação.

private static String facebookConnection(String token) {
HttpURLConnection connection = null;
OutputStream wr = null;
BufferedReader rd = null;
StringBuilder sb = null;
String line = null;
URL serverAddress = null;

A seguir, vamos efetuar a construção da nossa url onde é informado a variável que declaramos logo no início e depois passamos o token que receberá o valor para concluir o conteúdo.

serverAddress = new URL(facebookService + token);

Depois, abrimos a conexão e setamos o request com o método “GET“:

connection = (HttpURLConnection)serverAddress.openConnection();
connection.setRequestMethod("GET");

Faça os procedimentos com o InputStreamReader e efetue a leitura do retorno, conforme seus conhecimentos. Implementado este método, declare um novo que será responsável por extrair o conteúdo de retorno do JSON.
Antes de continuar, vale deixar uma ressalva neste ponto que deixei passar no início deste tutorial. Para efetuar a manipulação do JSON estou usando a biblioteca json-simple, para mais informações acesse: http://code.google.com/p/json-simple/.

Aqui, apresento como ficou a declaração do meu método que fará a extração dos dados do JSON de retorno:

private String[] extractFacebookFromJSON(String response) {

     String facebook[] = new String[2];

     if (response != null) {
         final JSONObject jsonObj = (JSONObject)JSONValue.parse(response);

         final String id = (String)jsonObj.get("id");
         facebook[0] = id;

         final String first_name = (String)jsonObj.get("first_name");
         facebook[1] = first_name;
     }
     return facebook;
}

Note que apenas estou extraindo os o “ID” e o “FIRST_NAME” que constam no facebook, mas você pode extrair qualquer dado, conforme constam em https://developers.facebook.com/tools/explorer.

Volte para o composite, adicione o componete Spring Context, para isso, navegue pelo Componente Pallete

Component_Spring

Agora abra o ComponentType criado pelo Spring e adicione o path onde encontra-se sua Interface, veja:

<service name="facebookMediator">
    <interface.java interface="br.com.gualda.soa.spring.facebook.IFacebook"/>
  </service>

Abra o XML do Spring que acabou de criar e adicione o bean preenchendo com o ID e a classe que consta sua implementação.

<bean id="facebook"
    class="br.com.gualda.soa.spring.facebook.FacebookImp"/>

Em seguida adicione a tag “service” que será responsável por linkar com sua Interface criada, para isso:

<sca:service name="facebookMediator" target="facebook" 
                type="br.com.gualda.soa.spring.facebook.IFacebook"/>

Crie um XSD que tenha como entrada uma string que receberá o token, e na saída duas strings que receberão o ID e o First_Name. Depois, adicione o Mediator no composite, faça a ligação junto ao xsd criado e em seguida arraste o spring ao mediator. Se tudo ocorrer como esperado, seu composite está assim:   Composite_Spring
Abra o mediator e crie os transformations de entrada e saída. Faça a ligação de entrada e de retorno. No caso do retorno, como o retorno é um JSON, você irá precisar atribuir a posição de cada elemento de retorno. Lembrando que neste nosso tutorial estamos apenas pegando o “ID” e o “FIRST_NAME”. Veja abaixo o trecho do xlt de retorno:

<fbk:outputFacebook>
    <fbk:id>
        <xsl:value-of select="/tns:InterFaceResponse/return[1]"/>
    </fbk:id>
    <fbk:first_name>
        <xsl:value-of select="/tns:InterFaceResponse/return[2]"/>
    </fbk:first_name>
</fbk:outputFacebook>

Agora, faça o deploy. Ao executar você verá uma tela conforme apresentada abaixo:

Request

Se tudo ocorrer conforme o esperado, o returno esperado é apresentado abaixo, onde temos o id e first_name.

Response

O projeto pode ser baixando através do gitHub: https://github.com/bgualda/GetFacebookRest

Fontes:

Spring Context: http://docs.oracle.com/cd/E15586_01/integration.1111/e10224/sca_spring.htm
Facebook Developers: https://developers.facebook.com/

Testebot