Sexta-feira, 09 de Dezembro, 2011

SMSMsg Service

 

Visão geral

Este serviço permite o envio e recepção de mensagens SMS através da rede GSM, estando a escolha de destinatário restringida a números pertencentes à operadora Vodafone Portugal. A recepção de mensagens possui um filtro que distingue 2 tipos de mensagens: pedidos (GET - pressupõe resposta ao pedido) e inserções (PUT - não pressupõe resposta); está especializada para gerar conteúdo XML baseado na informação proveniente das mensagens recebidas, mediante validação dessa informação.

Operações

As operações estão divididas em 2 serviços diferentes, para respectivo envio e recepção de mensagens.

Envio: getText(String destNr, String text)

  • Parâmetros de entrada
    • String destNr: destinatário da mensagem.
    • String text: conteúdo da mensagem.
  • Parâmetro de saída
    • String: feedback de sucesso/insucesso no envio da mensagem.

Recepção: getText(String destNr, String text, String keyword)

  • Parâmetros de entrada
    • String destNr: destinatário da mensagem.
    • String text: conteúdo da mensagem. Deve respeitar as Regras de Conteúdo.
    • String keyword: tipo de mensagem (GET/PUT).
  • Parâmetro de saída
    • String: confirmação de recepção ou mensagem inválida.

Regras de Conteúdo

A recepção de mensagens aceita apenas mensagens cujo conteúdo, independentemente do tipo de mensagem, respeita as seguintes regras:

  1. A mensagem deve começar, consoante o que se pretende, com a palavra Get ou Put, seguida de um parágrafo (\n).
  2. Número mínimo de parâmetros: 3 (Morada; Categoria; Descrição);
  3. Respeitar a ordem de parâmetros: parâmetros ordenados como indicado.
  4. Número de parâmetros opcionais: 2 (Valor da renda; Outras informações) - definição mútua ou exclusiva, mas mantendo a ordem;
  5. Separador de parâmetros: Parágrafo (\n).

Exemplo de mensagem

  • em código:
"Get\nAveiro\nQuarto\nCama de casal, lareira\n150\nRenda nao inclui despesas"
  • ou SMS:
"Get
Aveiro
Quarto
Cama de casal, lareira
150
Renda nao inclui despesas"
  • Resultado - Entrada gerada a partir da mensagem:
<?xml version='1.0' encoding='utf-8'?>
<House Entry>
	<Sender>+351919124379</Sender>
	<Address>Aveiro</Address>
	<Category>Quarto</Category>
	<Description>Cama de casal, lareira</Description>
	<Rent>150</Rent>
	<Other info>Renda nao inclui despesas</Other info>
</House Entry>

Instruções de utilização

Crie uma aplicação Web (Web Application). Adicione um novo package ao projecto, em Source Packages

Em seguida, clique em ServicesWeb Services → <botão direito do rato> → Add Web Service…

Seleccione “URL” e insira o endereço do WADL: http://essmss.dyndns-server.com:8080/ES_MsgSrv/resources/application.wadl

Para o serviço de envio de SMS

Seleccione o package que criou anteriormente e, clicando no botão direito faça NewRESTful Java Client… e na nova janela seleccione IDE Registered na caixa “Select the REST resource:” → Browse…ES_MsgSrv[send]. Será gerado o código necessário para chamar o serviço.

Exemplo de classe que utiliza o serviço:

SendSMSClient.java
package resourcs;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
 
/** Jersey REST client generated for REST resource:SendSMS [send]<br>  *  USAGE:<pre>  *        SendSMSClient client = new SendSMSClient();  *        Object response = client.XXX(...);  *        // do whatever with response  *        client.close();  *  </pre>  * @author Roberto  */
public class SendSMSClient {
    private WebResource webResource;
    private Client client;
    private static final String BASE_URI = "http://essmss.dyndns-server.com:8080/ES_MsgSrv/resources";
 
    public SendSMSClient() {
        com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
        client = Client.create(config);
        webResource = client.resource(BASE_URI).path("send");
    }
 
    public String getText(String text, String destNr) throws UniformInterfaceException {
        WebResource resource = webResource;
        if (text != null) {
            resource = resource.queryParam("text", text);
        }
        if (destNr != null) {
            resource = resource.queryParam("destNr", destNr);
        }
        return resource.accept(javax.ws.rs.core.MediaType.TEXT_PLAIN).get(String.class);
    }
 
    public void close() {
        client.destroy();
    }
 
    public static void main(String args[])
    {
        SendSMSClient client = new SendSMSClient();
        client.getText("Get\nAveiro\nQuarto\nLareira\n150", "918376770");
        client.close();
    }
}

Para o serviço de recepção de SMS

Devido ao carácter específico para o qual o serviço de recepção foi construído, a utilização do mesmo segue uma tipologia diferente do anterior. Os dados XML produzidos por este serviço são enviados para uma fila (queue) presente no Application Server denominada “SMSQUEUE”, e é acedendo a esta fila que é possível consumimr tais dados.

Segue um exemplo “académico” (já que apenas imprime os dados que recebe) de um cliente (consumidor) de dados provenientes da fila mencionada:

Consumer.java
package resourcs;
 
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
 
/**  *  * @author Roberto  */
public class Consumer {
    // URL of the JMS server
    private static String url = "tcp://essmss.dyndns-server.com:61616";
    // Name of the queue we will receive messages from
    private static String subject = "SMSQUEUE";
 
    public static void main(String[] args) throws JMSException {
        // Getting JMS connection from the server
        ConnectionFactory connectionFactory
            = new ActiveMQConnectionFactory(url);
        Connection connection = connectionFactory.createConnection();
        connection.start();
 
        // Creating session for seding messages
        Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
 
        // Getting the queue 'TESTQUEUE'
        Destination destination = session.createQueue(subject);
 
        // MessageConsumer is used for receiving (consuming) messages
        MessageConsumer consumer = session.createConsumer(destination);
 
        // Listen for arriving messages
        MessageListener listener = new MessageListener() {
            @Override
            public void onMessage(Message msg) { 
                System.out.println(msg.toString());
            }
        };
        consumer.setMessageListener(listener);
    }
}

 


Dezembro 2011
Dom
Seg
Ter
Qua
Qui
Sex
Sab

1
2
3

4
5
6
7
10

11
12
13
14
15
16
17

18
19
20
21
22
23
24

25
26
27
28
29
30
31


arquivos
2012

2011

pesquisar
 

blogs SAPO


Universidade de Aveiro

subscrever feeds