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:
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
[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:
Podemos también acceder al WebService del Jboss en la url: http://localhost:8080/jbossws/.
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));
- Comprobando el WebService desde Eclipse:
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:
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.eclipse.org/webtools/jst/components/ws/1.5/tutorials/TopDownWebService/TopDownWebService.html





































