PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → WX - SOAP XML Incompleto não funciona, voce tem que informar o caminho completo
WX - SOAP XML Incompleto não funciona, voce tem que informar o caminho completo
Iniciado por BOLLER ADRIANO, ago., 02 2016 6:10 PM - 2 respostas
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em agosto, 02 2016 - 6:10 PM
Prezados,

SOAP XML Incompleto não funciona, você tem que informar o caminho completo

O segredo é colocar o HEADER completo informando o médoto a ser usado.

Note esse código:

//Envelope
Xml_SEND is string = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM">
<soapenv:Header/>
<soapenv:Body>
<urn:ConsultarPosicaoTaxi soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">v001</cod_client_celula>
<num_corrid xsi:type="xsd:int">v002</num_corrid>
<dat_hora_proces xsi:type="xsd:string">v003</dat_hora_proces>
<num_proces xsi:type="xsd:int">v004</num_proces>
</urn:ConsultarPosicaoTaxi>
</soapenv:Body>
</soapenv:Envelope>
]


Está incompleto pois nao sei o nome do método no Header, devo então informar:

//Envelope
Xml_SEND is string = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#ConsultarPosicaoTaxi">
<soapenv:Header/>
<soapenv:Body>
<urn:ConsultarPosicaoTaxi soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">v001</cod_client_celula>
<num_corrid xsi:type="xsd:int">v002</num_corrid>
<dat_hora_proces xsi:type="xsd:string">v003</dat_hora_proces>
<num_proces xsi:type="xsd:int">v004</num_proces>
</urn:ConsultarPosicaoTaxi>
</soapenv:Body>
</soapenv:Envelope>
]


Esse código acima esta ok com o HEADER informando o método que será usado

Linha alterada:
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#ConsultarPosicaoTaxi">


Mais precisamente foi colocado esse dois codigos para informar o metodo que será usado no HEADER e no BODY do envelope:

#ConsultarPosicaoTaxi"


<urn:ConsultarPosicaoTaxi soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">


Use ferramentas como SOAP Ui ou similares para fazer a montagem do envelope de forma completa.

Dai é só usar o httprequest e httpgetresult

Programas similares ao SOAP UI:

Fonte: http://techonestop.com/soapui-alternative-for-webservice-testing

+ Apache JMeter

+ Postman

+ Wizdler

+ WebInject

+ HTTP Master

+ Spyport

+ Fiddler


Bons estudos

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, agosto, 02 2016 - 6:40 PM
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em agosto, 02 2016 - 6:41 PM
EXEMPLO COMPLETO

Procedure WS_ConsultarPosicaoTaxi(LOCAL NumCorrida, LOCAL TaxiIndice, LOCAL DebugSN)

//DebugSN = "S"

ChangeCharset(charsetOccidental) // SEM ACENTO

CodClienteCelula, nRetornoCodigo is int = 0
XML_Retorno, NumProces, VerificaLatitude is string = ""

IF NumCorrida > 0 THEN

//Variaveis de retorno
GloTaxiLatitude = ""
GloTaxiLongitude = ""

//Busca Cliente
HReadSeekFirst(t090_cliente_celular,t090_cliente_celular.A090_seq_cliente,1)
IF HFound(t090_cliente_celular) = True THEN


//NumProcess
NumProces = WS_ValidaRequisicao(t090_cliente_celular.A090_ddd_telefone,...
t090_cliente_celular.A090_num_telefone,...
0,...
0,...
"N")


//Envio
IF CodClienteCelula = "" OR CodClienteCelula = 0 THEN
CodClienteCelula = t090_cliente_celular.A090_cod_clientecelula
END

//Envelope
Xml_SEND is string = [
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:act297_RtPlusSSDM-IRtPlusSSDM#ConsultarPosicaoTaxi">
<soapenv:Header/>
<soapenv:Body>
<urn:ConsultarPosicaoTaxi soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<cod_client_celula xsi:type="xsd:int">v001</cod_client_celula>
<num_corrid xsi:type="xsd:int">v002</num_corrid>
<dat_hora_proces xsi:type="xsd:string">v003</dat_hora_proces>
<num_proces xsi:type="xsd:int">v004</num_proces>
</urn:ConsultarPosicaoTaxi>
</soapenv:Body>
</soapenv:Envelope>
]


//Replace
Xml_SEND = Replace(Xml_SEND,"v001",CodClienteCelula,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v002",NumCorrida,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v003",GloDataHora,IgnoreCase)
Xml_SEND = Replace(Xml_SEND,"v004",NumProces,IgnoreCase)

//info(NumProces)
//info(Xml_SEND)

Xml_Header is string = [
SOAPAction: "urn:act297_RtPlusSSDM-IRtPlusSSDM#ConsultarPosicaoTaxi"
]

Tamanho is int = Length(Xml_SEND)

Xml_Header = Replace(Xml_Header,"TamanhoString",Tamanho)

IF DebugSN = "S" THEN
IF InSimulatorMode() = False
fSaveBuffer("/mnt/sdcard/EnvioFV.TXT", Xml_SEND)
ELSE
fSaveBuffer("c:\EnvioFV.TXT", Xml_SEND)
END
Info(Xml_SEND)
END

HTTPTimeOut(GloTimeOut)

//BASE REAL
ok = HTTPRequest("http://199.124.60.220:8085/soap/IRtPlusSSDM","", "", Xml_SEND, "text/xml","","")

//BASE REAL
//ok = HTTPRequest("http://199.124.60.220:8086/soap/IRtPlusSSDM","", "", Xml_SEND, "text/xml","","")

IF ok = True

XML_Retorno = HTTPGetResult(httpResult)

XML_Retorno = WS_RemoveAcentos(XML_Retorno)

IF DebugSN = "S" THEN
IF InSimulatorMode() = False
fSaveBuffer("/mnt/sdcard/RetornoFV.TXT", XML_Retorno)
ELSE
fSaveBuffer("c:\RetornoFV.TXT", XML_Retorno)
END
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
3.651 mensagems
Popularité : +175 (223 votes)
Publicado em janeiro, 14 2021 - 12:08 AM
//Aqui define o layout do XML a ser enviado pelo POST

sXDoc is string = [
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:enderecodocliente:TMAtualizaOrdemFrete">
<soapenv:Header/>
<soapenv:Body>
<urn:MT_AtualizaOrdemFrete_Req_Conc>
<ordem>
<nr_ordem>?</nr_ordem>
<dados_pesagem>
<tara_veiculo>?</tara_veiculo>
<peso_bruto>?</peso_bruto>
<peso_liquido_real>?</peso_liquido_real>
</dados_pesagem>
<inf_item>
<id_etapa>?</id_etapa>
<nr_remessa>?</nr_remessa>
<item_remessa>?</item_remessa>
<id_material>?</id_material>
<quantidade>?</quantidade>
<unidade_med_qtde>?</unidade_med_qtde>
<inf_lote>
<lote>?</lote>
<qtde>?</qtde>
<unidade_lote>?</unidade_lote>
</inf_lote>
</inf_item>
<dados_analise>
<temperatura_tanque>?</temperatura_tanque>
<ap_veiculo_seta>?</ap_veiculo_seta>
<massa_especifica>?</massa_especifica>
<fator_reducao_vol>?</fator_reducao_vol>
<alcalinidade>?</alcalinidade>
<volume_20>?</volume_20>
<acidez_total>?</acidez_total>
<grau_inpm>?</grau_inpm>
<aspecto>?</aspecto>
</dados_analise>
<checklist>
<id_checklist>?</id_checklist>
</checklist>
<lacres>
@LACRE@
</lacres>
</ordem>
</urn:MT_AtualizaOrdemFrete_Req_Conc>
</soapenv:Body>
</soapenv:Envelope>
]

//Exemplo de como substituir parte do XML inicial por variáveis

sLacre is string = "<lacre>?</lacre>"

sXDoc = Replace(sXDoc,"@LACRE@",sLacre)

//webservice
req is httpRequest

req.URL = "http://servidor.cliente.com.br:50000/XISOAPAdapter/MessageServlet?senderParty=&senderService=BS_CONCEITTO_D&receiverParty=&receiverService=&interface=SI_AtualizaOrdemFrete_Out&interfaceNamespace=urn:enderecodocliente:TMAtualizaOrdemFrete"
req.User = "TESTE"
req.Password = "1234"
req.Header["SOAPAction"] = "Conceitto/Login"
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.42000)"
req.Method = httpPost
req.ContentType = "text/xml; charset=utf-8"

req.Content = sXDoc

cMyResponse is httpResponse = HTTPSend(req)

IF ErrorOccurred THEN
Error(ErrorInfo(errFullDetails))
ELSE
sXDoc = cMyResponse..Content
Info(sXDoc)
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/