May 12

soapui-logoActualmente cuando se desarrollan servicios web es posible probarlos gracias a que los ambientes de desarrollo crean paginas asociadas con cada uno de los metodos del webservice que permiten hacer las invocacion de los servicios directamente para comprobar su funcionamiento, esto sucede con plataformas como Visual Studio y NetBeans, pero no existen por ejemplo para servicios web creados con PHP que soporten WSDL. Estas paginas de prueba tampoco estan disponibles en los servicios web cuando estan en produccion lo que no permiten identificar y probar de manera rapida la funcionalidad de los webservices.

soapUI de eviware es una herramienta que permite rapidamente a traves de una interface grafica, obtener informacion de los webservices, realizar llamados generando las peticiones para cada metodo del webservice y visualizando las respuestas enviadas por el servidor, permitiendo rapidamente identificar las operaciones asociadas con el webservice y permitiendo hacer pruebas rapidamente del funcionamiento de los webservices sin necesidad de recurrir a escribir codigo para crear clientes que consuman los webservices.

soapUI es una de las herramientas que todo desarrollador web debe tener en su arsenal y esta disponible en una version gratuita que puede ser descargada o ejecutada desde el sitio utilizando Java Web Start, para lo cual necesitamos instalar el JRE de Java o tambien una version Pro con caracteristicas avanzadas para aquellos desarrolladores que necesitan herramientas mas potentes. soapUI incluye en sus versiones actuales soporte para servicios web REST, pruebas funcionales y simulacion de webservices.

Para ilustrar su uso, lo utilizaremos para consumir el webservice de Calculadora creado en Java del cual se hablo en una entrada anterior del blog : Publicar Web Service en Java sin Servidor Web

soapui_calculadora

Requisitos :

  • Tener instalado Java

Pasos :

  • Ir a la pagina oficial de soapUI
    http://www.soapui.org
  • Buscar el boton WebStart Now ! o ir al siguiente enlace para ejecutar la version 2.5.1 :
    http://www.soapui.org/jnlp/2.5.1/soapui.jnlp
  • Esto ejecuta el Java Web Start encargado de instalar la aplicacion en el computador
  • Puede tardar algunos minutos, deacuerdo a la velocidad de acceso a Internet
  • Ir al menu File y seleccionar la opcion New soapUI Project
  • Suministrar la siguiente informacion :
    Project Name : Calculadora
    Initial WSDL/WADL : http://localhost:4444/CalculadoraService?wsdl
  • Habilitar la opcion :
    Create sample request for all operations
  • Pulsar el boton Ok
  • En el navegador ir al item sumar y doble click
  • Click en Request1
  • Suministrar los valores de los argumentos a enviar a la suma
  • Pulsar boton verde en la ventana del request para ejecutar el llamado
  • La respuesta se visualiza en la otra parte de la ventana con el resultado de la suma

Enlaces :

Tagged with:



En May 12 de 2009, Marlon J. Manrique escribió acerca de soapUI : Herramienta para pruebas de WebServices.
May 09

resin_logoEs posible ejecutar un servicio creado en PHP con NuSOAP en el servidor de aplicaciones escrito en Java Resin, esto permite crear webservices que pueden ser alojados en servidores como Apache2 con soporte para PHP, como tambien servidores Java como el GlassFish.

Para que los webservices funcionen es necesario instalar una version igual o superior a la 3.2.1 la cual instalamos en el anterior post (enlace), como tambien realizar un pequeño cambio en el sel codigo (enlace) Servidor donde se reemplaza la lectura de datos via RAW por una lectura de la entrada de datos php://input, quedando de la siguiente forma el archivo servicio.php

 
<?php
	require_once('nusoap.php');
	require_once('sumar.php');
 
	$server = new nusoap_server();
	$server->register('sumar');
 
	$HTTP_RAW_POST_DATA = file_get_contents("php://input");
	$server->service($HTTP_RAW_POST_DATA);
?>
 

De esta forma es posible ejecutar el servicio web encualquier plataforma o servidor que soporte Java.

Enlaces :

UA:A [1.3.0_631]
Tagged with:



En May 9 de 2009, Marlon J. Manrique escribió acerca de WebService con NuSOAP en Servidor Resin.
May 09

phpAunque en PHP5 existe una extension para crear servicios web basados en SOAP, algunos servidores donde posiblemente alojemos nuestra aplicacion no tienen habilitada la extension y por tal motivo debemos buscar alternativas para la creacion de los webservices.

En el 2002 Dietrich Ayala escribio una libreria llamada NuSOAP que permite implementar webservices en PHP incluyendo la version 4 y 5, esta libreria es una de las mas populares en la costruccion de servicios web en PHP pues tiene soporte para diferentes versiones de SOAP, como tambien es posible crear servicios web que generen los descriptores de los webservices (WSDL) y soporte de tipos de datos, aunque la implementacion suele complicarse cuando se utilizan estas caracteristicas.

Implementaremos un webservice basado en una funcion llamada sumar de la cual crearemos el webservice y su cliente utilizando NuSOAP, a continuacion se describen los pasos :

  • Abrir una terminal
  • Ir al directorio web donde se creara el servicio
  • Descargar la libreria NuSOAP del repositorio en SourceForge
    http://nusoap.cvs.sourceforge.net/viewvc/nusoap/lib/
  • En este caso descargaremos la version 1.121
    wget http://nusoap.cvs.sourceforge.net/viewvc/*checkout*/nusoap/lib/nusoap.php?revision=1.121

Implementar la Funcion a Utilizar :

  • Utilizando su editor favorito crear un archivo donde se implemente la funcion :
    (utilizaremos una funcion sumar que recibe dos numero y retorna su suma)
  • Crear el archivo sumar.php
 
<?php
        function sumar($x, $y)
        {
                return $x + $y;
        }
?>
 

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Este incluye la libreria NuSOAP y la funcion creada anteriormente
  • Crea un servidor soap e incluye la funcion
  • Despacha el servicio con la informacion suministrada
 
<?php
        require_once('nusoap.php');
        require_once('sumar.php');
 
        $server = new nusoap_server();
        $server->register('sumar');
 
        $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
        $server->service($HTTP_RAW_POST_DATA);
?>
 
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
  • Para realizar el llamado se debe especificar como argumentos el nombre de la fuinciony en un arreglo asociativo, los nombres de las variables con sus respectivos valores
 
<?php
        require_once('nusoap.php');
        $cliente = new nusoap_client('http://<ipServidor>/<ruta>/servicio.php');
        $resultado = $cliente->call('sumar', array('x' => '3', 'y' => 4));
        print_r($resultado);
?>
 
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

Enlaces :

Tagged with:



En May 9 de 2009, Marlon J. Manrique escribió acerca de WebService en PHP con NuSOAP.
May 08

java-sunEn entradas anteriores en el Blog creamos un servicio web en Java sin necesidad de utilizar un servidor como Tomcat o Glassfish para la publicacion del mismo, a continuacion implementaremos un cliente en Java generado por medio del WSDL que describe el servicio web.

Requisitos :

  • Kit de Desarrollo de Java
    En este caso utilizaremos el Java Development Kit 6 update 13
  • Para el ejemplo utilizaremos el Sistema Operativo Ubuntu 9.04

Generar Codigo para el Cliente en Java :

  • Abrir una terminal
  • Ejecutar el comando para generar el cliente del servicio web
    wsimport http://localhost:4444/CalculadoraService?wsdl
  • Esto genera el paquete serviciosweb con las clases necesarias para llamar el web service

Utilizar el Cliente :

  • Crear un archivo Cliente.java con el siguiente codigo :
 
package serviciosweb;
 
public class Cliente
{
        public static void main(String[] args)
        {
                CalculadoraService servicio = new CalculadoraService();
                Calculadora calculadora = servicio.getCalculadoraPort();
 
                System.out.println(calculadora.sumar(3,4));
        }
}
 
  • Java utiliza una clase que representa el servicio completo y un Puerto que implementa los metodos del sevicio, por tal motivo se debe crear el servicio y obtener el puerto para poder consumir el servicio
  • Compilar el cliente :
    javac -d . Cliente.java
  • Ejecutar el Cliente
    java Cliente

Enlaces :

Tagged with:



En May 8 de 2009, Marlon J. Manrique escribió acerca de Cliente de WebService en Java.
May 08

java-sunA partir del Java 6 es muy sencillo crear webservices utilizando anotaciones, a diferencia de las versiones anteriores donde era necesario utilizar librerias de terceros, servidores web, gran cantidad de codigo y archivos de configuracion.

La mayoria de las veces los webservices los implementamos sobre aplicaciones web por lo que se hace necesario tener un servidor como Tomcat o GlassFish para ejecutar la aplicacion web y adicionalmente publicar los servicios web, pero algunas veces solo necesitamos publicar el servicio web para realizar pruebas sin la necesidad un servidor web completo. Esto es ahora posible utilizando un Endpoint que se encarga de publicar el servicio web en una direccion especifica, la cual atiende los llamados al servicio, como tambien genera el WSDL el cual describe el servicio.

A continuación crearemos un servicio web llamado Calculadora el cual posee un metodo llamado sumar que recibe dos numero y retorna la suma de ellos.

Requisitos :

  • Kit de Desarrollo de Java
    En este caso utilizaremos el Java Development Kit 6 update 13
  • Para el ejemplo utilizaremos el Sistema Operativo Ubuntu 9.04

Implementar el WebService en Java :

  • Abrir una terminal
  • Crear un archivo llamado Calculadora.java con el siguiente código :
 
package serviciosweb;
 
import javax.jws.WebMethod;
import javax.jws.WebService;
 
@WebService
public class Calculadora
{
        @WebMethod
        public int sumar(int x, int y)
        {
                return x + y;
        }
}
 
  • Es necesario suministrar el nombre de paquete el cual sera utilizado como namespace en el webservice.
  • Se utilizan anotaciones para especificar que la clase es un webservice y el metodo sumar esta incluido en el webservice.

Crear el Publicador del WebService :

  • Crear un archivo llamado Publicador.java con el siguiente código :
 
package serviciosweb;
 
import javax.xml.ws.Endpoint;
 
public class Publicador
{
        public static void main(String[] args)
        {
                Calculadora calculadora = new Calculadora();
                Endpoint endpoint = Endpoint.create(calculadora);
                endpoint.publish("http://localhost:4444/CalculadoraService");
        }
}
 
  • Este crea un Endpoint el cual crea un servidor web pequeño que recibe las peticiones hechas al webservice
  • Se debe especificar la ruta en la cual queremos publicar el webservice en forma de direccion web, por ejemplo : http://localhost:4444/CalculadoraService

Compilar el WebService :

  • Compilar el codigo fuente del servicio web :
    javac -d . Calculadora.java
  • Compilar el publicador :
    javac -d . Publicador.java
  • Generar los archivos asociados con las anotaciones y el webservice
    apt Calculadora.java

Publicar el Servicio Web :

  • Ejecutar el Publicador del webservice
    java serviciosweb.Publicador
  • Visualizar el WSDL generado para el servicio (utilizar la url donde se publico el servicio)
    http://localhost:4444/CalculadoraService?wsdl

Con esto ya tenemos publicado nuestro servicio web, sin necesidad de tener un servidor web como Tomcat o Glassfish, lo que permite realizar pruebas de una forma rapida.

Enlaces :

Tagged with:



En May 8 de 2009, Marlon J. Manrique escribió acerca de Publicar WebService en Java sin Servidor Web.
May 08

phpEn la version 5 de PHP se incorporan las clases necesarias para la creacion de webservices y su invocacion desde clientes remotos, a continuacion se ilustra como crear un webservice en PHP que ejecute un metodo dentro de una clase definida por el usuario en el servidor.

Implementar la Clase a Utilizar :

  • Ir al directorio web donde se quiere crear el servicio
  • Utilizando su editor favorito crear un archivo donde se implemente la clase y sus metodos :
    (utilizaremos una clase Calculadora con el metodo sumar que recibe dos numero y retorna su suma)
  • Crear el archivo Calculadora.php
 
<?php
        // Clase que implementa los servicios
        class Calculadora
        {
                // Metodo a utilizar como servicio
                public function sumar($x, $y)
                {
                        return $x + $y;
                }
        }
?>
 

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Incluir la clase Calculadora a utilizar dentro del webservice
  • No se utilizara WSDL ya que toca generarlo a mano para el servicio
  • Al no utilizar WSDL se debe suministrar el namespace, en este caso uri:webservices
  • Al momento de asignar la clase al webservice se debe suministrar el nombre.
 
<?php
        // Incluir la Clase
        require_once('Calculadora.php');
 
        // Crear servidor de Soap
        $server = new SoapServer(
                null, // No utilizar WSDL
                array('uri' => 'urn:webservices') // Se debe especificar el URI
        );
 
        // Asignar la Clase
        $server->setClass('Calculadora');
 
        // Atender los llamados al webservice
        $server->handle();
?>
 
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
 
<?php
        // Crear el cliente suministrado la ruta del servicio
        // Utilizar el uri
        $client = new SoapClient(null,
                array(
                        'location' => 'http://localhost/~marlonj/servicio.php',
                        'uri' => 'urn:webservices',
                ));
 
        // Llamar el metodo como si fuera del cliente
        echo $client->sumar(3,4);
?>
 
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

De esta forma podemos crear una clase que contenga los metodos a ser utilizados como webservices, de esta forma el servidor crea una instancia de la clase Calculadora cada vez que se invoca un servicio.

Tambien es posible asignar un objeto al servicio para esto podemos crear una instancia del objeto a utilizar como servicio web y enlazarlo con el webservice, asi :

 
<?php
        // Incluir la Clase
        require_once('Calculadora.php');
 
        // Crear servidor de Soap
        $server = new SoapServer(
                null, // No utilizar WSDL
                array('uri' => 'urn:webservices') // Se debe especificar el URI
        );
 
        // Crear el objeto a utilizar como webservice
        $calculadora = new Calculadora();
 
        // Asignar el Objeto
        $server->setObject($calculadora);
 
        // Atender los llamados al webservice
        $server->handle();
?>
 

Enlaces :

Tagged with:



En May 8 de 2009, Marlon J. Manrique escribió acerca de Creando WebService en PHP5 con una Clase.
May 07

phpUna de las tantas formas de crear aplicaciones orientadas a servicios es el uso de los webservices que permiten realizar llamados a funciones que se encuentrar en un servidor desde otras maquinas de forma remota, permitiendo un desarrollo independiente de la plataforma, utilizando tecnologias abiertas.

La version 4 de PHP no incluye soporte directo para la implementacion de webservices, por tal motivo eran necesarias librerias con NuSOAP que implementaban los diferentes componentes para la creacion de webservices a si como su consumo, aun hoy se sigue utilizando esta libreria gracias a que soporta la generacion del descriptor del webservice de forma automatica.

En la version 5 de PHP se incorporan las clases necesarias para la creacion de webservices y su invocacion desde clientes remotos, a continuacion se ilustra como crear un webservice en PHP que ejecute una funcion definida por el usuario en el servidor.

Implementar la Funcion a Utilizar :

  • Ir al directorio web donde se quiere crear el servicio
  • Utilizando su editor favorito crear un archivo donde se implemente la funcion :
    (utilizaremos una funcion suma que recibe dos numero y retorna su suma)
  • Crear el archivo sumar.php
 
<php
        function sumar($x, $y)
        {
                return $x + $y;
        }
>

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Incluir la funcion suma a utilizar dentro del webservice
  • No se utilizara WSDL ya que toca generarlo a mano para el servicio
  • Al no utilizar WSDL se debe suministrar el namespace, en este caso uri:webservices
  • Al momento de adicionar las funciones al webservice se puede especificar el nombre de la funcion, un arreglo con los nombres de las funciones a adicionar al servicio.
 
<php
        // Incluir la funcion
        require_once('sumar.php');
 
        // Crear servidor de Soap
        $server = new SoapServer(
                null, // No utilizar WSDL
                array('uri' => 'urn:webservices') // Se debe especificar el URI
        );
 
        // Adicionar las funciones
        $server->addFunction(
                array('sumar')
        );
 
        // Atender los llamados al webservice
        $server->handle();
?>
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
 
<php
        // Crear el cliente suministrado la ruta del servicio
        // Utilizar el uri
        $client = new SoapClient(null,
                array(
                        'location' =>; 'http://<servidor>/<ruta>/servicio.php',
                        'uri' =>; 'urn:webservices',
                ));
 
        // Llamar la funcion como si fuenra un metodo del cliente
        echo $client->sumar(3,4);
?>
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

Con esto ya tenemos un servicio web en PHP que puede ser llamado remotamente desde otro servidor que implemente el cliente o cualquier otro lenguaje que permita implementar clientes de webservices.

Enlaces :

Tagged with:



En May 7 de 2009, Marlon J. Manrique escribió acerca de Creando WebService en PHP5 desde una Funcion.