Generador automático de Webservices

Os mostramos como crear un servicio Web a partir de una clases, gracias a generadores automáticos de código y NetBeans

WebServices al Instante

Internet, en muy poco tiempo, ha sufrido multitud de evoluciones:

  • Al principio, servía para intercambiar documentos simples de texto.
  • Posteriormente se mejoró la capacidad de presentación con HTML.
  • Apareció la necesidad de generar las páginas dinámicamente y se creo el interfaz
    CGI.
  • Se dotó al cliente de capacidades interactivas con Applets y JavaScript.
  • Evolucionaron las técnicas de construcción de páginas dinámicas con
    Servles y JSPs.
  • Internet se convierte en un medio de medios y aparecen nuevas opciones
    interactivas en el cliente (Flash, Video, etc)
  • Apareció la necesidad de construir aplicaciones transaccionales, surgen
    los servidores de aplicaciones Java (aunque el concepto es antiguo).
  • Los Webs aumentan su tamaño y complejidad y surgen los gestores de
    contenidos y las herramientas de construcción de portales.

Estoy seguro que todavía queda mucho por hacer:

  • Los web proporcionan contenido pero no conocimiento… mucha información
    pero muy mal estructurada y dificil de encontrar.
  • No se explota adecuadamente la información de navegación, el CRM operacional ni se combina con la gestión de contenidos …
  • Sigue siendo caro y lento el lanzamiento de nuevos Webs …

En una de las cosas en las que sí se ha avanzado es el tratar de considerar
un Web como un proveedor de servicio … aquí entran los Web Services.

En este tutorial os vamos a mostrar los fácil que puede ser, sin tener
prácticamente ningún conocimiento, construir Servicios Web.

De todos modos, me da la sensación que hay mucha gente que se sigue
confundiendo …..

Nosotros debemos construir sistemas capaces de resolver necesidades
de negocio…. WebServices o los Servicios Web …. son un interfaz más para
esas reglas o componentes de negocio.

Muchas veces, la gente dice que es más sencillo construir servicios web en
tecnología .Net que en tecnología Java. Para mi gusto, las tecnologías son
equivalentes ….. por lo que podemos encontrar generadores de código
equivalentes en ambas plataformas.

 

Descarga del Software Base

  • Instalamos JDK 1.4.x
  • Instalamos NetBeans 3.5
  • Instalamos el Pugggin

Nos vamos a apoyar en un plugin proporcionado por www.systinet.com.
Vamos a las sección de descargas (nos tenemos que registrar antes) y bajamos la
versión adecuada … (ver la marcada)

El fichero tiene extensión .nbm

El web esta realmente bien….. vamos a seguir el tutorial para comprobar si
es realmente tan sencillo como cuentan (os adelanto que sí)

Instalación del Puggin

Primero instalamos el plugin en NetBeans manualmente

Seleccionamos la instalación manual

Seleccionamos el fichero de descarga (pinchando Add)

Seleccionamos el módulo

Verificamos el certificado e instalamos

Debemos rearrancar el entorno para que los cambios surtan efecto.

Creación del servicio

Creamos una clase con un método público que es el que querremos publicar
como un servicio Web.

Hemos creado un metodo llamado getUltimoTutotial (jeje,
un pequeño error de ortografica)

/*
 * tutoriales.java
 *
 * Created on 15 de octubre de 2003, 22:17
 */

package roberto;

/**
 *
 * @author  Roberto Canales
 */
public class tutoriales {

    private String ultimoTutorial = "Desarrollo al instante de Web Services";

    /** Creates a new instance of tutoriales */
    public tutoriales() {
    }

    public String getUltimoTutotial()
    {
        return ultimoTutorial;
    }
}

Arrancamos el servidor de Web Services… tened paciencia que tarda un
poquito.

Decimos que queremos publicar la clase como un servicio Web

Seleccionamos el servidor donde instalarlo (el de por defecto)

Verificamos los servicios y hay un botón a la derecha con multitud de
opciones más.

Introducimos informacion sobre el paquete y espacio de nombres

Introducimos información administrativa

Podemos observar que automáticamente se ha creado un fichero
descriptor del servicio

Vemos en más detalle.

<mapping>
<schema-mapping>
<xs:schema targetNamespace=»http://idoox.com/interface»
xmlns:xs=»http://www.w3.org/2001/XMLSchema»
xmlns:sns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:map=»http://systinet.com/mapping/»
xmlns:sns1=»http://idoox.com/interface»>
<xs:import namespace=»http://www.w3.org/2001/XMLSchema»/>
<xs:complexType name=»ArrayOfInterfaceMapping»>
<xs:annotation/>
<xs:sequence name=»ArrayOfInterfaceMapping»
xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns=»http://www.w3.org/2001/XMLSchema»
xmlns:ns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/»
xmlns:ns1=»http://idoox.com/interface»>
<xs:element type=»sns1:interfaceMapping» form=»qualified»
minOccurs=»0″ name=»item» maxOccurs=»unbounded»/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=»serviceReference»>
<xs:annotation/>
<xs:sequence name=»serviceReference»
xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns=»http://www.w3.org/2001/XMLSchema»
xmlns:ns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/»
xmlns:ns1=»http://idoox.com/interface»>
<xs:element type=»xs:QName» form=»qualified»
name=»service»/>
<xs:element type=»xs:anyURI» form=»qualified» name=»wsdl»/>
<xs:element type=»xs:string» form=»qualified» minOccurs=»0″
name=»instanceID»/>
<xs:element type=»sns1:ArrayOfInterfaceMapping»
form=»qualified» minOccurs=»0″ name=»portTypeMappings»/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=»interfaceMapping»>
<xs:annotation/>
<xs:sequence name=»interfaceMapping»
xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns=»http://www.w3.org/2001/XMLSchema»
xmlns:ns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/»
xmlns:ns1=»http://idoox.com/interface»>
<xs:element type=»xs:QName» form=»qualified»
name=»portType»/>
<xs:element type=»xs:string» form=»qualified»
name=»className»/>
</xs:sequence>
</xs:complexType>
<xs:element form=»qualified» name=»instance»
xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns=»http://www.w3.org/2001/XMLSchema»
xmlns:ns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/»
xmlns:ns1=»http://idoox.com/interface»>
<xs:complexType>
<xs:annotation/>
<xs:choice>
<xs:element type=»xs:string» form=»qualified»
name=»id»/>
<xs:element type=»xs:string» form=»qualified»
name=»setId»/>
<xs:element type=»xs:string» form=»qualified»
name=»notFound»/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

<xs:schema targetNamespace=»http://systinet.com/xsd/SchemaTypes/»
xmlns:xs=»http://www.w3.org/2001/XMLSchema»
xmlns:sns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:map=»http://systinet.com/mapping/»
xmlns:sns1=»http://idoox.com/interface»>
<xs:import namespace=»http://www.w3.org/2001/XMLSchema»/>
<xs:element type=»xs:string» form=»qualified» name=»string_Response»
nillable=»true» xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns:xsd=»http://www.w3.org/2001/XMLSchema»
xmlns:ns0=»http://systinet.com/xsd/SchemaTypes/»
xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/»
xmlns:ns1=»http://idoox.com/interface»/>
</xs:schema>

</schema-mapping>
<operation-mapping>
<operation name=’getUltimoTutotial‘ method=’getUltimoTutotial‘ signature=’KClMamF2YS9sYW5nL1N0cmluZzs=’/>
</operation-mapping>
</mapping>

Creación de un Cliente

Comprobamos que se ha dado de alta…. y pinchamos el botón
derecho para crear un cliente

Seleccionamos el paquete

Elegimos las opciones por defecto (de momento)

No hemos activado ningún tipo de seguridad

Al finalizar, se nos crea todo lo necesario para invocar al servicio Web

El código del cliente es:

package roberto;


import javax.xml.namespace.QName;
import org.systinet.wasp.webservice.ServiceClient;

import roberto.iface.Tutoriales;


public class wstutorialescliente extends Object {

    /** Constructor */
    public wstutorialescliente() {
    }

    /**
    * @param args the command line arguments
    */
    public static void main (String args[]) throws Exception {
        Tutoriales service;
        String wsdlURI = "http://rautentia:6060/tutoriales/";
        String serviceURI = "http://rautentia:6060/tutoriales/";

        // lookup service
        ServiceClient serviceClient = ServiceClient.create(wsdlURI);
        serviceClient.setServiceURL(serviceURI);

        service = (Tutoriales)serviceClient.createProxy(Tutoriales.class);

        System.out.println("El mensaje recuperado es " + service.getUltimoTutotial());
        // now, call the methods on your Web Service interface
        //eg. service.getMessage();
    }
}
    

Y vemos que la salida es la esperada

El mensaje recuperado es Desarrollo al instante de Web Services

El plugin tambien nos instala en el menú de depuración una
consola de monitorización de mensajes Soap. Podemos ver de un modo rápido los
mensajes de ida y de vuelta:

POST http://rautentia:6060/tutoriales/ HTTP/1.0
User-Agent: Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Windows 2000/5.0)
Host: rautentia:6060
Connection: close
Proxy-Connection: close
SOAPAction: «http://systinet.com/wsdl/roberto/tutoriales#getUltimoTutotial#KClMamF2YS9sYW5nL1N0cmluZzs=»
Content-type: text/xml;charset=UTF-8
X-WASP-Message-ID: 11e-FLxtbx/tDgWbei5OeHEwbw==
Content-length: 316

<?xml version=»1.0″ encoding=»UTF-8″?>
<e:Envelope xmlns:e=»http://schemas.xmlsoap.org/soap/envelope/» xmlns:d=»http://www.w3.org/2001/XMLSchema» xmlns:i=»http://www.w3.org/2001/XMLSchema-instance» xmlns:wn0=»http://systinet.com/xsd/SchemaTypes/» xmlns:wn1=»http://idoox.com/interface»><e:Body></e:Body></e:Envelope>

HTTP/1.0 200 OK
Date: Wed, 15 Oct 2003 22:00:35 GMT
Server: Systinet WASP Server for Java/4.6.1 (Java/1.4.2; Windows 2000/5.0)
SOAPAction: «»
Content-type: text/xml;charset=UTF-8
X-WASP-Message-ID: 11e-FLxtbx/tDgWbei5OeHEwbw==
Connection: Close

<?xml version=»1.0″ encoding=»UTF-8″?>
<e:Envelope xmlns:e=»http://schemas.xmlsoap.org/soap/envelope/» xmlns:d=»http://www.w3.org/2001/XMLSchema» xmlns:i=»http://www.w3.org/2001/XMLSchema-instance» xmlns:wn0=»http://systinet.com/xsd/SchemaTypes/» xmlns:wn1=»http://idoox.com/interface»><e:Body><wn0:string_Response i:type=»d:string»>Desarrollo al instante de Web Services</wn0:string_Response></e:Body></e:Envelope>

Aunque hay mucha tecnología por debajo ….. de momento hemos creado un
primer servicio y su cliente …..

En siguientes tutoriales iremos viendo juntos que significa cada cosa

Sobre el
Autor ..

 

Comentarios

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Profesor asociado en IE Business School, inversor en StartUps y mentor de emprendedores. Ingeniero Técnico de Telecomunicaciones y Executive MBA por IE Business School 2007. Twitter: Follow @rcanalesmora Autor de los Libros: Planifica tu éxito: de aprendiz a empresario, Informática profesional, las reglas no escritas para triunfar en la empresa, Conceptos ágiles aplicados a distintas áreas de una empresa y Conversaciones con CEOs y CIOs sobre Transformación Digital y Metodologías Ágiles. ¡Descárgalos gratis aquí! Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Aprende cómo migrar tu sitio Joomla 3 a Joomla 5 de forma segura, manteniendo el diseño, la funcionalidad y compatibilidad con extensiones. Una guía paso a paso con recomendaciones, imágenes y buenas prácticas para actualizar sin sorpresas.
Descubre qué es Yocto Project, sus ventajas, usos reales en Izertis y cómo crear tu propia distribución Linux para Raspberry Pi paso a paso, de forma sencilla y flexible.
¿Trabajas con Drupal y SonarQube 9.9? En este artículo exploramos cómo adaptar el análisis estático para evitar falsos positivos, desactivar reglas conflictivas del Quality Profile y delegar el estilo a PHP CodeSniffer. Una guía práctica para mejorar la integración sin depender aún de SonarQube 10.