Dificuldades com Web Service



  • Bom dia :D ! Estou com o seguinte problema:
    Tem um sistema aqui da empresa que é desenvolvido no Maker 3.9 e preciso criar um fluxo e publica-lo como serviço para que possa ser consumido por uma outra aplicação que ainda está em desenvolvimento. OK, publicar o fluxo como serviço foi fácil de fazer seguindo as orientações do manual, mas estou usando o SoapUI para testar o webservice e quando testo a comunicação o SoapUI me retorna o seguinte XML:
    [code]<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode> <faultstring>no SOAPAction header!</faultstring> <detail> <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">NOMEDOHOST</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>[/code] Quando vou olhar o WSDL pude verificar que, realmente, o soapAction está com valor [b]""[/b], esse erro parou de acontecer quando eu criei outro fluxo com os mesmos parâmetros de entrada e o publiquei como Web Service, mas daí eu me deparei com outro problema: Eu não consegui retornar um objeto XML para o SoapUI (a resposta que obtenho é NADA, literalmente, uma tela em branco), tudo que consigo retorna é texto e outros tipos mais básicos de dados, não consigo retornar uma estrutura de XML que tentei fazer com Mapa, Lista e combinações dos dois.
    Daí eu pergunto: o que estou fazendo de errado? Os Web Services do Maker só funcionam assim mesmo? Como vou saber qual fluxo será executado caso eu faça uma chamada desse Web Service se eu não possuo o soapAction? Existe algum modo melhor de utilizar os web services do Maker?

    Desde já, obrigado! ;)

    [b]!---------------------------------------UPDATE------------------------------------![/b]
    Boa tarde!
    Descobri porque o erro acontecia, mas ainda assim fiquei sem entender o porquê: Eu publiquei o fluxo como Web Service, eu permiti Acesso Externo e marquei como Web. Assim que removi a opção Web eu consegui obter uma resposta mais satisfatória no SoapUI:
    [code]<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:Wss4fornecResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://DefaultNamespace"> <Wss4fornecReturn href="#id0"/> </ns1:Wss4fornecResponse> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" soapenc:arrayType="xsd:anyType[3]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <multiRef href="#id1"/> <multiRef href="#id2"/> <multiRef href="#id3"/> </multiRef> <multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <multiRef xsi:type="soapenc:string">cpfcnpj</multiRef> <multiRef xsi:type="soapenc:string">TESTE</multiRef> </multiRef> <multiRef id="id3" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <multiRef xsi:type="soapenc:string">razaosocial</multiRef> <multiRef xsi:type="soapenc:string">TESTE</multiRef> </multiRef> <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <multiRef xsi:type="soapenc:string">codigofornec</multiRef> <multiRef xsi:type="soapenc:string">TESTE</multiRef> </multiRef> </soapenv:Body> </soapenv:Envelope>[/code] Mas as minhas dúvidas anteriores permanecem :lol: se alguém souber me esclarecer algumas destas questões, por favor, me ajudem!

    Desde já, obrigado!


  • Trabalhe com retorno simples no XML.
    Textos, números, etc...
    Se for um XML, retorne o texto dele e na outra ponta, você transforma em XML.
    Se não me engano, retornar objeto dá, mas é mais trabalhoso.


  • [quote="andersonleal"]Trabalhe com retorno simples no XML.
    Textos, números, etc...
    Se for um XML, retorne o texto dele e na outra ponta, você transforma em XML.
    Se não me engano, retornar objeto dá, mas é mais trabalhoso.[/quote] Anderson, eu já estava pensando nesta possibilidade mesmo que, apesar de não ser a mais "bonitinha", é a mais rápida e viável no momento :? .


  • Estou tentando publicar um fluxo como webservices, mais fiquei como um dúvida.
    Eu crio uma lista de registros de uma tabela e coloco como retorno ou devo converter essa lista para xml e colocar como retorno?


  • [quote="joserodrigues"]Estou tentando publicar um fluxo como webservices, mais fiquei como um dúvida.
    Eu crio uma lista de registros de uma tabela e coloco como retorno ou devo converter essa lista para xml e colocar como retorno?[/quote] Recentemente, descobri um jeito mais rápido, prático e menos feioso para utilizar os webservices do Maker que é acessando os fluxos diretamente pela URL com envio de parâmetros via métodos [b]GET [/b]e [b]POST [/b]e utilizando uma string (texto, letras) no formato [b]JSON[/b]. Para isso faça o seguinte:

    1. Crie o fluxo;
    2. Utilize a função "Obter Parâmetro da Requisição" para obter os parâmetros que você quer enviar para o seu sistema;
    3. Crie uma variável do tipo Variante ou Letras (pode ser qualquer um dos dois tipos, mas eu utilizo Variante no retorno pois eu posso retornar um texto muito grande) para defini-la no retorno do fluxo;
    4. Salve o fluxo na camada Servidor;
    5. Clique com o botão direito no fluxo e habilite as propriedades "Permitir acesso externo", "Web" e "Publicar como Webservice" (tudo isso para que você tenha acesso total ao fluxo e/ou não precise está logado no sistema)
    6. Salve o Projeto e reinicie o Webrun;
    7. E pronto! ;)

    Para que você possa trabalhar com uma quantidade de dados maior como num XML, crie o fluxo pensando em trabalhar com [b]JSON[/b].
    Você pode chamar o fluxo para testar da seguinte forma:
    [i]http://[IP]:[Porta]/webrun/[Nome do fluxo].rule?sys=[Sigla do sistema]&parametro1=valor1&parametro2=valor2&parametro3=textoemjson[/i]
    O parâmetro na URL [i]sys[/i] é obrigatório. Usando o método GET você fica limitado a passar os parâmetros pela URL, recomendo fazer isso via método POST.

    Se tiver alguma dúvida pode olhar o link: [url]http://suporte.softwell.com.br/maker/manual_3/pt/dicas_e_truques/maker/como_acessar_um_fluxo_web.htm[/url]

Log in to reply