Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Consumir webservice con objetos como parametros con Nusoap.

Estas en el tema de Consumir webservice con objetos como parametros con Nusoap. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Amigos tengo un Webservice: Código PHP:    <?xml version = "1.0"  encoding = "UTF-8"  ?>   - <wsdl:definitions targetNamespace="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:impl="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:intf="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:tns2="http://icavi.vo.business.avaluos.infonavit.org.mx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <wsdl:types> - <schema elementFormDefault="qualified" targetNamespace="http://icavi.vo.business.avaluos.infonavit.org.mx" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:impl="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:intf="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <complexType name="UsuarioWSVO"> - <sequence>   <element name="contrasenia" nillable="true" type="xsd:string" />    <element name="idusuario" nillable="true" type="xsd:string" />    </sequence>   </complexType> - <complexType name="AvaluoWSVO"> ...
  #1 (permalink)  
Antiguo 15/01/2010, 10:16
Avatar de Yamilskate  
Fecha de Ingreso: septiembre-2006
Mensajes: 94
Antigüedad: 17 años, 6 meses
Puntos: 0
Consumir webservice con objetos como parametros con Nusoap.

Amigos tengo un Webservice:

Código PHP:
  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:impl="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:intf="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:tns2="http://icavi.vo.business.avaluos.infonavit.org.mx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <schema elementFormDefault="qualified" targetNamespace="http://icavi.vo.business.avaluos.infonavit.org.mx" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:impl="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:intf="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <complexType name="UsuarioWSVO">
- <sequence>
  <element name="contrasenia" nillable="true" type="xsd:string" /> 
  <element name="idusuario" nillable="true" type="xsd:string" /> 
  </sequence>
  </complexType>
- <complexType name="AvaluoWSVO">
- <sequence>
  <element name="acometidatelefonico" type="xsd:int" /> 
  <element name="altitud" type="xsd:int" /> 
  <element name="banquetavalor" nillable="true" type="xsd:string" /> 
   </sequence>
  </complexType>
- <complexType name="RespuestaWSVO">
- <sequence>
  <element name="fecha" nillable="true" type="xsd:string" /> 
  <element name="resultado" nillable="true" type="xsd:string" /> 
  <element name="tipomensaje" nillable="true" type="xsd:string" /> 
  </sequence>
  </complexType>
  </schema>
- <schema elementFormDefault="qualified" targetNamespace="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:impl="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:intf="http://business.icavi.serviciosExternos.avaluos.infonavit.org.mx" xmlns:tns2="http://icavi.vo.business.avaluos.infonavit.org.mx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <import namespace="http://icavi.vo.business.avaluos.infonavit.org.mx" /> 
- <element name="recibirAvaluoPaquete">
- <complexType>
- <sequence>
  <element name="usuario" nillable="true" type="tns2:UsuarioWSVO" /> 
  <element name="avaluo" nillable="true" type="tns2:AvaluoWSVO" /> 
  </sequence>
  </complexType>
  </element>
- <element name="recibirAvaluoPaqueteResponse">
- <complexType>
- <sequence>
  <element name="recibirAvaluoPaqueteReturn" nillable="true" type="tns2:RespuestaWSVO" /> 
  </sequence>
  </complexType>
  </element>
- <wsdl:message name="recibirAvaluoPaqueteRequest">
  <wsdl:part element="impl:recibirAvaluoPaquete" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="recibirAvaluoPaqueteResponse">
  <wsdl:part element="impl:recibirAvaluoPaqueteResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:portType name="ReceptorAvaluos">
- <wsdl:operation name="recibirAvaluoPaquete">
  <wsdl:input message="impl:recibirAvaluoPaqueteRequest" name="recibirAvaluoPaqueteRequest" /> 
  <wsdl:output message="impl:recibirAvaluoPaqueteResponse" name="recibirAvaluoPaqueteResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="ReceptorAvaluosSoapBinding" type="impl:ReceptorAvaluos">
  <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
- <wsdl:operation name="recibirAvaluoPaquete">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="recibirAvaluoPaqueteRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="recibirAvaluoPaqueteResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
- <wsdl:service name="ReceptorAvaluosService">
- <wsdl:port binding="impl:ReceptorAvaluosSoapBinding" name="ReceptorAvaluos">
  <wsdlsoap:address location="http://201.134.132.147:80/avaluosQASAP/services/ReceptorAvaluos" /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>
Y necesito consumir el metodo recibirAvaluoPaquete que supuestamente contiene 2 parametros que son objetos (con sus respectivos datos), entonces lo que hize con php fue crear mis 2 objetos, algo asi:

Código PHP:
class UsuarioWSVO
    var 
$idusuario  "MIUSUARIO";
    var 
$contrasenia  "MIPASS";


class 
AvaluoWSVO
    var 
$acometidatelefonico"a";
    var 
$altitud"b";
    var 
$banquetavalor "c";


$usuario = new UsuarioWSVO();
$avaluo = new AvaluoWSVO(); 
Y luego envio esto:

Código PHP:
if($err $client->recibirAvaluoPaquete($usuario,$avaluo))
                {
                        die(
$err);
                } 
Y el mensaje de error que obtengo es el siguiente:

SoapFault exception: [Server.generalException] java.lang.NullPointerException in /home/yamil/www/sga/lib/lib_send_avaluo.php:725 Stack trace: #0 [internal function]: SoapClient->__call('recibirAvaluoPa...', Array) #1 /home/yamil/www/sga/lib/lib_send_avaluo.php(725): SoapClient->recibirAvaluoPaquete(Object(UsuarioWSVO), Object(AvaluoWSVO)) #2 {main}


Espero me puedan ayudar cuanto antes con este código es urgente y ya no se q mas puede estar mal!!
(Lo único que necesito saber y si estoy invocando mal al metodo o estoy creando mal mis objetos o que es lo que sucede???)


pd: (El webservice publicado arriba esta un poco reducido al original para no hacerlos tantas bolas)

Última edición por Yamilskate; 15/01/2010 a las 10:21
  #2 (permalink)  
Antiguo 15/01/2010, 11:00
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 2 meses
Puntos: 36
Respuesta: Consumir webservice con objetos como parametros con Nusoap.

Me parece los datos complejos (complexType) deben ser instancias de SoapVar www.php.net/class.soapvar

En teoría solo es pasar en el constructor de SoapVar esa clase que ahora representa tu dato y pasarle el nombre de cómo está definino en el WSDL. Inténtalo a ver qué resulta.
  #3 (permalink)  
Antiguo 15/01/2010, 11:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Consumir webservice con objetos como parametros con Nusoap.

[Server.generalException] java.lang.NullPointerException <- Te esta diciendo que el error esta en el server no en tu código PHP.

Saludos.
  #4 (permalink)  
Antiguo 15/01/2010, 11:19
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 2 meses
Puntos: 36
Respuesta: Consumir webservice con objetos como parametros con Nusoap.

Cita:
Iniciado por GatorV Ver Mensaje
[Server.generalException] java.lang.NullPointerException <- Te esta diciendo que el error esta en el server no en tu código PHP.
El servidor está arrojando error de JAVA, sí, pero puede ser a consecuencia de que no se esté enviando correctamente la información. Vaya, no me limitaría a culpar al servidor, aunque sí tiene un error de programación porque ni siquiera debería de mostrar ese tipo de mensajes.

Por cierto, hay una aplicación llamada SoapUI donde podrás probar tu WebService. Ahí trabajas con XML directo, modificando las peticiones y viendo las respuestas. Esto para que pruebes el servicio y compares a la información enviada por PHP. Además tiene otras funciones para hacer Test a tu aplicación (haciendo un Mock del servicio) ... ni idea de cómo funcione a ese nivel.
www.soapui.org
  #5 (permalink)  
Antiguo 15/01/2010, 13:50
Avatar de Yamilskate  
Fecha de Ingreso: septiembre-2006
Mensajes: 94
Antigüedad: 17 años, 6 meses
Puntos: 0
Respuesta: Consumir webservice con objetos como parametros con Nusoap.

Muchas gracias a todos por sus respuestas, descubri que el problema radicaba al invocar mi metodo requeria parsear los parametros como un arreglo para poder proporcionar un id a los mismos, algo así:

Código PHP:
$client->recibirAvaluoPaquete(array("usuario"=>$usuario"avaluo"=>$avaluo) ); 
Saludos!
  #6 (permalink)  
Antiguo 15/01/2010, 13:58
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 2 meses
Puntos: 36
Respuesta: Consumir webservice con objetos como parametros con Nusoap.

¿en serio? . Pues gracias por la nota, no lo hubiera imaginado
__________________
I ♥ The Music!

Etiquetas: consumir, nusoap, objetos, parametros, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 02:27.