Comunidad de diseño web y desarrollo en internet online

Consumir un Web Service formato SOAP desde Flex

Citar            
MensajeEscrito el 17 Dic 2008 08:01 pm
Hola chicos, tengo una duda existencial relacionado con un web service, he realizado pruebas con otros web service y funcan bien, pero con el web service que debo consumir no sé cómo hacerlo, por favor si pudieran ayudarme, bien dejo aca el web service:

Código :

<definitions targetNamespace="http://login.ejb/" name="LoginWeb">
<types>
    <xsd:schema>
         <xsd:import namespace="http://login.ejb/" schemaLocation="http://localhost:8081/Login-war/LoginWeb?xsd=1"/>
    </xsd:schema>
</types>
<message name="logUs">
    <part name="parameters" element="tns:logUs"/>
</message>
<message name="logUsResponse">
    <part name="parameters" element="tns:logUsResponse"/>
</message>
<portType name="LoginWeb">
    <operation name="logUs">
        <input message="tns:logUs"/>
        <output message="tns:logUsResponse"/>
    </operation>
</portType>
<binding name="LoginWebPortBinding" type="tns:LoginWeb">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="logUs">
        <soap:operation soapAction=""/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
</binding>
<service name="LoginWeb">
    <port name="LoginWebPort" binding="tns:LoginWebPortBinding">
        <soap:address location="http://localhost:8081/Login-war/LoginWeb"/>
    </port>
</service>
</definitions>


Acá dejo el código con el que pretendo consumir el web service, que si me funciona, y puedo ver un Object, pero no se como recorrer el resultado:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
   <mx:Script>
      <![CDATA[
         import mx.rpc.events.ResultEvent;
         private function callResultHandler(event:ResultEvent):void{
            var respuesta:Object = event.result;
            txtresult.text = respuesta.toString();            
         }
      ]]>
   </mx:Script>
   <mx:WebService id="ws" wsdl="http://localhost:8081/Login-war/LoginWeb?wsdl">
      <mx:operation name="logUs" result="callResultHandler(event)" />
   </mx:WebService> 
   <mx:Panel title="Login" width="385" height="239">
      <mx:Form>
         <mx:FormItem label="Usuario" required="true">
            <mx:TextInput id="txtUsuario" />
         </mx:FormItem>
         <mx:FormItem label="Clave" required="true">
            <mx:TextInput id="txtClave" />
         </mx:FormItem>
         <mx:FormItem label="Resultado">
            <mx:TextInput id="txtresult" editable="false" />
         </mx:FormItem>
      </mx:Form>
      <mx:ControlBar horizontalAlign="right">
         <mx:Button label="Ejecutar ws" click="ws.logUs(txtUsuario.text,txtClave.text)" />
      </mx:ControlBar>
   </mx:Panel>
</mx:Application>


Acá está el resultado que entrega el webservice:

Código :

Respuesta SOAP

    <?xml version="1.0" encoding="UTF-8"?>
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
    <ns2:logUsResponse xmlns:ns2="http://login.ejb/">
    <return>
    <codAraO>12</codAraO>
    <codCrgO>10</codCrgO>
    <codPrflO>10</codPrflO>
    <codUsuO>10</codUsuO>
    <nomAraO>Informática</nomAraO>
    <nomCrgO>Analista de Calidad</nomCrgO>
    <nomPrflO>Creador</nomPrflO>
    <nomUsuO>Maria de las Mercedes</nomUsuO>
    </return>
    </ns2:logUsResponse>
    </S:Body>
    </S:Envelope>


No sé si logro explicarme bien el punto es que no se como recorrer el resultado, por favor si me pueden ayudar...

Gracias.

Por anyela

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Dic 2008 10:37 am
Puedes crear un objeto XML y parsearlo usando sintaxis EX4

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Dic 2008 08:39 pm
Hola,

Muchas gracias por responder tan rapido solisarg, mira he tratado de recorrer el xml, y de obtener el valor de cada elemento, o nodo, pero la verdad es que aun no logro ningun resultado :roll: , te cuento que generé un ArrayCollection, para poder recorrerlo, pero me devuelve la estructura XML completa cuando lo imprimo, mira a continuación el código que he escrito:

Código :

<mx:Script>
      <![CDATA[
         
         import mx.rpc.events.ResultEvent;
         import mx.collections.ArrayCollection;
         import mx.collections.XMLListCollection;
         import mx.controls.Alert;
         
         [Bindable]
         public var xdata:XML = new XML();
         
         private function callResultHandler(event:ResultEvent):void{
            xdata = XML(event.result);
            var obElement:Object;
                               //aca sólo muestro en un text la estructura completa del xml
            txtresult.text = xdata.toString();
            
            var xmllista:XMLList = new XMLList(xdata);
            var xmllistacol:XMLListCollection = new XMLListCollection(xmllista);
            var resarray:Array = xmllistacol.toArray();
            var resarraycol:ArrayCollection = new ArrayCollection(resarray);
                        
            var i:int;
            for (i=0; i<resarraycol.length; i++){
//Acá intento obtener el valor de cada nodo por indice
               Alert.show("nodo : " + resarraycol[i]);
//Acá intento obtener el valor de cada nodo por @, aunque esto me suena más a obtener  un atributo de un elemento
               Alert.show("nodo : " + resarraycol.(@codAreaO));
            }
            
            /* for each (var element:XML in xdata.elements()){
               obElement = new Object();
               obElement.codAraO = element.codAreaO;
               
//aca intento obtener el valor de un elemento por su nombre
               txtresultsel.text = String(obElement.codAreaO);
            } */
   
         }
         
      ]]>
   </mx:Script>


Como verás he intentado algunas cosas, pero no sé si lo estoy haciendo bien, porfavor si me puedes ayudar ya he perdido mucho tiempo intentando hacerlo.... y muchas gracias

De todas maneras dejo también la estructura xml que logro rescatar (con la instrucción txtresult.text = xdata.toString();) :

Código :

<ns2:logUsResponse xmlns:ns2="http://login.ejb/" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <return>
    <codAraO>12</codAraO>
    <codCrgO>10</codCrgO>
    <codPrflO>10</codPrflO>
    <codUsuO>10</codUsuO>
    <nomAraO>Informática</nomAraO>
    <nomCrgO>Analista de Calidad</nomCrgO>
    <nomPrflO>Creador</nomPrflO>
    <nomUsuO>Maria de las Mercedes</nomUsuO>
  </return>
</ns2:logUsResponse>

Por anyela

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.