O objetivo deste documento é mostrar como realizar testes utilizando o web service do Softswitch.
O teste foi realizado na versão 5 e utilizado como base o documento Integração - PCRT 5.6.1
O softswitch utiliza o padrão de arquitetura SOAP, para testar iremos utilizar o Soap Ui:
Ao iniciar o Soap Ui, criaremos um novo projeto:
Inserindo um link wsdl, ele irá procurar todos os requests disponíveis para serem utilizados. No exemplo foi inserido o link http://IP_INTERACE:PORTA/SipPulse/SubscriberWS?wsdl
mostrando todos requests relacionados à Subscriber
:
Na documentação de integração terá todas informações necessárias contendo os links e variáveis que devem ser utilizadas. Seguem exemplos: DIDs: Revendas: http://sippulse.com:8080/SipPulse/ResellerWS?wsdl Hunt Group: |
Após inserir o link deve aparecer a lista de requests disponíveis:
Para realizar a insersão de um assinante, basta dar dois cliques no request e irá abrir uma nova tela contendo todos dados disponíveis para serem enviados no request:
Preencher também as informações do usuário que irá enviar o request:
OBS: O usuário utilizado pela API é o mesmo utilizado para acessar a interface web. Caso haja necessidade deve ser criado um novo usuário na interface web:
|
Identificando erros:
Os logs de insersão de dados podem ser consultados no log do glassfish, no exemplo a variável blockCollectCalls é do tipo boolean e é requirida para insersão de assinantes. No request foi enviado sem definir um valor:
cd /opt/glassfish/domains/domain1/logs tail -f server.log |
Ao clicar em executar no Soap UI é gerado um log no glassfish. Através dele é possível analisar e identificar a variável que está causando a falha:
at br.com.voffice.sippulse.ws.dto.SubscriberDTO$JaxbAccessorM_isBlockCollectCalls_setBlockCollectCalls_boolean.set(MethodAccessor_Boolean.java:59) |
Outro caso que podemos encontrar na API SOAP é quando não há um usuário administrador no SSW e tentamos enviar uma requisição.
Não existe um log especificando o erro explicitamente, mas notamos a seguinte mensagem:
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0 |
O erro TransactionRolledbackLocalException
ocorre porque o GlassFish reverteu a transação devido a uma ArrayIndexOutOfBoundsException
, que acontece quando o código tenta acessar um índice inválido de um array ou lista vazia. Isso pode estar relacionado a dados ausentes ou inválidos (como login e senha no XML). Para resolver, valide os dados de entrada, trate exceções adequadamente no EJB, e revise os logs para entender melhor a origem do problema.
Após entender quais campos são necessários para enviar a requisição você pode montar um POST utilizando o comando Curl:
Atente-se aos campos obrigatórios como Rateplan e Profile.
curl -X POST http://45.229.107.102:8080/SipPulse/SubscriberWS \ -H "Content-Type: text/xml; charset=utf-8" \ -d '<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.sippulse.voffice.com.br/"> <soapenv:Header/> <soapenv:Body> <ser:insertSubscriber> <subscriber> <accountCode>4933473498-API</accountCode> <activeIncomingCalls>1</activeIncomingCalls> <activeOutgoingCalls>1</activeOutgoingCalls> <addServiceHeader>1</addServiceHeader> <address>12312312</address> <areaCode>48</areaCode> <blockAnonymousCalls>0</blockAnonymousCalls> <blockCollectCalls>0</blockCollectCalls> <blockEntry0303>1</blockEntry0303> <callFwd></callFwd> <callLimit>0</callLimit> <callsOnlyByIp>1</callsOnlyByIp> <city>Teste</city> <cityCode>2892</cityCode> <complement></complement> <contractNumber></contractNumber> <copyPassertedRpid>0</copyPassertedRpid> <countryCode>55</countryCode> <document></document> <domain>sip.atplus.com.br</domain> <emailAddress>testeapi@teste.com</emailAddress> <firstName>teste</firstName> <fwdBusy>0</fwdBusy> <id></id> <lastName></lastName> <localArea>48</localArea> <lowCreditLimit>0</lowCreditLimit> <lowCreditNotification>0</lowCreditNotification> <mobile></mobile> <noAnswer></noAnswer> <number></number> <password>12345</password> <passwordPortal>12345</passwordPortal> <phone></phone> <profile>DIDS_OUTROS</profile> <quarter></quarter> <ratePlanId>5</ratePlanId> <resellerBillingType></resellerBillingType> <resellerId></resellerId> <resellerMarkup>0</resellerMarkup> <resellerRatePlanId></resellerRatePlanId> <rings>30</rings> <rpid></rpid> <softphoneAllowed>1</softphoneAllowed> <state></state> <username>4933473498-API</username> <validateSource0303>0</validateSource0303> <voiceMailPassword>12345</voiceMailPassword> <voicemail>0</voicemail> <zip></zip> </subscriber> <principal> <login>USUARIO</login> <password>#qiourtyeuiwp#AAAAAAAAAAAA</password> </principal> </ser:insertSubscriber> </soapenv:Body> </soapenv:Envelope>' |