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:
- A mensagem deve começar, consoante o que se pretende, com a palavra Get ou Put, seguida de um parágrafo (\n).
- Número mínimo de parâmetros: 3 (Morada; Categoria; Descrição);
- Respeitar a ordem de parâmetros: parâmetros ordenados como indicado.
- Número de parâmetros opcionais: 2 (Valor da renda; Outras informações) - definição mútua ou exclusiva, mas mantendo a ordem;
- 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 Services → Web 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_
Para o serviço de envio de SMS
Seleccione o package que criou anteriormente e, clicando no botão direito faça New → RESTful 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); } }









