Crear un simple servicio web SOAP en Java con NetBeans es re-fácil

21.12.08. Por ooscarr (ooscarr)

Netbeans

A través de un video tutorial (mencionado al final de este documento), aprendí a crear un simple servicio web con NetBeans.

Según leí, Sun removió el soporte para el WSDK (aunque igual se sigue distribuyendo) para reemplazarlo por GlassFish. Así que ni modo. Pero estas instrucciones también funcionan con Tomcat.

Crear nuevo proyecto

Lo primero es crear un nuevo proyecto, así que...

  1. Creamos un Nuevo proyecto, en mi caso de tipo Aplicación Web

    Captura de pantalla del asistente para crear un Nuevo proyecto en Netbeans

  2. Elijo un nombre para la aplicación web. Yo le llamé Holaste.

    Captura de pantalla del asistente para crear una Nueva Aplicación Web

  3. En los ajustes del servidor, elijo GlassFish o Tomcat, como siempre.

    Opción GlasshFish en los ajustes de servidor del asistente para crear nuevo Proyecto de Aplicación Web en NetBeans

  4. Y Terminar

    Asistente de Nuevo Proyecto de NettBeans creando el nuevo proyecto

¿Código?

Como toda apliación web, me aparece el típico index.jsp predeterminado en el que puedo aprovechar de describir el Servicio Web (puedo poner cualquier cosa, en realidad, porque esto no es parte del servicio web).

index.jsp

<%-- 
    Document   : index
    Created on : 21-dic-2008, 12:06:37
    Author     : ooscarr
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-cl">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>Servicio web</title>
</head>
<body>
 <h1>Este es el Servicio web</h1>
 <p>Este servicio lo que hace es decir "Hola, [nombre]" a cambio
   de un parámetro [nombre] de tipo <code>String</code>.</p>
</body>
</html>

Creación del Servicio Web

Mmm... Bueno, en NetBeans es muy sencillo crear un Servicio Web, sólo basta seleccionar el nombre del proyecto (Holaste en mi caso) y poner Archivo Nuevo. Ahi también hay una opción llamada Web Service.

agregando un Nuevo archivo al proyecto con el asistente en NetBeans

Y le damos un nombre, por ejemplo, ServicioWeb.

Nombrando servicio web en NetBeans
Aproveché de agregarlo a un paquete llamado hola.

Añadir operaciones

Para añadir operaciones hay que sólo posicionarse sobre el Servicio Web y poner Add Operation...

Menú contextual para Servicio web en NetBeans

De otra forma, en el modo Design existe el botón Add Operation....

Botón Add Operation... en el modo Design del editor de servicios web de NetBeans.

Ahí le pongo un nombre, puedo añadir parámetros y elegir si lo quiero de tipo String, boolean, int, etc.

Añadiendo Operaciones a un Servicio web en NetBeans

ServicioWeb.java

Con eso se generará automáticamente el código esqueleto que puedo modificar para que me retorne "Hola, " + nombre;. Así:

package hola;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

/**
 *
 * @author ooscarr
 */
@WebService()
public class ServicioWeb {

 /**
  * Web service operation
  */
 @WebMethod(operationName = "diHola")
 public String diHola(@WebParam(name = "nombre")
 String nombre) {
  //TODO write your implementation code here:
  return "Hola, " + nombre;
 }

}

Probémoslo

Ya. Probémoslo. Para eso primero hay que armar el proyecto con el menú contextual del proyecto, opción Deploy.

GENERACIÓN CORRECTA (tiempo total: 7 segundos)

Y probar el servicio web, seleccionando el Servicio web, opción Test Web Service.

INFO: Dynamically creating request wrapper Class hola.jaxws.DiHola
INFO: Dynamically creating response wrapper bean Class hola.jaxws.DiHolaResponse
INFO: parsing WSDL...
INFO: generating code...
INFO: 
compiling code...
INFO: Invoking wsimport with http://localhost:8080/Holaste/ServicioWebService?WSDL
INFO: wsimport successful
INFO: parsing WSDL...
INFO: generating code...
INFO: 
compiling code...
INFO: Invoking wsimport with http://localhost:8080/Holaste/ServicioWebService?WSDL
INFO: wsimport successful

Si todo está bien instalado, se debería abrir una ventana del navegador más o menos así.

Página web, con formulario para probar las operaciones del Servicio Web, generada por NetBeans

Aquí, por ejemplo, si pongo Oscar en el formulario, se puede ver el código que entrega el servicio Web al cliente.

ver referencia.

WSDL

También es bueno hacer notar que NetBeans genera automáticamente el archivo WSDL (y su XML Schema también) para ser usado en las implementaciones de los Clientes.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.5-hudson-$BUILD_NUMBER-. -->
<definitions targetNamespace="http://hola/" name="ServicioWebService" xmlns:tns="http://hola/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema>
<xsd:import namespace="http://hola/" schemaLocation="ServicioWebService_schema1.xsd"/>
</xsd:schema>
</types>
<message name="diHola">
<part name="parameters" element="tns:diHola"/>
</message>
<message name="diHolaResponse">
<part name="parameters" element="tns:diHolaResponse"/>
</message>
<portType name="ServicioWeb">
<operation name="diHola">
<input message="tns:diHola"/>
<output message="tns:diHolaResponse"/>
</operation>
</portType>
<binding name="ServicioWebPortBinding" type="tns:ServicioWeb">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="diHola">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ServicioWebService">
<port name="ServicioWebPort" binding="tns:ServicioWebPortBinding">
<soap:address location="REPLACE_WITH_ACTUAL_URL"/>
</port>
</service>
</definitions>

Fuente

Todo lo que dije lo saqué de un video hecho por un desarrollador de Sun. Lo puedes ver (en inglés) desde el siguiente link, por si te quedó alguna duda.

[ACTUALIZACIÓN] Después él hizo otro video consumiendo datos desde una base de datos usando JPA (pero con menos calidad):

Ver video en youtube.com

Etiquetas: , ,

4 comentarios (RSS ATOM) :

  1. A las 4/3/09 23:13  

    Anonymous Anónimo ha dicho...

    gracias amigazo, es un buen aporte pero me serviria bastante si tubieras un tutorial similar pero usando el web service flickr y twiter, te lo agradeceria bastante, si lo tienes por favor mandamelo a qteimporta_3000@hotmail.com

  2. A las 9/12/09 14:03  

    Blogger Osvaldo ha dicho...

    Es posible conectarse a una base de datos sql server 2005 con web service. En caso de ser posible podrias enviarme un ajemplo a mi correo. Desde ya muchas gracias.

  3. A las 9/12/09 16:05  

    OpenID elblog ha dicho...

    Espero que este link te de algunas pistas sobre conectar a la base de datos a través de java. Si SQL Server ofrece un servicio web para leer desde la base de datos, sólo tienes que usar ese servicio web. Con JPA podrías tú crear el servicio web REST desde la base de datos (una vez lograda la conexión) relativamente fácil a través del asistente para archivo nuevo bajo la categoría Persistencia.

  4. A las 6/2/10 17:22  

    Anonymous elblog ha dicho...

    Agregué un video con lo mismo usando la conexión a una base de datos.

Página principal

Publicidad