O objetivo deste documento é mostrar como realizar testes utilizando o web service do Softswitch.
Foi utilizado a O teste foi realizado na versão 5 .4 e utilizado como base o documento Integração - PCRT 5.0 / PCRT 56.1 / PCRT 5.2.
O softswitch utiliza o padrão de arquitetura RESTSOAP, para testar iremos utilizar o Soap Ui:
...
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:
...
Expand | ||
---|---|---|
| ||
|
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:server.log
...
Code Block |
---|
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:
Code Block |
---|
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:
Code Block |
---|
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.
...
DICA:
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.
Code Block |
---|
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>' |