Para iniciar este post debemos
tener en cuenta lo siguiente:
1. Utilizaremos
la definición de nuestro servicio web anterior de php (ósea el wsdl), Aquí
lo encuentra , de todos modos pondré el contenido del wsdl no se vayan.
2. Además
recordemos el paso del pitufo.
3. Vamos
a utilizar NetBeans (Aquí puedes leer mas) a
veces se instala cuando bajan el jdk, ahora estoy utilizando Windows (no me
juzguen ya pondré algo utilizando Linux sobre computo paralelo o algo
posteriormente)
Una de las cuestiones que siempre
dicen por ahí y que considero esencial para un desarrollador decente es
reutilizar código, esto por beneficios y demás y porque nos ahorra tiempo y
como nos daremos cuenta en un trabajo el tiempo es el recurso más escaso. Bueno
vamos al punto (ya todos con su pitufo?) en primer lugar la definición de
nuestro servicio web:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
name="compareTo"
targetNamespace="http://www.ITO.com/compareTo.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.ITO.com/compareTo.wsdl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://www.ITO.com/compareTo.xsd1">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Created using Cape Clear Studio SOA Editor -
http://www.capeclear.com</wsdl:documentation>
<wsdl:types>
<xsd:schema
targetNamespace="http://www.ITO.com/compareTo.xsd1"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://www.ITO.com/compareTo.xsd1"> </xsd:schema>
</wsdl:types>
<wsdl:message name="compareToResponse">
<wsdl:part name="result" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="compareToRequest">
<wsdl:part name="numberA" type="xsd:int"/>
<wsdl:part name="numberB" type="xsd:int"/>
</wsdl:message>
<wsdl:portType name="compareToPortType">
<wsdl:operation name="compareTo">
<wsdl:input message="tns:compareToRequest"/>
<wsdl:output message="tns:compareToResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="compareToBinding" type="tns:compareToPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="compareTo">
<soap:operation soapAction="capeconnect:compareTo:compareToPortType#compareTo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="compareTo">
<wsdl:port binding="tns:compareToBinding" name="compareToPort">
<soap:address location="http://localhost/ITOServicios/compareTo/compareTo.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Esta definición fue creada en el post anterior si quieren
chequen no vamos explicar mucho sobre el
ahora, solo recordaremos un poco sobre la operación que realizábamos, la
operación compara dos números enteros y vamos a iniciar el NetBeans, yo utilizo la
versión 7.0.1 pero supongo que no existirá ningún problema con alguna otra.
Vamos a ir
a file->new->project.
De la ventana seleccionamos el
tipo del proyecto Java Web y una aplicación web y damos continuar.
El paso siguiente es indicar el
nombre y donde se guardara el nuestro proyecto como se aprecia en la imagen he
seleccionado “C:\ITOServicios” pero bueno pongan lo que ustedes gusten.
Seleccionamos nuestro servidor de
aplicaciones yo seleccione GlassFish y la versión de Java EE 5 (pueden utilizar
la 6), y vamos a dar click next.
Y en frameworks no vamos a
seleccionar ninguno; y hacemos click en Finish.
Tendremos algo como lo que se ve en la imagen. Ahora
agregaremos nuestro servicio web en este caso vamos a generarlo desde un WSDL,
hacemos click derecho en el proyecto y agregamos un nuevo elemento, esto es
new->other.
Seleccionamos la opción Web Services y en el tipo Web Service from WSDL. Y damos click en
Next,
Ahora introducimos el nombre del servicio web el paquete y
la dirección donde se encuentra el servicio en mi caso lo tengo en una carpeta
llamada “C:\wsdlITOServicios\compareTo.wsdl” como se ve en la imagen.
Obtenemos algo como la imagen no sé si se aprecia pero en el
output se puede ver el proceso donde se convierte el wsdl hacia clases Java
(mas bien se generan clases para manejar e implementar lo definido en el wsdl),
ahora vamos a escribir la implementación del servicio web
/*
* To change this template, choose Tools |
Templates
* and open the template in the editor.
*/
package
www.ITO;
import
javax.jws.WebService;
/**
*
* @author Roque
*/
@WebService(serviceName
= "compareTo", portName = "compareToPort",
endpointInterface = "com.ito.compareto.CompareToPortType",
targetNamespace = "http://www.ITO.com/compareTo.wsdl", wsdlLocation =
"WEB-INF/wsdl/CompareTo/compareTo.wsdl")
public
class CompareTo {
/***
* Implements the compareTo operation
* that is used to know wich number is
* bigger or if they are equal
*
* @param numberA the first number to
compare
* @param numberB second number to compare
* @return
*/
public int compareTo(int numberA, int
numberB) {
if( numberB > numberA )
{
return -1;
}
else if(numberA > numberB )
{
return 1;
}
else
{
// is equal
return 0;
}
}
}
El pedasito de código básicamente nos realiza la operación de
comparación entre dos números que denominamos “a” y “b” donde:
·
si “a” > “b” regresa como resultado un numero
1
·
si “b” > “a” regresa como resultado el valor
-1
·
y en cualquier otro caso regresamos 0 asumiendo
que si no son mayores es que son iguales
Otro detalle, siempre que puedan comenten su código por
lo que mas quieran, en un libro leí lo siguiente “piensa que el encargado de
mantener tu código es un asesino en serie que sabe donde vives”.
Vamos a ejecutar nuestro proyecto.
Ahora en la barra de direcciones agregaremos el nombre de
nuestro servicio web, quedando algo como http://localhost:8080/CompareTo/compareTo,
con esto veremos que nos da información del servicio web y vamos a copiar la dirección
a nuestro servicio web en mi caso es: http://localhost:8080/CompareTo/compareTo?wsdl
Ahora vamos a agregar el cliente del servicio web esto para
efectos simplemente demostrativos. Para esto vamos a agregar un nuevo elemento
a nuestro proyecto ya saben click derecho sobre el proyecto y new other
Aquí seleccionamos Web Servicies y Web Service Client y
damos click en siguiente
Ahora pegaremos la dirección de nuestro wsdl y vamos a
indicar el nombre del paquete en Package yo coloque www.client
pero pueden indicar cualquier el mismo que el anterior si lo desean.
Ahora únicamente tenemos que incluir al cliente para que
este invoque a nuestro servicio web, vamos a nuestro index y vamos a arrastrar
desde el apartado que nos genero cuando creamos nuestro cliente que se llama
Web Service Refetences el cliente para
nuestra operación,
Como se ve en la imagen es el elemento que tengo
seleccionado.
Lo que nos generara una porción de código para ejecutar
nuestro servicio web, esta parte como es para realizar prueba vamos a
ejecutarla y como se ve el numero A y numero B tienen el valor de 0.
Ya que ambos números son iguales nos devuelve el valor 0 que
es correcto ahora realizamos algunos cambios y ejecutamos nuevamente.
Con eso concluiremos nuestras pequeñas pruebas sobre la implementación
y este largo post.