Friday, 1 May 2009

Creando un Webservice con Eclipse 3.4.2 (J2EE) y JBoss 5.0.1 GA

Continuando con la temática del último post (Creando un Servlet en J2EE mediante Eclipse 3.4.2 y JBoss 5.0.1 GA) y ahora que ya tenemos instalado el JBoss y tenemos todo el entorno configurado, podemos crear un Webservice y probarlo. Para ello, utilizaremos el JBoss Webservice (JAX-WS), y lo iniciaremos mediante un proyecto web con Eclipse. Una vez hecho, iniciaremos nuestro proyecto en el servidor de JBoss y este nos generará un fichero wsdl. Luego desde el mismo JBoss, podremos examinar el contenido de este, y incluso utilizar el Web Service Examinator que tiene el Eclipse para visualizar el contenido y los métodos que hemos puesto en el WebService.


  • Creando el Dynamic Web Project:
Creamos un proyecto Web (File -> New -> Dynamic Web Project), que tenga la siguiente estructura:

Crearé la Clase HiTime.java que tiene unos métodos públicos getDescription y getNumber, estos devuelven String y Integer simples. El getDescription devuelve a partir de un texto un saludo más la hora, y el getNumber solo devuelve un número fijo.

Comprobar que realmente están cargadas todas las librerias del JBoss, sino la aplicación no cargará.

HiTime.java



package com.webservice;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

/**
* Esto es un WebService
* @author Jordi Coll
*/

/*
* @WebService indica que es una interfície webservice
* el name indica que es un nombre de webservice.
*/
@WebService(name = "HiTime")
/*
* @SOAPBinding indica información vinculate para los mensajes SOAP.
*/
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)

public class HiTime {
@WebMethod
public String getDescription(@WebParam(name = "name") String name) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("H:mm:ss:SSS");
return "Hi! " + name + " Time: " + sdf.format(cal.getTime());
}

@WebMethod
public int getNumber() {
return 46;
}
}





web.xml



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Hi Web Service</display-name>
<servlet>
<servlet-name>HiTime</servlet-name>
<servlet-class>com.webservice.HiTime</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HiTime</servlet-name>
<url-pattern>/HiTime</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</
web-app>



Una vez hemos creado los diferentes ficheros, arrancamos el proyecto con el server:

Veremos como genera el deploy del fichero .war:

Buildfile: C:\Archivos de programa\dev\eclipseJ2EE\plugins\org.eclipse.jst.server.generic.jboss_1.5.206.v20090115\buildfiles\jboss323.xml deploy.j2ee.web:
[jar] Building jar: D:\workspaceJ2EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\TestWebService.war [move] Moving 1 file to C:\jboss-5.0.1.GA\server\default\deploy BUILD SUCCESSFUL Total time: 10 seconds


Ahora si accedemos a la url : http://localhost:8080/TestWebService/HiTime?wsdl, podremos ver como ha creado la SOAP y nos muestra el XML.


Podemos ver en el XML, el nombre del servicio y el puerto. En este caso "HiTimeService" y "HiTimePort", estos hay que tenerlos en cuenta por si queremos conectarlos a la SOAP mediante algún otro programa, por ejemplo un Excel o Delphi:


uses
ComObj;
var
SoapClient: OleVariant;
begin
SoapClient := CreateOleObject('MSSOAP.SoapClient');
SoapClient.mssoapinit('http://127.0.0.1:8080/TestWebService/HiTime?wsdl',
'HiTimeService', 'HiTimePort');
showmessage(IntToStr(SoapClient.getNumber));

Podemos también acceder al WebService del Jboss en la url: http://localhost:8080/jbossws/.

  • Comprobando el WebService desde Eclipse:
Podemos examinar el fichero wsdl mediante el Eclipse Web Service Explorer. Para utilizarlo es muy sencillo, nos dirigimos a la ruta:

C:\jboss-5.0.1.GA\server\default\data\wsdl\TestWebService.war

Dentro de esta, encontraremos los ficheros HiTimeServicexxxxxxx.wsdl. (Cada vez que hacemo sun cambio en nuestro proyecto, automáticamente se genera un nuevo wsdl y se lanza al WebService, por eso puede ser que tengamos un monton de ficheros:


Ahora cogemos el último fichero generado (Por la fecha), y lo copiamos dentro de nuestro proyecto en el Workspace, en mi caso:

Ahora hacemos un refresh en nuestro proyecto (F5), y nos aparecerá el wsdl en nuestro proyecto. Ahora, con el botón derecho -> Web Services -> Test with Web Service Explorer.



Si hacemos doble click sobre el wsdl, también podemos ver la información del servicio:

Ahora que sabemos que funciona correctamente, podemos acceder a este servicio desde cualquier aplicación.

  • Creando un cliente Web Service:
Ahora que ya sabemos crear el Web Service, y podemos ver si funciona correctamente, podemos generar su proyecto cliente y hacer el test mediante páginas en JSP.

Despues de copiar el wsdl dentro de nuestro proyecto, desde la ruta:
C:\jboss-5.0.1.GA\server\default\data\wsdl\TestWebService.war,
hacia : D:\workspaceJ2EE\TestWebService\WebContent.

Nos aparecerá el wsdl dentro de nuestro proyecto. Ahora hacemos un nuevo Web Service Client, vamos a File -> New Other -> Web Service Client

Configuramos el asistente de la siguiente manera:


En Test Client, y luego dentro de Client Project, tenemos que modificar los valores que hay por:


No dejar el mismo nombre de antes, ya que sinó nos eliminará nuestro proyecto. Creamos uno y le indicamos que es un cliente.

Ahora hacemos finish, y empezará a cargar todo el test en el JBoss, y nos generará las página JSP para poder hacer la edición de los métodos de nuestra SOAP.


Si no arranca a la primera, parad el Server y arrancarlo todo otra vez junto. Luego si vamos a las url:
http://127.0.0.1:8080/TestWebService/HiTime?wsdl
http://localhost:8080/TestWebServiceClient/sampleHiTimeProxy/TestClient.jsp

Podremos ver la página con el XML, y la página de test hecha en JSP:


Podemos ver como funciona perfectamente y podemos interaccionar con la SOAP y nos devuelve el texto creado por nuestro método.

  • Enlaces de interés:
http://www.proyectoautodidacta.com/2008/05/14/que-es-un-servicio-web/
http://www.eclipse.org/webtools/jst/components/ws/1.5/tutorials/TopDownWebService/TopDownWebService.html

9 comments:

  1. pesimo no explica nada... un tutorial es un paso a paso

    ReplyDelete
    Replies
    1. Busca en los enlaces de interes. Este articulo no es para iniciantes y requiere de ciertos conocimientos previos.

      Delete
  2. Muchas GRACIAS, a pesar que ya han pasado más de 4 años desde su publicación, me ha servido a la perfección.

    Y debo decir que en esto de los WebService soy principiante.

    ReplyDelete
    Replies
    1. Gracias Gutenberg, un placer haber podido ayudarte. Los conceptos basicos nunca caducan.

      Delete
  3. Oye tiiiiiiiiiiiiiiiiiiio muchas gracias!!!!
    Joder, yo saltándome clases y tú haciendo que valga la pena hacerlo!!! Muchas Gracias!!!
    Sí es cierto que se quedan un porrón de preguntas en el tintero, pero EH!!! :
    FUNCIONA.
    Como ves, no me contengo de la emoción. Es la emoción propia del que maneja algo que no comprende, no sé si sabes a qué me refiero xD Jo, mira que no soy de participar en estas cosas pero cuando una cosa vale la pena, la vale. Y he visto algún comentario negativo. PUES PARA NADA. Además, tenías razón hasta en lo de: "si no funciona, vuelve a iniciar el servidor con todo". Yo todo pesimista, pensando "malditos webservicios, nunca los sabré manejar!!" y efectivamente, he tardado lo mio entre unas cosas y otras (ponle 1 maldita hora con la tontería mínimo... y sé que es una tontería! Pero ya ves, como es eso? Las cosas de palacio van despacio?
    En fin, oye, siento mi incontinencia xD es que cuando consigo cosas que nunca creí que conseguiría, pasa lo que pasa.
    Nadapues, me alegro de haber topado con este rápido pero pragmático overview de los webservices (la otra alternativa era leerse una barbaridad de páginas en inglés que a saber si acabas entiendiendo o consiguiendo hacer que funcione, de ahí mi enorme alegría...). Ah!!! Y ahora que funciona, lo que creo que molaría que pusieras es cómo ampliar esta pequeña base (en todos los tutoriales dicen que los webservicios son tecnologías muy complejas, y con lo que has mostrado, parece que se equivocan...), no sé, links a referencias oficiales, otros tutoriales que te hayan servido a ti de ayuda, ecétera. Pero vaya, esto último lo digo como aporte mío hacia ti, que tú por mí ya has hecho mucho. Thxs man!! ;)

    ReplyDelete
    Replies
    1. De nada! Si, tengo pendiente ampliar estos capitulos!

      Gracias,
      Jordi

      Delete
  4. Excelente Gracias!

    Pdt: El que dijo que pesimo no sabe donde esta parado ¬¬

    Un saludo.

    ReplyDelete
  5. Ya pude crear mi primer web service
    Gracias

    ReplyDelete