Clientes en C# y Java para servicio web en php con NuSoap

Es sabido que los servicios web han sido un aporte importante a la interoperabilidad es por ello que quiero a través de un simple ejemplo mostrar como podemos consumir desde c# y desde Java un servicio web realizado en php utilizando la biblioteca NuSoap.

El ejemplo es muy simple y no se ha desarrollado en un entorno profesional, no obstante por su simpleza lo considero bastante esclarecedor para iniciarnos en el tema de los servicios Web.

Lo primero que debemos hacer es crearnos el servicio web en php utilizando NuSoap una biblioteca de clases que nos ayuda en este empeño para php. Para ello basta con:
<?php
configureWSDL(“Persona”);

$server->wsdl->schemaTargetNamespace = $namespace;
$server->wsdl->addComplexType(
‘UnaPersona’,
‘complexType’,
‘struct’,
‘all’,
”,
array(
‘Nombre’ => array(‘name’=>’Nombre’,’type’=>’xsd:string’),
‘Apellidos’ => array(‘name’=>’Apellidos’,’type’=>’xsd:string’),
‘Descripcion’ => array(‘name’=>’Descripcion’,’type’=>’xsd:string’),
‘Edad’ => array(‘name’=>’Edad’,’type’=>’xsd:int’),
‘Salario’ => array(‘name’=>’Salario’,’type’=>’xsd:double’)
)
);

$server->wsdl->addComplexType(
‘UnaPersonaArray’,
‘complexType’,
‘array’,
”,
‘SOAP-ENC:Array’,
array(),
array(array(‘ref’=>’SOAP-ENC:arrayType’,’wsdl:arrayType’=>’tns:UnaPersona[]‘)),
‘tns:UnaPersona’
);

$server->register(
‘getPersonas’,
array(‘soapObjects’=>’tns:UnaPersonaArray’),
array(‘return’=>’tns:UnaPersonaArray’),
$ns,
false,
‘rpc’,
false,
‘devolución de uno de los eleementos de la lista…’);

$POST_DATA = isset($GLOBALS[‘HTTP_RAW_POST_DATA’])
? $GLOBALS[‘HTTP_RAW_POST_DATA’] : ”;
$server->service($POST_DATA);
exit();

function getPersonas() {
$per = $UnaPersona[3];
$per[0][‘Nombre’] = “A”;
$per [0][‘Apellidos’] = “AB”;
$per [0][‘Descripcion’] = “AAAAAA”;
$per [0][‘Edad’] = 36;
$per [0][‘Salario’] = 1500.34;

$per [1][‘Nombre’] = “B”;
$per [1][‘Apellidos’] = “BB”;
$per [1][‘Descripcion’] = “BBBBB”;
$per [1][‘Edad’] = 63;
$per [1][‘Salario’] = 1000;
$per [2][‘Nombre’] = “C”;
$per [2][‘Apellidos’] = “CC”;
$per [2][‘Descripcion’] = “CCCCCC”;
$per [2][‘Edad’] = 67;
$per [2][‘Salario’] = 2300;
return $per ;
}
?>

Con este código tenemos un servicio web disponible en el url que escojamos para publicarlo. Antes debemos descargarnos la biblioteca de código NuSoap y agregarla en nuestro proyecto web.

la creación de un cliente del Servicio Web desde C# es aún más fácil, para ello creamos una aplicación de escritorio con un formulario y un botón que nos lanzará el código. Antes agreguemos una referencia web para lo cual Visual Studio nos brinda una interface muy amigable e intuitiva.
El proyecto podría quedarle de la siguiente forma:

Con toda intensión se ha usado un tipo de datos compuesto, pues resulta interesante ver como Visual Studio genera una clase proxy que serializa el tipo de dato usado en el Servicio Web, generando las mismas propiedades declaradas en el Servicio Web. Para ver esta clase basta con hacer clic derecho sobre la referencia “lst_persona” y explorar en el examinador de objetos.

Por último programamos en nuestro botón el siguiente código:

cliente_php_web_service.lst_personas.Persona servicio_php = new cliente_php_web_service.lst_personas.Persona();
lst_personas.UnaPersona[] p = servicio_php.getPersonas(null);
MessageBox.Show(p[0].Nombre + ” ” + p[0].Apellidos);

Después veremos como se nos muestra un mensaje con el nombre y apellidos que hayamos definidos en nuestro servicio web php.

Por otra parte para el cliente escrito en Java también usaremos una aplicación de escritorio. Lo primero sería agregar, para facilitar las cosas, en el mismo paquete un componente de tipo “Web Service Client”. La configuración de este componente desde NetBeans es muy intuitiva, solo destacar la necesidad de contar en NetBeans con el plugin jax-rpc Style.
El proyecto podría resultar como se muestra en la siguiente imagen:

Por su parte es de destacar que en el proyecto NetBeans se agrega un paquete con la información en xml o mejor en XSD donde se describe la estructura  del tipo de dato que devuelve el Servicio Web.

El cliente en Java sería igual de simple, acá les dejo un ejemplo con una aplicación de escritorio usando un botón como lanzador. El fragmento de código importante del botón cociste en:

try { // This code block invokes the PersonaPort:getPersonas operation on web service
cliente_webservice.Persona persona = new cliente_webservice.Persona_Impl();
cliente_webservice.PersonaPortType personaPort = persona.getPersonaPort();
if (aboutBox == null) {
JFrame mainFrame = Cliente_WebServiceApp.getApplication().getMainFrame();
aboutBox = new Cliente_WebServiceAboutBox(mainFrame, personaPort.getPersonas(null));
aboutBox.setLocationRelativeTo(mainFrame);
}
Cliente_WebServiceApp.getApplication().show(aboutBox);
} catch(javax.xml.rpc.ServiceException ex) {
//
} catch(Exception ex) {
//
}

Los códigos de ejemplos tanto en .NET como Java en la siguiente url:

http://cid-3e8b35c0045b869a.office.live.com/browse.aspx/.Public

Importante: este artículo fue tomado del blog http://sophinet.wordpress.com cualquier problema en el código fuente de los ejemplos, pueden reportarlo y trataremos de resolverlo en conjunto, éste código fuente no fue desarrollado por mí, por lo tanto no me hago responsable de los posibles problemas que puedan presentarse al momento de la compilación en los respéctivos IDEs de desarrollo.

Napster2011

Anuncios

Un pensamiento en “Clientes en C# y Java para servicio web en php con NuSoap”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s