M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

157
M.C. Enrique Ruiz Díaz Guías para crear y manejar Servicios Web 25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 1 GUIAS PARA CREAR Y MANEJAR SERVICIOS WEB (nota: son varias guías en este documento) M.C. Enrique Ruiz Díaz. Estoy titulado en la Maestría en Ciencias de la Computación, Misma que estudié en el Instituto Tecnológico de Orizaba, Ver, México. Generación 2005-2007. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/

description

Breve guias para crear y manejar Servicios Web, en lenguaje Java.Estos conocimientos los obtuve de mis practicas academicas durante mi estancia en el Instituto Tecnologico de Orizaba, Ver., Mexico, en mis estudios de Maestria en Ciencias de la Computacion (generacion 2005-2007).

Transcript of M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

Page 1: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 1

GUIAS PARA CREAR Y

MANEJAR SERVICIOS WEB

(nota: son varias guías en este documento)

M.C. Enrique Ruiz Díaz.

Estoy titulado en la Maestría en Ciencias de la Computación, Misma que estudié en el Instituto Tecnológico

de Orizaba, Ver, México. Generación 2005-2007.

Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/

Page 2: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 2

COMO HACER CLIENTES PARA

DOCUMENTOS WSDL

M.C. Enrique Ruiz Díaz

Page 3: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 3

La forma correcta de bajar el wsdl desde xmethods es dando clic con botón derecho sobre el vínculo del URL del wsdl e indicando “Guardar destino como …”

Para guardar el wsdl bajado desde xmethods.net, ponga el nombre del archivo entre comillas dobles “AgenteelCP.wsdl”, asegúrese que la extensión quede como “wsdl” y que tipo sea “Todos los archivos”

Page 4: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 4

Ahora, copiamos el wsdl “AgenteelCP.wsdl” a la carpeta bin de la carpeta wsdk_v5 C:\wsdk_v5\bin\AgenteelCP.wsdl Utilice el comando: WSDL2WebService de la siguiente manera: 28/10/2006 07:09 a.m. 2,689 test.wsdl 27/09/2006 07:46 p.m. <DIR> TheaterMovie 25/09/2006 04:39 p.m. 8,305 TranslateService.wsdl 10/11/2006 12:37 p.m. <DIR> two_methods 10/11/2006 12:36 p.m. 5,252 two_methods.wsdl 31/05/2003 12:22 a.m. 1,236 UDDIPublish.bat 31/05/2003 12:22 a.m. 1,242 UDDIUnpublish.bat 26/09/2006 08:08 p.m. <DIR> Urate2city 27/09/2006 10:20 a.m. <DIR> USHolidayService 27/09/2006 10:18 a.m. 19,663 USHolidayService.wsdl 31/05/2003 12:22 a.m. 1,217 version.bat 18/09/2006 03:31 p.m. <DIR> ws1 18/09/2006 09:49 a.m. 1,942 ws1.wsdl 18/09/2006 03:34 p.m. <DIR> ws2 18/09/2006 09:48 a.m. 1,620 ws2.wsdl 31/05/2003 12:22 a.m. 1,386 wsdkHelp.bat 22/09/2006 04:48 p.m. <DIR> wsdl codigo postales México 21/09/2006 06:21 p.m. <DIR> wsdl dos ciudades 31/05/2003 12:22 a.m. 1,336 WSDL2WebService.bat 26/09/2006 07:56 p.m. <DIR> Xrate2city 20/09/2006 12:52 p.m. <DIR> Zcode5 20/09/2006 07:03 p.m. <DIR> ZipCode del profe Giner 20/09/2006 10:17 a.m. 2,727 ZipCode.wsdl 20/09/2006 10:51 a.m. 3,097 ZipCode2.wsdl

Page 5: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 5

20/09/2006 12:49 p.m. 2,748 ZipCode5.wsdl 20/09/2006 12:49 p.m. 2,748 ZipCode6.wsdl 20/09/2006 07:07 p.m. <DIR> zipcode_giner 20/09/2006 07:37 p.m. <DIR> zipcode_giner2 50 archivos 342,579 bytes 61 dirs 41,366,937,600 bytes libres C:\WSDK_v5\bin>WSDL2WebService -createService Agenteel -project Agenteel AgenteelCP.wsdl En donde “Agenteel” son carpetas a crearse, y “AgenteelCP.wsdl” es nuestro documento wsdl. Si todo va bien, el sistema debe generar los siguientes mensajes:

Creating new Web-Service: Agenteel ... Creating build script... A new Web-Service "Agenteel" has been created successfully in the project direct ory C:\WSDK_v5\bin\Agenteel. To complete the Web-Service, you can now fill in your implementation code in the following classes: AgenteelCodigoPostalBindingImpl.java Then compile the code using the provided script C:\WSDK_v5\bin\Agenteel\Agenteel \compile.bat and run the tool again with the -createEar option. C:\WSDK_v5\bin>

Y con ello se creó el fólder “Agenteel” con una secuencia de subcarpetas. En esa carpeta, descienda hasta encontrar el archivo “compile.bat” y duplíquelo, ahora con el nombre de “compile2.bat”.

Page 6: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 6

Abra en modo de edición “compile2.bat” El cual presenta el siguiente contenido:

@echo off REM Generated by WSDK 5.0 on Sat Dec 16 09:53:24 CST 2006 REM Set the USER_CLASSPATH to any extra dependencies required by your implementation. set USER_CLASSPATH= set SYSTEM_CLASSPATH=C:\WSDK_v5\appserver\lib\axis.jar;C:\WSDK_v5\appserver\lib\commons-logging-api.jar;C:\WSDK_v5\appserver\lib\j2ee.jar;C:\WSDK_v5\appserver\lib\jaxrpc.jar;C:\WSDK_v5\appserver\lib\qname.jar; "C:\WSDK_v5\appserver\java\bin\javac" -classpath "%SYSTEM_CLASSPATH%;%USER_CLASSPATH%" C:\WSDK_v5\bin\Agenteel\Agenteel\agenteelcodigopostal\*.java

Page 7: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 7

A al última instrucción (en negritas) agrege:

client-side\

Para que quede así: C:\WSDK_v5\bin\Agenteel\Agenteel\ client-side\agenteelcodigopostal\*.java Entérese que se trata que compile2.bat encuentre los archivos *.java que se encuentran en la rama client-side, de allí, la necesidad de crear este ruta en específico. Ahora, guarde los cambios hechos en compile2.bat A partir de la rama client-side, descienda hasta encontrar los archivos *.java y allí, con ellos, cree el cliente que consumirá el servicio Web, con el nombre Client.java. Este deberá programarse, por ejemplo, usando JCreator a partir del siguiente formato:

package XXX; public class Client { public static void main (String[] args) { try { … … .. } catch(Exception e) { … } } }

AgenteelCodigoPostalServiceLocator loc = new AgenteelCodigoPostalServiceLocator(); Creamos el objeto “loc” en base a la clase del archivo *locator.java, que para este específico caso se llama:

AgenteelCodigoPostalServiceLocator.java

Page 8: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 8

Ahora, declaramos el objeto “port” con base en la clase del archivo *portType.java o *port.java, que para este específico caso se llama:

AgenteelCodigoPostalPort.java Por lo que la declaración de nuestro objeto “port” queda así:

AgenteelCodigoPostalPort port = … En esa misma línea de código, instanciamos al objeto “port” con base a un método “get” del objeto “loc” antes creado AgenteelCodigoPostalPort port =loc.get…( ); El nombre exacto de ese método, lo obtendremos buscándolo en el archivo *locator.java, dicho método tiene las siguientes características:

• está en la clase *locator.java. • comienza con la expresión “get”. • Generalmente termina con la expresión “port”. • No recibe parámetro alguno. • Lanza una: throws javax.xml.rpc.ServiceException

El método que cubre estas características es:

public AgenteelCodigoPostal.AgenteelCodigoPostalPort getAgenteelCodigoPostalPort() throws javax.xml.rpc.ServiceException

Por tanto, la declaración e instanciación del objeto “port” queda así:

AgenteelCodigoPostalPort port = loc.getAgenteelCodigoPostalPort(); Con esto, nuestro cliente (Client.java) lleva esta forma;

package ….; public class Client { public static void main (String[] args) { Try { AgenteelCodigoPostalServiceLocator loc = new AgenteelCodigoPostalServiceLocator(); AgenteelCodigoPostalPort port = loc.getAgenteelCodigoPostalPort(); …. …. } catch(Exception e) { } } }

Page 9: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 9

Del archivo del cual se obtuvo la clase para declaración del objeto “port” podemos copiar el package, para nuestro Client.java: package AgenteelCodigoPostal; Note que el package desciendo de la rama “client-side”, y aunque en ese caso solo se presenta un nivel de descenso, en otros casos, la ruta de descenso del package es más extensa. Sin embargo, no basta con expresarlo textualmente, ahora debemos configurar al JCreator para que reconozca dicho packege:

Elegimos / Configure/ JDK Profiles / Clic sobre JDK Versión 1.5.0_06 (que en este caso es el java que se instaló), el cual debe resaltarse en color azul, y a continuación oprimimos el botón “Edit”, “Add” y luego elegimos el botón “Path”

Page 10: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 10

Buscamos la carpeta principal de nuestro proyecto “Agenteel” y descendemos hasta “client-side” nada más.

Page 11: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 11

Damos “Aceptar” Sin embargo, JCreator agregará este Path hasta el final de una serie de elementos:

Allí, con nuestro “Path” remarcado en azul, súbalo hasta el tope, con el botón “Up”. Vea que este ilustración ya aparecen agregados los elementos tales como: webservices.jar, úname.jar, axis.jar, etc. Sin embargo, si es su primera experiencia con la creación de Clientes, entonces JCreator no le va a presentar dichos elementos, hay que agregarlos: Los elementos que deben agregarse están señalados en el archivo compile2.bat que antes se mostró:

@echo off REM Generated by WSDK 5.0 on Sat Dec 16 09:53:24 CST 2006 REM Set the USER_CLASSPATH to any extra dependencies required by your implementation. set USER_CLASSPATH= set SYSTEM_CLASSPATH=C:\WSDK_v5\appserver\lib\axis.jar; C:\WSDK_v5\appserver\lib\commons-logging-api.jar; C:\WSDK_v5\appserver\lib\j2ee.jar; C:\WSDK_v5\appserver\lib\jaxrpc.jar; C:\WSDK_v5\appserver\lib\qname.jar;

Page 12: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 12

"C:\WSDK_v5\appserver\java\bin\javac" -classpath "%SYSTEM_CLASSPATH%;%USER_CLASSPATH%" C:\WSDK_v5\bin\Agenteel\Agenteel\agenteelcodigopostal\*.java

Compile2.bat nos indica que dichos elementos deben agregarse, y además nos dice la ruta donde encontrarlos: axis.jar; commons-logging-api.jar; j2ee.jar; jaxrpc.jar; qname.jar; Sin embargo, también agregue estos elementos: webservices.jar commons-discovery.jar De modo, que para nuestro primer ejercicio de creación de Cliente para un wsdl, JCreator debe presentar un Path y siete archivos *.jar incrustrados:

Y la forma de agregar, dichos *.jar es a traves del botón “Add” y luego “Add archive”

Page 13: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 13

Y se procede a extraer los *.jar, uno a uno, desde la ruta que nos indicó el archivo “compile2.bat”. Recuerde que el Path con el que se desea trabajar, debe quedar en primerísimo posición. En esta ocasión no existiría conflicto dado que éste es único. Sin embargo, cuando se trabaje con dos o más Client.java para diversos wsdl, JCreator solo invocará al primer Path que encuentre, de allí que el de interés debe estar en primera posición. Siempre aplique el botón “Apply”, y luego el botón “OK” que se indica durante el proceso anterior.

Page 14: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 14

Ahora, los métodos que nos proporciona el servicio Web, se obtienen del objeto “port” y dado que éste deriva de la clase *PortTye.java allí encontraremos los métodos de “port”.

/** * AgenteelCodigoPostalPort.java * * Este archivo se ha generado automáticamente a partir de WSDL * por el emisor de Apache Axis WSDL2Java. */ package AgenteelCodigoPostal; public interface AgenteelCodigoPostalPort extends java.rmi.Remote { public AgenteelCodigoPostal.CPResult[] getCodigoPostalFromNumber(AgenteelCodigoPostal.CPQuery codigo) throws java.rmi.RemoteException; public AgenteelCodigoPostal.CPResult[] getCodigoPostalFromAsentamiento(AgenteelCodigoPostal.AsentamientoQuery elasentamiento) throws java.rmi.RemoteException; public AgenteelCodigoPostal.CPResult[] getCodigoPostalFromMunicipio(AgenteelCodigoPostal.MunicipioQuery elasentamiento) throws java.rmi.RemoteException; public AgenteelCodigoPostal.AgenteelMessageResult getMessageFromAgenteel(AgenteelCodigoPostal.AgenteelMessageQuery foo) throws java.rmi.RemoteException;

}

Si optamos por usar el método getCodigoPostalFromMunicipio Sus parámetros son: AgenteelCodigoPostal.CPResult[] getCodigoPostalFromMunicipio(AgenteelCodigoPostal.MunicipioQuery elasentamiento); Ante ello, procedamos a copiar los elementos de envío y de retorno: AgenteelCodigoPostal.MunicipioQuery elasentamiento; // parámetro de envío AgenteelCodigoPostal.CPResult[] // parámetro de recepción Vea que antes de invocar el método del objeto “port” requerimos dos variables. Una de tipo: MunicipioQuery y otra que es un arreglo de tipo: AgenteelCodigoPostal.CPResult[] Procedamos a declarar nuestra variable de tipo: MunicipioQuery AgenteelCodigoPostal.MunicipioQuery elasentamiento; // solo está declarada. Elasentamiento = new AgenteelCodigoPostal.MunicipioQuery();

Page 15: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 15

// ahora la instanciamos Ahora procedemos a abrir el archivo MunicipioQuery.java para enterarnos que esta clase posee un método que se llama: void setMunicipio(java.lang.String municipio) el cual procedemos a invocar para aplicar un valor de origen a la variable “elasentamiento” elasentamiento. setMunicipio(“Orizaba”);

AgenteelCodigoPostal.MunicipioQuery elasentamiento; elasentamiento = new AgenteelCodigoPostal.MunicipioQuery(); elasentamiento. setMunicipio(“Orizaba”);

Ahora, para nuestra variable de recepción, necesitamos declarar un array de tipo: CPResult

AgenteelCodigoPostal.CPResult[] miarrayCPResul; Abramos el archivo CPResul.java y descubramos que por ejemplo, esta clase posee un método que se llama:

int getCodigoPostal() El cual podemos aplicar al array obtenido para obtener los códigos postales. AgenteelCodigoPostal.CPResult[]miarrayCPResul; // Vea que solo está declarada. Siempre tenga como REGLA que si un método devuelve un array, entonces este solo debe declararse para cuando se invoque el método correspondiente este le otorgue el tamaño correspondiente. Obviamente, yo no puedo instanciar un array con, digamos, cinco elementos cuando el método tal vez me devuelva diez elementos. miarrayCPResul = port. getCodigoPostalFromMunicipio (elasentamiento); Con lo cual, nuestro Client.java va así:

package AgenteelCodigoPostal; public class Client { public static void main (String[] args) {

Page 16: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 16

try { AgenteelCodigoPostalServiceLocator loc = new AgenteelCodigoPostalServiceLocator(); AgenteelCodigoPostalPort port = loc.getAgenteelCodigoPostalPort(); AgenteelCodigoPostal.MunicipioQuery elasentamiento;

elasentamiento = new AgenteelCodigoPostal.MunicipioQuery();

elasentamiento.setMunicipio("Orizaba");

AgenteelCodigoPostal.CPResult[]miarrayCPResul; // Vea que solo está declarada. // Porque desconozco el tamaño que la invocación del método de "port" le asigne.

miarrayCPResul = port.getCodigoPostalFromMunicipio (elasentamiento);

} catch(Exception e){ } } }

Ahora solo nos resta desentrañar la información del array: miarrayCPResul cuyos métodos se encuentran en el archivo: CPResult.java, dado que de allí proviene su clase. Nuestro Client.java queda así:

package AgenteelCodigoPostal; public class Client { public static void main (String[] args) { try { AgenteelCodigoPostalServiceLocator loc =

new AgenteelCodigoPostalServiceLocator();

AgenteelCodigoPostalPort port = loc.getAgenteelCodigoPostalPort(); AgenteelCodigoPostal.MunicipioQuery elasentamiento ; // declarada elasentamiento = new AgenteelCodigoPostal.MunicipioQuery(); // instanciada elasentamiento.setMunicipio("Orizaba"); // con asignación de valor específico. AgenteelCodigoPostal.CPResult[]miarrayCPResul;

// Vea que solo está declarada. Porque desconozco // el tamaño que la invocación del método de "port" le asigne. miarrayCPResul = port.getCodigoPostalFromMunicipio (elasentamiento);

Page 17: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 17

System.out.println

("***********Códigos Postales México, 16-dic-2006 ****************"); for (int i=0; i<miarrayCPResul.length; i++) { System.out.println

("Codigo postal = " + miarrayCPResul[i].getCodigoPostal()); }

} catch(Exception e){} } }

Ahora resta compilarlo y ejecutarlo. De acuerdo a experiencia personal, en algunos casos es suficiente con utilizar el compilador y ejecutor de JCreator, sin embargo, para ciertos servicios Web, el JCreator no los compila perfectamente. En todos los casos, será preferible utilizar “compile2.bat” para compilar, y utilizar JCreator solo para ejecutar, no para compilar. En modo MS-DOS, ejecutemos compile2.bat, recordar que ya se modificó, por tanto compilará todos los *.java en la ruta de client-side, que es la que nos interesa. El uso de compile2.bat, creará los *.class junto a los *.java. Se puede optar por, provisionalmente, usar JCreator para compilar, esto tiene la ventaja que nos ilustra de errores en la codificación. Y como ya mencioné, en varios casos, la compilación con JCreator será suficiente. Sin embargo, no siempre funciona y si compilamos con él; ahora borre la carpeta que el compilar con JCreator crea y proceda a compilar con compile2.bat. Si no borra la carpeta que JCreator crea, entonces esta entrará en conflicto con la compilación de “compile2.bat” Si compile2.bat crea todas las clases exitosamente. Ahora use JCreator solo (solo) para ejecutar el Client.java antes creado.

Page 18: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 18

La ejecución exitosa nos devuelve los codigos postales de acuerdo al municipio proporcionado, y así pudiéramos experimentar con los demás métodos que nos proporciona dicho servicio Web.

REPASANDO LAS REGLAS PARA CREAR UN CLIENTE (Client. java) PARA

UN SERVICIO WEB SEGÚN SU WSDL La ejecución del comando WSDL2WebService crea un árbol de carpetas, seguimos la ruta de la carpeta “client-side” y donde aparecen los *.java, allí creamos el Client.java, con las siguientes reglas:

1) Para crear el objeto “loc” busco el archivo *locator.java y tomo el nombre de la clase principal de ese archivo.

Miclaselocator loc = new Miclaselocator ();

2) Use la opción A o B según se indica a continuación.

A) Para crear el objeto “port” busco el archivo *portType.java y copio el

nombre de la clase principal.

miclasePortType port = …

B) Si no existiera el archivo *PortType.java, entonces abro con block de notas el archivo *.wsdl y busco la línea

Page 19: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 19

portType name = “miclaseportType”

el valor de name es la clase que estoy buscando para el objeto “port” miclaseportType port = …

3) Busco el método que invocará el objeto “loc” el cual se encuentra en el archivo *locator.java casi siempre con el nombre:

get + (el nombre de la clase del objeto “port”)

es decir, miclaseportType port = loc.get miclaseportType ( ) ;

Ese metodo get miclaseportType ( ) debe verificarse que efectivamente exista en la clase *locator.java, si no se encuentra así, identifícalo con la siguiente estructura:

get…..port ( ) throws javax.xml.rpc.service exception; Vea que este método no tiene argumentos, y además lanza una : throws javax.xml.rpc.ServiceException

4) Los métodos que proporciona el servicio son métodos que se invocan sobre el objeto “port”, por tanto, se localizan en la clase de la cual deriva dicho objeto “port”

miclaseportType port = … y “miclaseportType” se encuentra en el archivo *portType.java (o el que corresponda) y allí están los métodos a invocarse.

Page 20: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 20

Ejercicio: Hacer un cliente para el servicio Web de xmethods: JavaPortal News. Descargamos el wsdl desde xmethods: http://services.javaportal.it/kservices/JIPNews.jws?wsdl Recuerde la forma correcta de descargar el wsdl, este debe quedar con la extensión *.wsdl, en caso que no presentara originalmente ésta.

Efectivamente, este archivo, originalmente, presentaba la extensión xml, por lo que procedo a guardarlo con extensión wsdl. Ahora, copio dicho wsdl en la carpeta donde está el comando : *************************************************** ******************* C:\WSDK_v5\bin>dir j*wsdl Directorio de C:\WSDK_v5\bin 25/09/2006 04:48 p.m. 6,188 JavaPortalNews.wsdl C:\WSDK_v5\bin>

Ahora ejecuto el comando: wsdl2webservice C:\WSDK_v5\bin> wsdl2webservice -createservice JavaPortal -project JavaPortal JavaPortalNews.wsdl

Page 21: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 21

El sistema responde:

Creating new Web-Service: JavaPortal ... A new Web-Service "JavaPortal" has been created successfully in the project dire ctory C:\WSDK_v5\bin\JavaPortal. To complete the Web-Service, you can now fill in your implementation code in the following classes: JIPNewsSoapBindingImpl.java Then compile the code using the provided script C:\WSDK_v5\bin\JavaPortal\JavaPo rtal\compile.bat and run the tool again with the -createEar option. C:\WSDK_v5\bin>

Con lo cual, ya tengo una carpeta con el nombre: JavaPortal con subcarpetas en el.

Proceda a realizar el Client.java, en la subcarpeta www del lado del client-side. Con la novedad, que no se presenta un archivo *portType.java, por tanto, con block de notas abro el wsdl (JavaPortalNews.wsdl ) y encuentro que:

<wsdl:portType name="JIPNews">

JIPNews es el archivo Java que me dira la clase para el objeto “port”, en la construcción del Client.java

Page 22: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 22

JIPNews port = loc.getJIPNews();

Vea que efectivamente, existe un archivo JIPNews.java, del cual extraigo el nombre de la clase para la declaración de mi objeto “port”. Entonces, en JIPNews.java están los métodos que proporcionan el servicio Web. Por ejemplo: java.lang.String giveMe_EN(int news_Number) Recuerda que el package se encuentran en el archive donde está la clase para el objeto “port”, es decir, donde están los métodos del servicio:

package it.javaportal.www; Vea que este package es la derivación después de client-side No basta con escribirlo en el Client.java, hay que indicarlo al entorno de JCreator, dicho package

JDK Profiles / JDK Version 1.5 / Edit /

Page 23: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 23

Agregarmos Path hasta el client-side de nuestra carpeta JavaPortal. Note que la diferencia para llegar hasta los *.java, después del client-side, está especificado en el package package it.javaportal.www;

La selección del Path llega solo hasta client-side. Damos Aceptar, y con el botón Up debemos subir nuestro Path hasta la cima.

Page 24: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 24

No olvide que el JCreator debe tener incorporado ciertos archivos *.jar, tal como indica el archivo “compile.bat”

Dicho archivo “compile.bat” especifica la ruta donde se encuentran estos *.jar. Si JCreator todavía no los ha incorporado, agregue los siete que indica la anterior figura. Aunque compile.bat solo mencione como cinco. IMPORTANTE:

Page 25: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 25

Puede compilar con JCreator, unicamente para identificar errores y corregirlos, cuando la compilación ya no encuentre errores y esta se haga exitosamente, proceda a borrar la carpeta que junto a los *.java, JCreator crea. Y ahora compile con una copia de compile.bat. Recuerde, que en algunos casos la compilación con JCreator es insuficiente.

Vea la carpeta que creo la compilación con JCreator, “it”, proceda a eliminarla y compile con una copia de compile.bat (compile2.bat) Pero antes, a compile2.bat debe insertarse el elemento \client-side para que se encuentren los *.java a compilarse.

@echo off REM Generated by WSDK 5.0 on Sat Dec 16 12:46:00 CST 2006 REM Set the USER_CLASSPATH to any extra dependencies required by your implementation. set USER_CLASSPATH=

Page 26: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 26

set SYSTEM_CLASSPATH=C:\WSDK_v5\appserver\lib\axis.jar; C:\WSDK_v5\appserver\lib\commons-logging-api.jar; C:\WSDK_v5\appserver\lib\j2ee.jar; C:\WSDK_v5\appserver\lib\jaxrpc.jar; C:\WSDK_v5\appserver\lib\qname.jar; "C:\WSDK_v5\appserver\java\bin\javac" -classpath "%SYSTEM_CLASSPATH%;%USER_CLASSPATH%" C:\WSDK_v5\bin\JavaPortal\JavaPortal\client-side\it\javaportal\www\*.java

Compilamos con compile2.bat. Ahora se han creado los *.class junto a los *.java

Con JCreator solo ejecutamos, no compilamos, el Client.java

Page 27: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 27

La construcción de Client.java quedó así:

package it.javaportal.www; public class Client { public static void main (String[] args) { try { System.out.println

("************ Java Portal News.- 16- dic. 2006 - **************"); JIPNewsServiceLocator loc = new JIPNewsServiceLocator(); JIPNews port = loc.getJIPNews(); // java.lang.String giveMe_EN(int news_Number) java.lang.String resultado = new String(); int news_Number = 3; resultado = port.giveMe_EN(news_Number); System.out.println ("Resultado = " + resultado); } catch(Exception e){ } } }

A manera de estrategia, siempre atraiga el método a utilizarse y péguelo como comentario:

// java.lang.String giveMe_EN(int news_Number) De esa forma, sabemos como preparar los argumentos de envío y de recepción java.lang.String resultado = new String(); int news_Number = 3;

Page 28: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 28

Para ahora si, utilizar el método ya con los argumentos preparados de antemano. resultado = port.giveMe_EN(news_Number);

Ejercicio: hacer un cliente para el servicio Web: Ignyte's Retrieve Theaters and Movie Showtimes de xmethods.

Page 29: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 29

Originalmente, trae la extención xml pero debemos cambiarla a la extensión wsdl, y guardar con tipo “todos los archivos” para que no se altere la extensión del archivo. Ahora copiamos el archivo “moviefuctions.wsdl” a la carpeta C:\wsdk_v5\bin Ejecutamos el commando: wsdl2webservice C:\WSDK_v5\bin> wsdl2webservice -createservice theaters -project theater moviefunctions.wsdl Creating new Web-Service: theaters ... Creating build script... A new Web-Service "theaters" has been created successfully in the project direct ory C:\WSDK_v5\bin\theater. To complete the Web-Service, you can now fill in your implementation code in the following classes: MovieInformationSoapImpl.java Then compile the code using the provided script C:\WSDK_v5\bin\theater\theaters\ compile.bat and run the tool again with the -createEar option.

Page 30: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 30

Con el mensaje anterior se indica que todo salió bien y se ha creado este contenido:

Copiamos el archivo compile.bat como compile2.bat, en su misma carpeta de origen:

Page 31: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 31

A compile2.bat lo abrimos con block de notas y agregamos la expresión “client-side\” en la línea correspondiente a la búsqueda de los archivos *.java, y guardamos los cambios:

@echo off REM Generated by WSDK 5.0 on Sun Dec 17 16:40:53 CST 2006 REM Set the USER_CLASSPATH to any extra dependencies required by your implementation. set USER_CLASSPATH= set SYSTEM_CLASSPATH=C:\WSDK_v5\appserver\lib\axis.jar; C:\WSDK_v5\appserver\lib\commons-logging-api.jar; C:\WSDK_v5\appserver\lib\j2ee.jar; C:\WSDK_v5\appserver\lib\jaxrpc.jar; C:\WSDK_v5\appserver\lib\qname.jar; "C:\WSDK_v5\appserver\java\bin\javac" -classpath "%SYSTEM_CLASSPATH%;%USER_CLASSPATH%" C:\WSDK_v5\bin\theater\theaters\client-side\com\ignyte\www\*.java

Ahora, junto a los *.java del lado de client-side, creamos nuestro Client.java. Con el procedimiento ya conocido:

Page 32: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 32

Con la novedad que en la construcción del cliente, dado que no se presenta un archivo *portType.java, entonces procedo a abrir, con block de notas, el documento wsdl y busco la línea:

<wsdl:portType name="MovieInformationSoap">

En donde, el valor de name: MovieInformationSoap, me indica que abra ese archivo java y allí encontraré la clase para la instanciación del objeto “port” A manera de estrategia, para poder usar el método de port que ofrece el servicio propiamente dicho, primero atraiga la información del método de port con todo y parámetros de envío y recepción y tengalos a la vista:

com.ignyte.www.ArrayOfTheater getTheatersAndMovies (java.lang.String zipCode, int radius)

Ahora empieza desglosando sus miembros, por ejemplo, empiece a trabajar con los parámetros de envío: //java.lang.String zipCode, int radius java.lang.String zipCode = “10034”; // código posta de los Estados Unidos de América. int radius = 2; Ahora prepare el argumento de recepción: //com.ignyte.www.ArrayOfTheater com.ignyte.www.ArrayOfTheater miArrayOfTheater = new com.ignyte.www.ArrayOfTheater ( ); Aunque dice que es un array, estrictamente hablando no lo es, por tanto procede su declaración e instanciación de una vez. (si fuera un array incluiría la expresión []) Ahora sí, tiene los elementos preparados para usar el método del objeto “port”

miArrayOfTheater = port.getTheatersAndMovies (zipCode, radius);

Ahora, como miArrayOfTheater pertenece a la clase ArrayOfTheater entonces, abrimos el archivo ArrayOfTheater.java y encontramos que posee un método que se llama:

com.ignyte.www.Theater[] getTheater() Siguiendo la analogía, necesitamos preparar un objeto del tipo Theater[], ahora si array ( [ ] ) para poder usar el método: com.ignyte.www.Theater[] miTheater; // solo declaración

Page 33: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 33

Recuerda la regla, si se trata de un array no puedo instanciarlo con el operador new, porque desconozco de antemano la magnitud que finalmente tendrá el array. Ahora ya puedo usar el método: miTheater = miArrayOfTheater. getTheater(); Análogamente, los metodos de miTheater los encontramos en su clase y ésta se encuentra en el archivo Theater.java Y cada vez que se genere un objeto por la aplicación de algún método sobre un objeto existente, necesitamos ver la clase de que proviene, abrimos su archivo java y allí encontramos sus respectivos métodos. En el archivo java del cual provino el objeto port encontramos el package a utilizarse: package com.ignyte.www; Pero ya sabemos que no vasta con escribirlo, hay que indicarlo a JCreator en su entorno de desarrollo

CONFIGURE / OPTIONS / JDK PROFILES / JDK Versión 1.5 (en mi caso) / Edit / ADD / ADD PATH

Page 34: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 34

Buscamos la carpeta raiz de nuestro proyecto y descendemos solo hasta client-side, nada más, allí damos ACEPTAR.

Page 35: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 35

Con el botón UP debemos subir nuestro PATH hasta el tope, ya que si no, JCreator trabajaría con otro PATH. Luego, recuerda que JCreator debe tener anexado estos ARCHIVOS que son jar especificados por compile.bat, incluso en la figura siguiente aparecen dos más. (compile.bat indica la ruta donde estos están)

Cuando salga, no olvide aplicar el botón APPLY.

Page 36: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 36

Recuerde que conviene compilar con JCreator, solo para detectar y corregir errores en la construcción del Client.java, una vez compilado con JCreator, porque ya no hay errores, procedamos a borrar la carpeta que JCreatro crea

Vea la carpeta “com” creada por la compilación con JCreator, borrela y luego compile con compile2.bat Por cada *.java, incluyendo a Client.java, compile2.bat crea un *.class

Page 37: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 37

Ahora, con JCreator, solo ejecutamos, no compilar, el Client.java.

El código de Client.java

package com.ignyte.www; public class Client

{ public static void main (String[] args) { try

Page 38: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 38

{ MovieInformationLocator loc = new MovieInformationLocator (); MovieInformationSoap port = loc.getMovieInformationSoap();

// com.ignyte.www.ArrayOfTheater getTheatersAndMovies (java.lang.String zipCode, int radius)

java.lang.String zipCode = "10034"; // código posta de los Estados Unidos de América. int radius = 2; //com.ignyte.www.ArrayOfTheater

com.ignyte.www.ArrayOfTheater miArrayOfTheater = new com.ignyte.www.ArrayOfTheater ( );

miArrayOfTheater = port.getTheatersAndMovies (zipCode, radius); //com.ignyte.www.Theater[] getTheater()

com.ignyte.www.Theater[] miTheater; // solo declaración, al tratarse de un array desconozco el tamaño que tendrá //ya que se instanciará con un método.

miTheater = miArrayOfTheater.getTheater();

// OJO, VEA QUE EL RECORRIDO DEL ARREGLO DEBE SER DESDE 0, ES DECIR, i=0

for (int i=0; i<miTheater.length; i++) { String NombreTeatro = miTheater[i].getName(); String Direccion = miTheater[i].getAddress(); System.out.println ("Nombre del teatro: " +NombreTeatro ); System.out.println ("Direccion: "+ Direccion); ArrayOfMovie Peliculas = miTheater[i].getMovies(); com.ignyte.www.Movie[] ArraydePeliculas = Peliculas.getMovie(); for (int w=0; w<ArraydePeliculas.length; w++) {

java.lang.String NombreDePelicula = ArraydePeliculas[w].getName(); // Todo array comienza con indice = 0

java.lang.String Clasificacion = ArraydePeliculas[w].getRating();

java.lang.String horario = ArraydePeliculas[w].getRunningTime(); System.out.println("Pel: " +NombreDePelicula + " Clas: " +

Clasificacion + " hor: " + horario); }

Page 39: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 39

} System.out.println ("************* Theaters and Movies. 17-dic-2006

****************"); } catch(Exception e) { } } }

Page 40: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 40

CREACIÓN DE CLIENTES EN VERSIÓN JSP Cree una carpeta raiz para los proyectos clientes en JSP’s y en esa carpeta raiz coloque la subcarpeta “Agenteel” para el proyecto de los códigos postales de México y en ésta, las subcarpetas “classes” y “lib”, ambas en el mismo nivel de jerarquía.

En la subcarpeta “classes” copie el package completo utililizado en Agenteel, recuerde que dicho package comienza a derivar inmediatamente después de “client-side” Para este caso, el package solo tiene una carpeta que se llama “AgenteelCodigoPostal”

Page 41: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 41

Entonces, copiamos “AgenteelCodigoPostal” con todo su contenido a la subcarpeta “classes” antes creada, en nuestro proyecto para JSP’S

Por otra parte, a la subcarpeta “lib” copiamos los jar que utiliza JCreator, estos los encontramos en la ruta que indica el archivo “compile.bat”

Page 42: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 42

Ahora, sobre la raiz del proyecto agentel, es decir, la carpeta Agenteel, allí creamos, un archivo indice.jsp que recibe parámetros de envío, y creamos un archivo invoke.jsp que propiamente es el que invoca y presenta el servicio Web.

Codigo del index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> <html> <head> <title>Documento sin t&iacute;tulo</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>

Page 43: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 43

<body> <div align="center"> <p><strong>Servicio Web de Agenteel </strong></p> <form name="form1" method="post" action="invoke.jsp"> <p>Inserte el codigo Postal</p> <p> <input type="text" name="textfield"> </p> <p> <input type="submit" name="Submit" value="Enviar"> </p> <p>&nbsp; </p> </form> <p><strong></strong> </p> </div> </body> </html>

Este código: <%@ page contentType="text/html;charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> Entíendase como un requisito para la funcionalidad del servicio. Por otra parte, el código para invoke.jsp es el siguiente

<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*, AgenteelCodigoPostal.*" errorPage="" %> <html> <head> <title>Documento sin t&iacute;tulo</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <% String valorcp=request.getParameter("textfield");%> <% try {

AgenteelCodigoPostalServiceLocator loc = new AgenteelCodigoPostalServiceLocator(); AgenteelCodigoPostal.AgenteelCodigoPostalPort port = loc.getAgenteelCodigoPostalPort();

AgenteelCodigoPostal.CPQuery codigo2=new AgenteelCodigoPostal.CPQuery(); codigo2.setCodigoPostal(Integer.parseInt(valorcp));

int codigo; String asentamiento; String tipo;

Page 44: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 44

String municipio; String estado; String ciudad;

%> <div align="center"> <p><strong>Resultado de la invocacion </strong></p> <p>&nbsp;</p> <table width="100%" border="1"> <tr bgcolor="#9999CC"> <td> <div align="center"><strong>Codigo Postal</strong></div></td> <td> <div align="center"><strong>Asentamiento</strong></div></td> <td> <div align="center"><strong>Tipo de asentamiento</strong></div></td> <td> <div align="center"><strong>Minicipio</strong></div></td> <td> <div align="center"><strong>Estado</strong></div></td> <td> <div align="center"><strong>Ciudad</strong></div></td> </tr> <%

AgenteelCodigoPostal.CPResult[] resultado=port.getCodigoPostalFromNumber(codigo2);

for(int i=0;i<resultado.length;i++)

{ codigo=resultado[i].getCodigoPostal(); asentamiento=resultado[i].getAsentamiento(); tipo=resultado[i].getTipoAsentamiento(); municipio=resultado[i].getMunicipio(); estado=resultado[i].getEstado(); ciudad=resultado[i].getCiudad(); %> <tr> <td><%=codigo%> <div align="center"></div></td> <td><%=asentamiento%> <div align="center"></div></td> <td><%=tipo%> <div align="center"></div></td> <td><%=municipio%> <div align="center"></div></td> <td><%=estado%> <div align="center"></div></td> <td><%=ciudad%> <div align="center"></div></td> </tr> <%} }catch(Exception e){} %> </table> <p><strong></strong> </p> </div> </body> </html>

Con estos elementos, ahora creamos un archivo *.WAR con la herramienta : Java(TM) WebServices Developer Pack 1_0_01 Deploytool

Page 45: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 45

El crear un archivo War para un sistema JSP tiene todo un procedimiento que acontinuación de describe:

DESCRIPCIÓN GENERAL DEL PROCEDIMIENTO PARA CREAR UN ARCHIVO WAR

PARA EJECUTAR SISTEMAS JSP. Un archivo war, por ejemplo, miwar.war da acceso a un sistema jsp sin importar donde esté ubicada la carpeta que contiene dicho sistema. Siempre que sea ejecutado por la herramienta con que se crea. (Más adelante veremos que podemos usar el TomCat de Yakarta y poner mi war en la carpeta correspondiente para ejecutarlo con dicho TomCat y no depender del TomCat de la herramienta original con la que creamos el war) De tal forma que con:

http://localhost:8080/miwar <intro> Accedo al sistema jsp, obviamente, ingresando por la página de bienvenida a dicho sistema. 1.- Instalar JBuilder 2005. Por que se requiere la máquina virtual y la de JBuilder 2005 es válida. 2.- Instalar jwsdp 1_0_01 …exe. El nombre oficial del programa es Java (TM) Web Services.

Page 46: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 46

3.- Arrancar el TomCat de Java (TM) Web Services Developer.

Programas / Java (TM) Web Services / Start TomCat 4.- Arrancar DeployTool

Programas / Java (TM) Web Services / Deploy Tool Dentro de la aplicación Deploy Tool

File / New Web Application / Next

Module File Name: miwar EDIT Busco la carpeta que contiene mi sistema JSP y selecciono todos sus archivos. O más fácil, simplemente selecciono la carpeta raíz de mi sistema. ADD OK NEXT

“Please cose the type of Web component you are creating Elijo JSP NEXT JSP FileName: * En este punto, despliego ↓ y elijo mi archive JSP principal (index.jsp, por ejemplo) NEXT FINISH FILE REFS ADD Welcome Files.- doy clic en el espacio en blanco, despliego ↓ y elijo mi archivo JSP principal (index.jsp) Doy clic en Server / localhost:8080

y veo que mi aplicación (miwar) todavía no está corriendo

Page 47: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 47

Ahora doy clic en la aplicación que yo cree. Por ejemplo, miwar y con el botón derecho doy DEPLOY CLOSE Si ahora doy clic en

Servers / localhost:8080 Puedo ver que miwar está corriendo Abro el explorador y ejecuto

http://localhost:8080/miwar y se ejecuta el archivo principal (index.jsp) que da acceso al todo el sistema. La ventaja es que el sistema puede estar en una carpeta con ubicación X. Desventaja: Si se modifica algún JSP se requiere crear otro war con repetición del proceso de creación del war.

UTILIZANDO LA HERRAMIENTA Java (TM) Web Services / Deploy Tool PARA CREAR UN WAR PARA EL SISTEMA JSP Agenteel

Nota: mi PC ya tiene el JBuilder 2005, el cual se requiere por su máquina virtual. Y ya tengo instalado Java (TM) Web Services en su versión 1_0_01 … Arranco TomCat de Java (TM) Web Services.

Page 48: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 48

Arrancar el Deploytool Actualmente entro entrar como Usuario: enrique Clave: ADMIN Entro a FILE / New Web Aplication / Next Y allí, en Modulo File especifico el nombre que tendrá mi war: Agenteel17dic

Doy clic en botón EDIT

Page 49: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 49

Busco la carpeta de mi proyecto (Agenteel) doy doble clic sobre ella, para desplegar su contenido, y a continuación doy clic en el botón ADD, luego OK y NEXT Vea que el contenido de la carpeta Agenteel debe copiarse a “Contens of Agentel17dic” Elijo JSP

Page 50: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 50

NEXT A continuación, despliego JSP Filename y elijo index.jsp

NEXT FINISH

Page 51: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 51

Doy clic en pestaña FILE REFS luego en botón ADD, a continuación clic en espacio en blanco de Welcome Files, despliego, y elijo index.jsp Doy clic en Server / localhost:8080 y veo que mi aplicación todavía no está corriendo. Ahora doy clic con botón derecho en mi aplicación Agenteel17dic y con botón derecho doy DEPLOY

Si ahora doy clic en Servers / localhost:8080 puedo ver que mi aplicación está corriendo

Page 52: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 52

Abro el explorador y ejecuto http://localhost:8080/Agenteel17dic y se ejecuta el archivo principal, index.jsp que da acceso al sistema jsp

Page 53: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 53

EJECUTAR EL Agenteel17dic.war con el TomCat de Yakarta (el típico TomCat)

Cerrar el Deploytool Cerra el TomCat de Java (TM) WebServices Arrancamos el TomCat de Yakarta

Busco el archivo war antes creado: Agenteel17dic.war y lo copio a: la carpeta webapps del TomCat que estoy usando

Page 54: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 54

Dado que el TomCat está ACTIVO con el solo hecho de pegar el archivo War en la carpeta webapps da como resultado que tomCat cree AUTOMATICAMENTE, la carpeta raíz Agenteel17dic con todo su contenido dentro. Obvio, si TomCat estuviera apagado, no podría crear dicha carpeta por el hecho de pegar el war. Abro el explorador y ejecuto http://localhost:8080/Agenteel17dic Automáticamente, éste busca el archivo de presentación: index.jsp y lo despliega http://localhost:8080/Agenteel17dic/Agenteel/index.jsp

Page 55: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 55

COMO HACER EL SERVICIO PROXY PARA AMAZONBOX

M.C.. Enrique Ruiz Díaz

Page 56: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 56

Se hará un documento wsdl para responder al cliente Proxy para dos métodos de AmazonBox. Dicho docto. Wsdl debe ser del tipo “document” y “literal” y además deben cumplirse ciertas condiciones ya que por primera vez se harán dos métodos en el documento wsdl.

Nombre del wsdl: amazonproxy

Regla 1: CONDICIÓN: Se deben especificar tantos parámetros de envío (Request) como métodos se vayan a programar.

Dado que para cada método de AmazonBox se debe enviar un parámetro tipo String y se recibe otro parámetro también de tipo String, la regla 1 dice que el parámetro de envio (de tipo String) debe ser irrepetible para cada método. Dado que voy a programar nada más dos métodos, requiero dos parámetros diferentes para envio.

Creo el primer parámetro de envío de nombre BookPalabra:

Page 57: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 57

Creo el segundo parámetro de envío, también de tipo String, ahora con el nombre DVDPalabra. Para la respuesta, no es necesario crear un argumento único para cada método. Allí puedo re-usar.

Creo el argumento de nombre “Respuesta” de tipo String. Me servirá para los dos métodos que he de programar. Ahora tengo lo siguiente:

Page 58: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 58

Regla 2: Para cada método que programe requiere Messages exclusivos

Aprovecho que ya tengo un MessageReques y un MessageResponse y los re-nombro como BookRequest y BookResponse, respectivamente. Ahora, necesito crear una pareja de estos para el método para DVD’s

Page 59: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 59

Ahora conecto los Messages con los tipos de datos Ahora conecto BookRequest con BookPalabra, BookResponse con respuesta; por otra parte, conecto DVDRequest con DVDPalabra y DVDResponse con respuesta

Para el Message BookRequest creo un Parts de nombre palabra del tipo BookPalabra.

Para el Message BookResponse creo un Parts de nombre resp de tipo Respuesta.

Page 60: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 60

Para el Message DVDRequest creo un Parts de nombre palabra de tipo DVDPalabra.

Para el Message DVDResponse creo un Parts de nombre resp de tipo Respuesta. Por otra parte, necesito definir dos métodos, el sistema ya me provee del primero.

Renombre NewOperation como getBook, y creo un nuevo método de nombre getDVD.

Page 61: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 61

Para el metodo getBook, en la pestaña de Messages, me aseguro que Request esté con BookRequest y Response con BookResponse.

Page 62: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 62

Para el método getDVD asigno en la pestaña Messages, en Request a DVDRequest y en Response asigno DVDResponse.

Para cada método, note que en la pestaña Parameters se encuentran asignados los parámetros que corresponde a cada método. Donde, el parámetro Request es exclusivo a cada método y el parámetro Response se comparte entre ambos métodos.

Page 63: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 63

En la primera rama que deriva de Bindings debemos especificar Style: document.

Dentro de bindings descendemos al primer método getDVD, en la pestaña Request damos “ADD” aparece la parte “palabra”, suprimimos esta con el cursor.

Page 64: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 64

Nos vamos a la pestaña Response, damos ADD y aparece como part resp, suprimimos esta con el manualmente. Repito: se debe dar clic tanto en la pestaña Request como Response, en ambas aparecerá algo en Parts, procedemos a borrar, en ambos casos, el contenido de Parts, de tal forma que dimos ADD y borramos el contenido de parts.

Regla 3: Para cada método es necesario dar ADD para la pestaña Request y la pestaña Response y borrar lo que presenta Parts.

Note que para ambos métodos el Style es document y el Use es Literal. Guardamos el archivo, abrimos con block de notas y borramos la parte de parts="" la cual aparece cuatro veces Creamos un proyecto nuevo en NetBeans 5.5

Page 65: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 65

New Proyect / Web / Web Application

Sobre el proyecto, creamos un cliente para nosotros consumir el servicio Web de AmazonBox. WebApplication11/ New / Web Service Client /

Page 66: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 66

http://www.xmlme.com/WSAmazonBox.asmx?WSDL URL del servicio Web de Amazon Box.

Indicamos el URL del servicio Web de Amazon e indicamos un paquete: www.amazon

Se agrega un cliente (o sea nosotros) para el servicio Web de Amazon Box.

Page 67: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 67

Sobre nuestro proyecto, creamos un servicio Web, de nosotros para nuestro cliente Proxy. WebApplication11/ New / Web Service from WSDL …

Asignamos un nombre Enrique, asignamos el mismo package www.amazon Y atraemos el wsdl antes creado con soa editor

Page 68: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 68

Se crea nuestro servicio Web con los dos métodos: getBook y getDVD Ahora programamos ambos métodos de acuerdo a reglas ya conocidas.

Los métodos que se generan, listos para programarse.

Page 69: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 69

Buscamos el objeto BookBox del servicio Web de AmazonBox y lo arrastramos y soltamos dentro de nuestro método getBook. Por otra parte, Apuntamos al objeto DvdBox lo arrastramos y soltamos dentro de nuestro método getDVD. Si no pasa nada cierre el IDE y cárguelo de nuevo .

La acción anterior crea código automático, en un try – match, bórrelo para ambos métodos.

Page 70: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 70

La clave para programar los métodos está en la jerarquía de ramas que presenta el servicio Web de AmazonBox.

Vea la relación entre los objetos del servicio Web y la programación del método.

Page 71: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 71

______________________________________________________________________ public String getBook(String palabra) { String resul = ""; try { // Call Web Service Operation www.amazon.AmazonBox clien = new www.amazon.AmazonBox(); www.amazon.AmazonBoxSoap obj = clien.getAmazonBoxSoap(); resul = obj.bookBox(palabra); } catch (Exception ex) { // TODO handle custom exceptions here } return resul; } ______________________________________________________________________

Una vez programados ambos métodos, ejecutamos nuestro proyecto.

Page 72: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 72

Nos despliega una pagina JSP PAGE con el siguiente URL http://localhost:8080/WebApplication12/ A este url agregamos: http://localhost:8080/WebApplication12/amazonproxy?wsdl y se despliga el documento WSDL el que debemos entregar a nuestro cliente Proxy, no el creado con SOA EDITOR, (NO ES EL MISMO)

Page 73: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 73

La forma de guardar el wsdl es con guardar como y poner el nombre con comillas dobles y con la extensión wsdl. Con http://localhost:8080/WebApplication12/amazonproxy?Tester Probamos el servicio

Page 74: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 74

Page 75: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 75

COMO RESOLVER EL MODO PROXY

Autor: M.C. Enrique Ruiz Díaz

Page 76: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 76

Como instalar correctamente NetBeans 5.5.

1) Desinstalar el netbeans actual (por ejemplo 5.0).

2) Borrar la carpeta en documentos en setting/ enrique ruiz diaz/ netbeans. (Ya que dicha carpeta no es borrada por el des-instalador y si se deja es motivo de errores posteriores.)

3) Desinstalar el servidor que está en c:\sun\appservers\. 4) Borrar la carpeta: c:\sun\appservers\.

5) Desinstalar, si los hubiera, paqueterías complementarias al NetBeans que se está

desistalando. Tales como relativos a dispositivos moviles, etc.

5) Instalar la paquetería NetBeans 5.5 en este orden:

a) sjsas_pe-9_0_01-nb-5_5-win.exe b) netbeans-visualweb-5_5-windows.exe c) netbeans-profiler-5_5-win.exe d) netbeans-mobility-5_5-win.exe e) netbeans-cnd-5_5-windows.exe f) netbeans-ent_pack-5_5-windows.exe

NO INSTALAR netbeans-5_5-windows.exe

Page 77: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 77

COMO CONSTRUIR LOS WSDL PARA LOS CLIENTES DEL PORTAL EN SU MODO PROXY.

Con el procedimiento idéntico para la creación de WSDL’s estilo: DOCUMENT y LITERAL con SOA Editor. Recordar que estos tipos de WSDL requieren datos con determinado formato. Dichas reglas para creación de datos para este tipo de WSDL’s es importante. Nota: NetBeans 5.5 no me aceptó un documento WSDL estilo RPC y ENCODED.

COMO CREAR EL SERVICIO PROXY

1) Crear un proyecto.

FILE / NEW PROYECT / WEB / WEBAPPLICATION Name: WebApplication1

2) Crear un servicio Web (del portal en su modo Proxy para sus clientes).

Dar clic con botón derecho sobre el proyecto antes creado: WebApplication1. NEW / Web Service From WSDL … / Allí, atraigo el WSDL antes creado con SOA Editor.

3) Crear un Cliente, de Portal en su modo Proxy, para consumir el servicio Web del

proveedor externo.

Dar clic con botón derecho sobre el proyecto antes creado: WebApplication1. NEW / Web Service Client … /

Allí, o bien aplico el URL del documento WSDL del proveedor externo, o bien, si ya tengo en mi poder dicho WSDL lo atraigo desde donde lo almacené.

NOTA: TANTO EL SERVICIO WEB COMO EL CLIENTE, DEBEN TENER UN PACKAGE QUE DEBE SER EXACTAMENTE EL MISMO.

Page 78: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 78

Como aparece el servicio Web cliente que se agregó al proyecto

4) Programar el servicio Web, creando un objeto del tipo de Servicio Client (del proveedor externo) para invocar un método, recibir la respuesta, en su caso formatear ésta, y retornarla como parte de la respuesta del servicio Web para los clientes del Portal en su modo Proxy.

Programación del servicio Web para el cliente del modo Proxy

Page 79: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 79

Para programar el servicio Web para el cliente del modo Proxy, se debe comenzar por arrastrar uno de estos objetos (no recuerdo exactamente cual) “WSAmazonBox” o “AmazonBox” o “AmazonBoxSoap” que se encuentran en la rama “Web Services Reference" y se debe soltar dentro del entorno de programación del servicio Web para el modo Proxy. Note como empiezo instanciando un objeto del servicio Web cliente de la rama más superior:

www.edu.AmazonBox clien = new www.edu.AmazonBox(); Sobre el objeto antes creado, aplico el correspondiente método que me permita instanciar un objeto de una rama secundaria a la rama principal.

www.edu.AmazonBoxSoap obj = clien.getAmazonBoxSoap(); Note que “AmazonBoxSoap” es una rama que desciende de la rama principal “AmazonBox” Por último, de la anterior rama secundaria, aplico el método o métodos de interes para obtener objetos que derivan de dicha rama secundaria. Y que en este caso, son elementos de respuesta concreta que el proveedor externo ofrece.

Page 80: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 80

String resul = obj.bookBox(palabra); Note que “bookBox” es una rama que desciende de la rama secundaria “AmazonBoxSoap” y su producto, el objeto String “resul” ya es un elemento de respuesta neto del proveedor externo del servicio Web. Note la importancia de haber empleado el mismo package www.edu tanto para la inclusión, al proyecto, del servicio Web cliente (de nosotros al proveedor externo) como para la programación del servicio Web que se ofrece en modo Proxy, para los clientes del portal en este modo. De todos modos, no olvidar el arrastrar y soltar los componentes antes citados, en el entorno de programación. Recordar que en dicho entorno de programación, cuando se escribe un punto (.) NetBeans expresa los paquetes que están disponibles.

Vea como con un punto (en el entorno de programación NetBeans) se ofrece los paquetes disponibles. Vea que de la rama www descienden todos los elementos a programarse que interesan. Vea la siguiente figura:

Page 81: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 81

Los elementos de la paquetería www.edu de allí la importancia de utilizar el mismo package. 5) Ejecutar el proyecto

WebApplication1 / Run

Debe desplegar una página JSP

6) Atraemos el WSDL que creo NETBEANS 5.5 (NO es el mismo WSDL creado, anteriormente, con Soa Editor).

http://localhost:8080/WebApplication2/proxyAmazon?wsdl NOTA: Este wsdl sería el que se entregaría al cliente del portal en su modo Proxy, para que consuma el servicio que se le ofrece intermediariamente.

7) Para efecto de Probar, sin necesidad de crear nuestro propio cliente consumidor del servicio Proxy con dicho documento WSDL, podemos comprobar el servicio con la orden: ?Tester, la cual se agrega, al URL que presenta como palabra final el nombre del documento wsdl.

http://localhost:8080/WebApplication2/proxyAmazon?Tester

Page 82: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 82

Se despliega lo siguiente

Como en este ejemplo, se trata del servicio de Amazon Box, requerimos enviar una palabra, por ejemplo, “Java” e invocar el método del servicio Web Proxy, para que este, internamente, invoque al Proveedor externo.

Page 83: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 83

Recordar que el modo correcto de guardar el documento wsdl que se le dará al cliente del modo Proxy, es que una vez que esté desplegado, por NetBeans, dicho documento wsdl da la orden guardar y se pone el nombre del archivo entre comillas dobles, de esta forma:

Page 84: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 84

Page 85: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 85

COMO HACER UN SERVICIO PROXY, QUE INTERNAMENTE, INV OQUE A

DOS PROVEEDORES EXTERNOS INDEPENDIENTES ENTRE SI.

1) Crear un nuevo proyecto: FILE / New Proyect / Web / Web Application

Next Asignamos un nombre, por ejemplo: WebApplication3 2) Creamos un servicio Web (el de nosotros para nuestros clientes del modo

Proxy). WebApplication3 (botón derecho) New / Web Service From WSDL /

Page 86: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 86

Page 87: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 87

Requerimos especificar un package, por ejemplo, www.prueba y atraemos el documento WSDL que se hizo, previamente, con Soa Editor, para el servicio que se entregará a los clientes del modo Proxy. (No obstante, recordar que el documento WSDL definitivo para los clientes del modo Proxy lo genera NetBeans, pero toma como punto de partida el WSDL creado, primeramente, con Soa Editor).

Page 88: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 88

Para este ejemplo, se especifico, en el wsdl que el método de invocación del cliente, en modo Proxy, enviaría un String y se le regresa un String de respuesta. NetBeans crea automáticamente el método, obviamente, con la programación del mismo a nuestra responsabilidad. Este servio invocará, internamente, a dos proveedores distintos de servicios Web, es decir, seremos, a su vez, cliente de éstos. 3) Agregamos el primer servicio cliente WebApplication3 / New / Web Service Client. ..

Page 89: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 89

A continuación, expresamos el URL del documento wsdl del primer proveedor externo que estamos agregando, o bien, si ya descargamos su documento WSDL lo invocamos localmente. Además, especificamos un package, expresemos el mismo que se empleo cuando se creo el servicio Web. Es decir, www.prueba

Page 90: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 90

Se debe agregar, automáticamente, al entorno de nuestro proyecto el primer proveedor externo de servicio Web.

Siguiendo un procedimiento análogo, agreguemos el segundo proveedor externo de servicio Web. Sin embargo, no nos aceptará el mismo package www.prueba por lo que ahora, especifiquemos el package www.prueba2 Ahora, el entorno NetBeans presenta dos proveedores externos de servicio Web

Page 91: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 91

Vea que las ramas finales de ambos servicios Web representan los métodos que finalmente proveen el servicio Web. PRUEBE ARRASTRANDO Y SOLTANDO, DICHOS MÉTODOS DE SERVICIOS WEB, AL ENTORNO DE PROGRAMACIÓN DEL SERVICIO WEB (de nosotros para los clientes Proxy). NO OBSTANTE LO ANTERIOR, PARA QUE RECONOZCA EL SEGU NDO PACKAGE, ES NECESARIO CERRAR EL IDE Y VOLCAR A CARG ARLO. 4) Para empezar a invocar a un proveedor externo, el símbolo:

Nos indica el primer objeto que hay que obtener:

Así, podemos ver, que nuestra primera tarea es obtener el objeto MovieInformation

www.prueba.MovieInformation clien = new www.prueba.MovieInformation(); Siguiendo la lógica, nuestra segunda tarea, es obtener un objeto de la rama derivada de la primera, es decir, de la rama MovieInformationSoap

www.prueba.MovieInformationSoap obj = clien.getMovieInformationSoap(); Con el objeto obtenido del punto anterior, ya podemos acceder a los métodos que nos proveen el servicio Web.

www.prueba.ArrayOfTheater ArrayOfTheater = obj.getTheatersAndMovies("10034", 2);

Page 92: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 92

5) Recordar, que para invocar el segundo servicio Web, el cual posee un nombre de package propio. Es necesario volver a cargar el IDE.

Se sigue un procedimiento análogo al punto anterior. Note que cada invocación de servicio Web tiene el package que en su momento se le asignó.

Creamos el elemento de respuesta que se espera del método de nuestro servicio Web Proxy, es decir, un String, en este caso.

Page 93: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 93

6) Ejecutamos el proyecto.

Se debe desplegar, el navegador un una expresión “JSP PAGE” 7) Atraemos el WSDL creado con NetBeans que es el que se entregaría a los

clientes del modo Proxy del portal. http://localhost:8080/WebApplication3/proxyAmazon?wsdl 8) Sin necesidad de programar un cliente para el anterior WSDL, usando la

expresión ?Tester podemos comprobar el buen funcionamiento. http://localhost:8080/WebApplication3/proxyAmazon?Tester

Page 94: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 94

Así, el servicio Web Proxy provee una funcionalidad, para la cual requiere internamente consumir dos servicios Web diferentes. A continuación, Vea la respuesta con ?Tester.

Page 95: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 95

TUTORIAL SOBRE COMO CREAR SERVICIOS WEB

CON NETBEANS (Versión 1)

_____________________________________________________

AUTOR: M.C.. ENRIQUE RUIZ DIAZ

Maestría en Ciencias en Ciencias Computacionales Instituto Tecnológico de Orizaba

Page 96: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 96

TAREA 1 Definición: Dado un número de código obtener la información del registro de la base de datos para ese número de código. 1) CREANDO EL DOCTO. WSDL CON SOA EDITOR. Name: a_tarea1 OK A continuación reduzco el nombre de los dos elementos de “Message”. Messages

• NewMessageRequest • NewMessageResponse Hacer: a ambos le quito la expresión “New”

Para “MessageRequest” defino el parámetro de envío para solicitar el servicio (es decir, del lado del cliente). Por ejemplo, “code” de tipo “int”. (uno solo) MessageRequest Parts code Type: int Para “MessageResponse” define los parámetros que para darle la respuesta al cliente sobre el registro de la base de datos (parámetros que se actualizarán por referencia) MessageResponse Parts Add Nombre Type: String Add Description Type: String Add Precio Type: double Ahora nos dirigimos a “Binding” Binding / a_tarea1Binding/

Page 97: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 97

Asignamos a “Style” el valor “rpc” Ahora, allí mismo descendemos un nivel: Binding / a_tarea1Binding/NewOperation En pestaña “Request” damos “Add” y se debe agregar, automáticamente, a “Parts” la variable “code” que es el parámetro de solicitud. Luego, asigno: Use: encoded Style: rpc Luego damos clic en la pestaña “Response”, damos “Add” y se deben agregar a “Parts”, automáticamente, todas nuestras variables de repuesta. Nombre, description, precio Asignamos: Use: encoded Style: rpc Y guardamos el docto. WSDL 2) CREANDO EL SERVICIO WEB CON NETBEANS

A) Crear un proyecto

File / New Proyect / Web / Web Application Name : a_tarea1

B) Crear el servicio Web dentro del proyecto “a_tarea1”

a_tarea1 / New / WebService (use el botón derecho del Mouse) Name: a_tarea1

En package especifico una URL apropiado al tema, por ejemplo

Package = www.a_tarea1.edu

(x) From Local WSDL File

Page 98: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 98

Allí atraigo el documento WSDL antes creado con Soa Editor

C) Programar el método que se genera en el servicio Web del proyecto. El cual, si

está correcto debe presentar un parámetro de recepción para un número de código y debe variables holders que constituyen parámetros actualizados por referencia para tomar la información del registro de la base de datos.

// Poner aquí el código Java para la implementación del servicio Web tarea1.

package www.a_tarea1.edu; import java.io.*; import java.util.*; import java.net.*; import java.sql.*; public class A_tarea1PortType_Impl implements www.a_tarea1.edu.A_tarea1PortType, java.rmi.Remote { public void newOperation(int code, javax.xml.rpc.holders.StringHolder nombre, javax.xml.rpc.holders.StringHolder description, javax.xml.rpc.holders.DoubleHolder precio) throws java.rmi.RemoteException { Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

// detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {};

Page 99: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 99

try {

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena

// String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'"; String sql = "SELECT * FROM Tabla WHERE Codigo=" + code; tabla2 = instruccion.executeQuery(sql); // forma de asignar valor a una variable holders: nombre.value="refresco 1 C"; if (tabla2!=null) { while(tabla2.next()) {

code = Integer.parseInt(tabla2.getString(1)); // Por las dudas la tabla exija aplicar el índice 1

nombre.value= (String) tabla2.getString(2); description.value = (String) tabla2.getString(3); precio.value = Float.parseFloat(tabla2.getString(4)); }; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; } }

D) Dar “Run Proyect” al proyecto “a_tarea1. No al Servicio Web del proyecto

“a_tarea1”

Debe desplegarse el navegador con una página con el mensaje

Page 100: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 100

“JSP Page” Con el URL: http://localhost:8080/a_tarea1/ Al URL que presenta el navegador le agrego la expresión: a_tarea1?wsdl Se debe desplegar el documento WSDL generado por NetBeans (que no es el mismo al antes generado con Soa Editor). Cópiese este documento WSDL con Archivo / Guardar como / "a_tarea1.wsdl" Vea el uso de las comillas dobles y la asignación de la extención wsdl y no xml. Guárdese dicho documento en un lugar aparte del wsdl creado antes con Soa Editor NOTA: este wsdl creado con NetBeans internamente presenta la URL apropiada para cuando se cree el cliente que consuma el servicio Web.

3) CREAR EL CLIENTE QUE CONSUMA EL SERVICIO WEB DE LA TAREA 1

El como crear un cliente para consumir un servicio Web descrito en un documento wsdl tiene un determinado procedimiento que antes o posteriormente será descrito. En este momento se dará por hecho que usted saber crear el cliente dado el documento wsdl. (y este documento wsdl es el creado con netbeans) La programación del cliente queda así:

package com.your_company.www; public class Client { public static void main (String[] Arg) {

Page 101: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 101

try { System.out.println ("hola a"); A_Tarea1Locator loc = new A_Tarea1Locator(); A_Tarea1PortType port = loc.geta_tarea1PortTypePort();

// void newOperation(int code, javax.xml.rpc.holders.StringHolder nombre, javax.xml.rpc.holders.StringHolder description, javax.xml.rpc.holders.DoubleHolder precio)

int code = 100;

javax.xml.rpc.holders.StringHolder nombre = new javax.xml.rpc.holders.StringHolder(); javax.xml.rpc.holders.StringHolder description = new javax.xml.rpc.holders.StringHolder(); javax.xml.rpc.holders.DoubleHolder precio = new javax.xml.rpc.holders.DoubleHolder();

port.newOperation(code, nombre, description, precio);

System.out.println ("*******************************************************************************"); System.out.println ("(a_tarea1) ....................................................................");

System.out.println (code + " " + nombre.value + " " + description.value + " " + precio.value);

} catch (Exception e) { } } }

Page 102: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 102

TAREA 2

Definición: Obtener la información de toda la base de datos. 1) CREANDO EL DOCTO. WSDL CON SOA EDITOR. Name: a_tarea2 OK A continuación reduzco el nombre de los dos elementos de “Message”. Messages

• NewMessageRequest • NewMessageResponse Hacer: a ambos le quito la expresión “New”

Para “MessageRequest” en este caso, le suprimo el argumento de “Parts” porque no existirá ningún parámetro de envío. MessageRequest Parts Arg1 (remove) Para “MessageResponse” define el parámetro de respuesta que consistirá en un objeto Esto de la siguiente manera.

a) Creamos un tipo complejo

Schema Insert Complex Type Definition Type (x) Complex Type Content Model (x) Secuence Name: datos1 Child Elements Add code Type: int Add nombre Type : String Add description Type : String Add

Page 103: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 103

precio Type : double ok b) Creamos un tipo SOA Encoded Array

Schema Insert SOAP encoded Array Name: Arraydatos2 Type: datos1 Minimum number of ítems = 0 Maximum number = Unbounded Definition type: (x) Complex Type Ok

En MessageRequest no debe haber contenido alguno en “Parts” dado que no se envía parámetro alguno en la solicitud. MessageResponse Parts Add Name : resultado Type: Arraydatos2 Ahora nos dirigimos a “Binding” Binding / a_tarea2Binding/ Asignamos a “Style” el valor “rpc” Ahora, allí mismo descendemos un nivel: Binding / a_tarea2Binding/NewOperation En pestaña “Request” damos “Add” y no debe agregarse parámetro alguno porque no existe para Request. Luego, asigno: Use: encoded Style: rpc Parts : (vacío)

Page 104: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 104

Luego damos clic en la pestaña “Response”, damos “Add” y se deben agregar a “Parts”, automáticamente, nuestro parámetro de respuesta. resultado Asignamos: Use: encoded Style: rpc Y guardamos el docto. WSDL (sugerencia: guardelo en una carpeta relacionada a la tarea 2 e indicando que es el wsdl creado con Soa Editor, que no será el mismo wsdl que luego cree NetBeans)

2) CREANDO EL SERVICIO WEB CON NETBEANS

E) Crear un proyecto

File / New Proyect / Web / Web Application Name : a_tarea2

F) Crear el servicio Web dentro del proyecto “a_tarea2”

a_tarea2 / New / WebService (use el botón derecho del Mouse) Name: a_tarea2

En package especifico una URL apropiado al tema, por ejemplo

Package = www.a_tarea2.edu

(x) From Local WSDL File

Allí atraigo el documento WSDL antes creado con Soa Editor

G) Programar el método que se genera en el servicio Web del proyecto. El cual, si

está correcto no debe presentar parámetro de envío y debe retornar un array de objeto el cual contendrá todos los registros de la base de datos.

Page 105: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 105

// Poner aquí el código Java para la implementación del servicio Web tarea2.

package www.a_tarea2.edu; import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import java.util.*; /** * This is the implementation bean class for the a_tarea2 web service. * Created 30/11/2006 02:00:53 PM * @author enrique ruiz diaz */ public class A_tarea2PortType_Impl implements www.a_tarea2.edu.A_tarea2PortType, java.rmi.Remote { public www.a_tarea2.edu.Datos[] newOperation() throws java.rmi.RemoteException { www.a_tarea2.edu.Datos[] _retVal; Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

// detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

Page 106: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 106

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {}; List Milista = new ArrayList(); try {

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena // String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'";

// Donde code es de tipo int y no de tipo String

//String sql = "SELECT * FROM Tabla WHERE Codigo=" + code;

//String sql = "SELECT * FROM Tabla"; // int code = 100; String sql = "SELECT * FROM Tabla"; tabla2 = instruccion.executeQuery(sql); if (tabla2!=null) { while(tabla2.next()) {

int codigo = Integer.parseInt(new String(tabla2.getString(1))); String nombre = new String (new String (tabla2.getString(2))); String description = new String (new String (tabla2.getString(3))); double precio = Double.parseDouble(new String (tabla2.getString(4)));

Informacion infor = new Informacion (codigo, nombre, description, precio);

Milista.add(infor); }; // fin while // cerrando resultset

Page 107: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 107

tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; www.a_tarea2.edu.Datos[] MiVal = new www.a_tarea2.edu.Datos[Milista.size()]; for (int w=0; w<Milista.size(); w++) { MiVal[w] = new www.a_tarea2.edu.Datos(); Informacion tempInfor;

tempInfor = (Informacion) Milista.get(w); // todo array !! REQUIERE INICIALIZACIÓN CADA UNA DE LAS POSICIONES. !!

Integer cod = new Integer (tempInfor.getCode()); String nombre = new String (tempInfor.getNombre()); String description = new String ("a_tarea2" + tempInfor.getDescription()); Double costo = new Double (tempInfor.getPrecio()); MiVal[w].setCode(cod); MiVal[w].setNombre(nombre); MiVal[w].setDescription(description); MiVal[w].setPrecio(costo); } return MiVal; } public class Informacion { private Integer code; private String nombre; private String description; private Double precio; public Informacion (int micode, String nom, String descrip, double pre) { code = new Integer (micode); nombre = nom; description = descrip; precio = new Double (pre); }

Page 108: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 108

public void setNombre(String nom) { nombre=nom; } public void setDescription (String descrip) { description = descrip; } public int getCode () { return code.intValue();} public String getNombre () {return nombre; } public String getDescription () { return description; } public double getPrecio() {return precio.doubleValue(); } } // fin de "public class Informacion" }

H) Dar “Run Proyect” al proyecto “a_tarea2”.

Debe desplegarse el navegador con una página con el mensaje “JSP Page” Con el URL: http://localhost:8080/a_tarea2/ Al URL que presenta el navegador le agrego la expresión: a_tarea2?wsdl Se debe desplegar el documento WSDL generado por NetBeans (que no es el mismo al antes generado con Soa Editor). Cópiese este documento WSDL con

Page 109: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 109

Archivo / Guardar como / "a_tarea2.wsdl" Vea el uso de las comillas dobles y la asignación de la extención wsdl y no xml. Guárdese dicho documento en un lugar aparte del wsdl creado antes con Soa Editor NOTA: este wsdl creado con NetBeans internamente presenta la URL apropiada para cuando se cree el cliente que consuma el servicio Web.

3) CREAR EL CLIENTE QUE CONSUMA EL SERVICIO WEB DE LA TAREA 1

El como crear un cliente para consumir un servicio Web descrito en un documento wsdl tiene un determinado procedimiento que antes o posteriormente será descrito. En este momento se dará por hecho que usted saber crear el cliente dado el documento wsdl. (y este documento wsdl es el creado con netbeans) La programación del cliente queda así:

package com.your_company.www; public class Client { public static void main (String[] Arg) { try { A_Tarea2Locator loc = new A_Tarea2Locator(); A_Tarea2PortType port = loc.geta_tarea2PortTypePort(); // com.your_company.www.Datos[] newOperation()

Page 110: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 110

// vea que al arreglo "resultado" no se le puede especificar un //tamaño, porque se // desconoce la cantidad de registros que tendrá la bd. el tamaño se asigna

// dinamicamente con el método newOperation() com.your_company.www.Datos[] resultado; resultado = port.newOperation();

System.out.println ("************************************************* **********"); System.out.println ("a_tarea2 --------------------------------------------------");

for (int i=0; i<resultado.length; i++) { java.lang.Integer code = resultado[i].getCode(); java.lang.String nombre = resultado[i].getNombre();

java.lang.String description = resultado[i].getDescription();

java.lang.Double precio = resultado[i].getPrecio();

System.out.println (code.intValue() + " " + nombre + " " + description + " " + precio.doubleValue() + "\n\n");

} } catch (Exception e) { } } }

Page 111: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 111

TAREA 3

Definición: Obtener la información de todos los productos con el precio más bajo. Es decir, si el precio más bajo es de $100 pesos ¿Cuáles son los productos que tienen ese precio?. 1) CREANDO EL DOCTO. WSDL CON SOA EDITOR. Vea que no se requiere enviar parámetro alguno y se requiere un array de respuesta que puede contener n registros de la base de datos. Estos requerimientos se cubren perfectamente con el wsdl creado con Soa Editor para la tarea 2, entonces creemos una copia de a_tarea2.wsdl (creado con Soa editor) y pongámosle de nombre a_tarea3.wsdl 2) CREANDO EL SERVICIO WEB CON NETBEANS Cree el proyecto y su servicio Web con NetBeans aplicando un procedimiento análogo al ya visto en los ejercicios anteriores. Obviamente, el cambio principal está en la programación del servicio Web, el cual debe capturar los productos con el precio más bajo. // Programación del servicio Web tarea 3 package www.a_tarea3.edu; import java.io.*; import java.util.*; import java.net.*; import java.sql.*; public class A_tarea2PortType_Impl implements www.a_tarea3.edu.A_tarea2PortType, java.rmi.Remote { public www.a_tarea3.edu.Datos[] newOperation() throws java.rmi.RemoteException { www.a_tarea3.edu.Datos[] _retVal = null; Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

Page 112: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 112

// detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {}; List Milista = new ArrayList(); try {

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena // String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'";

// Donde code es de tipo int y no de tipo String //String sql = "SELECT * FROM Tabla WHERE Codigo=" + code; //String sql = "SELECT * FROM Tabla"; String sql = "SELECT * FROM Tabla"; tabla2 = instruccion.executeQuery(sql); if (tabla2!=null) { while(tabla2.next()) {

int codigo = Integer.parseInt(new String(tabla2.getString(1))); String nombre = new String (new String (tabla2.getString(2))); String description = new String ("a_tarea3 " + new String (tabla2.getString(3)));

Page 113: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 113

double precio = Double.parseDouble(new String (tabla2.getString(4)));

Informacion infor = new Informacion (codigo, nombre, description, precio);

Milista.add(infor);

}; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; www.a_tarea3.edu.Datos[] temp = new www.a_tarea3.edu.Datos[Milista.size()]; double minimo = 0.0; for (int w=0; w<Milista.size(); w++) { Informacion tempInfor = (Informacion) Milista.get(w); Integer cod = new Integer (tempInfor.getCode()); String nombre = new String (tempInfor.getNombre()); String description = new String (tempInfor.getDescription()); Double costo = new Double (tempInfor.getPrecio());

temp[w]= new www.a_tarea3.edu.Datos(); // !! REQUIERE INICIALIZACIÓN CADA UNA DE LAS POSICIONES. !!

temp[w].setCode(cod); temp[w].setNombre(nombre); temp[w].setDescription(description); temp[w].setPrecio(costo); if (w==0) { minimo=costo.doubleValue(); }

Page 114: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 114

if (costo.doubleValue() <= minimo) { minimo = costo.doubleValue(); } } int contadorDeMinimos = 0; for (int w=0; w<temp.length; w++) { Double precio = temp[w].getPrecio(); if (precio.doubleValue()==minimo) { contadorDeMinimos = contadorDeMinimos + 1; } } Integer a = new Integer (contadorDeMinimos);

www.a_tarea3.edu.Datos[] MiVal = new www.a_tarea3.edu.Datos[contadorDeMinimos];

int k=0; for (int w=0; w<temp.length; w++) { Double precio2 = temp[w].getPrecio(); if (precio2.doubleValue()==minimo) {

MiVal[k]= new www.a_tarea3.edu.Datos(); // !! REQUIERE INICIALIZACIÓN CADA UNA DE LAS POSICIONES. !!

MiVal[k].setCode(temp[w].getCode()); MiVal[k].setNombre(temp[w].getNombre()); MiVal[k].setDescription(temp[w].getDescription()); MiVal[k].setPrecio(temp[w].getPrecio()); k=k+1; } }

Page 115: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 115

return MiVal; } public class Informacion { private Integer code; private String nombre; private String description; private Double precio; public Informacion (int micode, String nom, String descrip, double pre) { code = new Integer (micode); nombre = nom; description = descrip; precio = new Double (pre); } public void setNombre(String nom) { nombre=nom; } public void setDescription (String descrip) { description = descrip; } public int getCode () { return code.intValue();} public String getNombre () {return nombre; } public String getDescription () { return description; } public double getPrecio() {return precio.doubleValue(); } } // fin de "public class Informacion" }

Page 116: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 116

3) CREAR EL CLIENTE QUE CONSUMA EL SERVICIO

WEB DE LA TAREA 1 El como crear un cliente para consumir un servicio Web descrito en un documento wsdl tiene un determinado procedimiento que antes o posteriormente será descrito. En este momento se dará por hecho que usted saber crear el cliente dado el documento wsdl. (y este documento wsdl es el creado con netbeans) La programación del cliente queda así:

package com.your_company.www; public class Client { public static void main (String[] Arg) { try { A_Tarea3Locator loc = new A_Tarea3Locator(); A_Tarea2PortType port = loc.geta_tarea2PortTypePort(); // com.your_company.www.Datos[] newOperation()

// vea que al arreglo "resultado" no se le puede especificar un tamaño, porque se // desconoce la cantidad de registros que tendrá la bd. el tamaño se asigna

// dinamicamente con el método newOperation() com.your_company.www.Datos[] resultado; resultado = port.newOperation();

System.out.println ("************************************************* **********"); System.out.println ("a_tarea3 --------------------------------------------------");

for (int i=0; i<resultado.length; i++) { java.lang.Integer code = resultado[i].getCode(); java.lang.String nombre = resultado[i].getNombre();

java.lang.String description = resultado[i].getDescription();

Page 117: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 117

java.lang.Double precio = resultado[i].getPrecio();

System.out.println (code.intValue() + " " + nombre + " " + description + " " + precio.doubleValue() + "\n\n");

} } catch (Exception e) { } } }

TAREA 4 Definición: Dado un array de codigos, obtener los registros de la base de datos para cada uno de los códigos proporcionados como entrada. El Servicio 4 recibe el array de códigos, pero internamente debe consumir el servicio web de la tarea 1 de una forma iterativa para cada codigo del array recibido

1) CREANDO LOS DOCUMENTOS WSDL CON SOA EDITOR. Se requiere dos documentos wsdl el primero para el servicio Web 4 y el segundo para el servicio web 1 que se consume internamente por el servicio Web 4 Vea que el wsdl 1 ya lo tenemos, solo hace falta crear el wsdl para el servicio web 4, el cual recibe un array de codigos y devuelve un array con los registros de la base de datos para cada codigo.

A) Creando el wsdl para el servicio Web 4

Name: a_tarea4 OK A continuación reduzco el nombre de los dos elementos de “Message”. Messages

• NewMessageRequest • NewMessageResponse Hacer: a ambos le quito la expresión “New”

Se requiere enviar un array de codigos, pero al crear el wsdl con Soa editor no puede hacerse de cualquier forma, porque si se crea un array de holders para codigos para

Page 118: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 118

enviarse como parámetro de envío, el JCreator no lo permite. No es posible trabajar con un array de holders si este es de petición. Por lo que debo enviar un array de Strings a) Crear un array de Strings para los códigos de envío Schema / Insert SOAP encoded array Name: arraycodes Type: Strings Minimo = 0 Maximum = Unbounded Definition Type: (x) Complex type b) Crear un array de holders para preparar el dato de recepción. Schema / Insert Complex Type Name: datos1

Definition Type: (x) Complex Type Conten Model: (x) All Add codigo Type: String Add nombres Type: Strings Add description Type: String Add precio Type: double c) Crear un array de datos para la respuesta Schema / Insert Soap encoded array Name: arraydatos Type: datos1

Minimun : 0 Maximum: Unbounded Definition Type: (x) Complex Type

Page 119: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 119

Para “MessageRequest” en este caso, define el parámetro codigos del tipo “arraycodes” MessageRequest Parts codigos Type: arraycodes Para “MessageResponse” define el parámetro de respuesta que consistirá en un objeto Esto de la siguiente manera. MessageResponse Parts Add Name: respuesta Type: arraydatos Ahora nos dirigimos a “Binding” Binding / a_tarea4Binding/ Asignamos a “Style” el valor “rpc” Ahora, allí mismo descendemos un nivel: Binding / a_tarea4Binding/NewOperation En pestaña “Request” damos “Add” y se debe agregar, automáticamente, a “Parts” la variable “codigos” que es el parámetro de solicitud. Luego, asigno: Use: encoded Style: rpc Luego damos clic en la pestaña “Response”, damos “Add” y se deben agregar a “Parts”, automáticamente, nuestra variable de repuesta. respuesta Asignamos: Use: encoded Style: rpc

Page 120: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 120

Y guardamos el docto. WSDL

2) CREANDO EL SERVICIO WEB CON NETBEANS

I) Crear un proyecto

File / New Proyect / Web / Web Application Name : a_tarea4

J) Crear el servicio Web dentro del proyecto “a_tarea4sw”

a_tarea4 / New / WebService (use el botón derecho del Mouse) Name: a_tarea4sw

En package especifico una URL apropiado al tema, por ejemplo

Package = www.a_tarea4.edu

(x) From Local WSDL File

Allí atraigo el documento WSDL antes creado con Soa Editor para el servicio Web 4

K) Programar el método que se genera en el servicio Web del proyecto. El cual, si

está correcto debe presentar un parámetro de recepción con un array de codigos y debe presentar de respuesta un array de datos

// Poner aquí el código Java para la implementación del servicio Web tarea4.

package www.a_tarea4.edu; /** * This is the implementation bean class for the a_tarea4sw web service. * Created 30/11/2006 04:28:31 PM * @author enrique ruiz diaz */ public class A_tarea4PortType_Impl implements www.a_tarea4.edu.A_tarea4PortType, java.rmi.Remote { public www.a_tarea4.edu.Datos[] newOperation(java.lang.String[] codigos) throws java.rmi.RemoteException {

Page 121: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 121

www.a_tarea4.edu.Datos[] _retVal = new www.a_tarea4.edu.Datos[codigos.length];

try { A_tarea1PortType_Impl tarea1 = new A_tarea1PortType_Impl();

javax.xml.rpc.holders.StringHolder nombre= new javax.xml.rpc.holders.StringHolder(); javax.xml.rpc.holders.StringHolder description= new javax.xml.rpc.holders.StringHolder(); javax.xml.rpc.holders.DoubleHolder precio = new javax.xml.rpc.holders.DoubleHolder();

for (int i=0; i<codigos.length; i++) { _retVal[i] = new www.a_tarea4.edu.Datos();

tarea1.newOperation(Integer.parseInt(codigos[i]), nombre, description, precio);

_retVal[i].setCodigo(codigos[i]); _retVal[i].setNombre(nombre.value); _retVal[i].setDescription(description.value + "a_tarea4"); _retVal[i].setPrecio(new Double(precio.value)); } } catch (Exception e) {} return _retVal; } }

Page 122: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 122

L) Crear el servicio Web “a_tarea1sw” dentro del proyecto a_tarea4

a_tarea4 / New / WebService (use el botón derecho del Mouse) Name: a_tarea1sw

En package especifico la misma URL del punto anterior. No puede ser diferente.

Package = www.a_tarea4.edu

(x) From Local WSDL File

Allí atraigo el documento WSDL antes creado con Soa Editor para el

servicio Web 1. El cual fue hecho para la tarea 1

M) Programar el método que se genera en el servicio Web 1 del proyecto. El cual, si

está correcto debe presentar un parámetro de recepción para un número de código y debe presentar variables holders que constituyen parámetros que se actualizaran por referencia para tomar la información del registro de la base de datos.

// Poner aquí el código Java para la implementación del servicio Web tarea1.

package www.a_tarea4.edu; import java.io.*; import java.util.*; import java.net.*; import java.sql.*; /** * This is the implementation bean class for the a_tarea1sw web service. * Created 30/11/2006 04:30:00 PM * @author enrique ruiz diaz */ public class A_tarea1PortType_Impl implements www.a_tarea4.edu.A_tarea1PortType, java.rmi.Remote { public void newOperation(int code, javax.xml.rpc.holders.StringHolder nombre, javax.xml.rpc.holders.StringHolder description, javax.xml.rpc.holders.DoubleHolder precio) throws

Page 123: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 123

java.rmi.RemoteException { Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

// detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {}; try {

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena // String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'";

String sql = "SELECT * FROM Tabla WHERE Codigo=" + code; tabla2 = instruccion.executeQuery(sql);

// forma de asignar valor a una variable holders: nombre.value="refresco 1 C";

if (tabla2!=null) { while(tabla2.next()) {

code = Integer.parseInt(tabla2.getString(1)); // Por las dudas la tabla exija aplicar el índice 1

Page 124: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 124

nombre.value= (String) tabla2.getString(2); description.value = (String) tabla2.getString(3); precio.value = Float.parseFloat(tabla2.getString(4)); }; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; } }

N) Dar “Run Proyect” al proyecto “a_tarea4.

Debe desplegarse el navegador con una página con el mensaje “JSP Page” Con el URL: http://localhost:8080/a_tarea4/ Al URL que presenta el navegador le agrego la expresión: a_tarea4sw?wsdl Se debe desplegar el documento WSDL generado por NetBeans (que no es el mismo al antes generado con Soa Editor). Cópiese este documento WSDL con Archivo / Guardar como / "a_tarea4sw.wsdl" Vea el uso de las comillas dobles y la asignación de la extención wsdl y no xml.

Page 125: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 125

Guárdese dicho documento en un lugar aparte del wsdl creado antes con Soa Editor NOTA: este wsdl creado con NetBeans internamente presenta la URL apropiada para cuando se cree el cliente que consuma el servicio Web.

package com.your_company.www; public class Client { public static void main (String[] Arg) { try { A_Tarea4SwLocator loc = new A_Tarea4SwLocator(); A_Tarea4PortType port = loc.geta_tarea4PortTypePort();

// com.your_company.www.Datos[] newOperation(java.lang.String[] codigos)

// vea que al arreglo "resultado" no se le puede especificar un tamaño, porque se // desconoce la cantidad de registros que tendrá la bd. el tamaño se asigna

// dinamicamente con el método newOperation() com.your_company.www.Datos[] resultado; java.lang.String[] codigos = new String [3]; codigos[0] = new String("106"); codigos[1] = new String("105"); codigos[2] = new String("104"); resultado = port.newOperation(codigos);

System.out.println ("************************************************* **********"); System.out.println ("a_tarea4 --------------------------------------------------");

Page 126: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 126

for (int i=0; i<resultado.length; i++) { java.lang.String code = resultado[i].getCodigo(); java.lang.String nombre = resultado[i].getNombre();

java.lang.String description = resultado[i].getDescription();

java.lang.Double precio = resultado[i].getPrecio();

System.out.println (code + " " + nombre + " " + description + " " + precio.doubleValue() + "\n\n");

} } catch (Exception e) { } } }

Page 127: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 127

TUTORIAL SOBRE COMO CREAR SERVICIOS WEB PARA MOVILES

CON NETBEANS (Versión 1)

_____________________________________________________

AUTOR: M.C. ENRIQUE RUIZ DIAZ

Maestría en Ciencias en Ciencias Computacionales Instituto Tecnológico de Orizaba

Page 128: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 128

RESOLVIENDO LA TAREA 1 PARA MÓVILES Definición: Dado un número de código obtener la información del registro de la base de datos con ese número de código.

1) CREANDO EL DOCTO. WSDL CON SOA EDITOR. Name: m_tarea1 OK A continuación reduzco el nombre de los dos elementos de “Message”. Messages

• NewMessageRequest • NewMessageResponse Hacer: a ambos le quito la expresión “New”

Para “MessageRequest” defino el parámetro de envío para solicitar el servicio (es decir, del lado del cliente). Por ejemplo, “code” de tipo “int”. Pero, como es para móviles ya no puede ser un dato simple, ahora este dato debe prepararlo así: Schema / Create Element From Type

Name: code1 Type: String

OK Para “MessageResponse” preparo el parámetro de respuesta: Schema / Insert Complex Type

• (x) Element • (x) Secuence

Name: datos2 Add

• code Type: String Add

Page 129: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 129

• nombre Type: String Add • descripción Type: String Add • precio Type: String (no utilice “double” porque posteriormente se transforma en un dato wrapper Double y el celular no lo puede procesar dice que falla la comunicación. Por lo mismo tenga cuidado con los datos int, porque si se convierten en Integer el celular no los procesa.) Nota: “Occurrence” queda con el valor “opcional”

Ahora, establezco los parámetros para “MessageRequest” y “MessageResponse”.

• Para “MessageRequest” o Parts

� Name: codigo Type: code1 • Para “MessageResponse”

o Parts Add � Name: resultado: Type: datos2

Ahora nos vamos a Binding / m_tarea1Binding/ Asignamos a “Style” el valor “document” Style: document Ahora, allí mismo descendemos un nivel: Binding / m_tarea1Binding/NewOperation

Asegurémonos que en “Parts” tanto para la pestaña “Request” como para la pestaña “Response” no debe haber contenido alguno. Si aparece algún contenido en la parte “Parts” suprimalo. Además, tanto para “Request” como para “Response” se configura así:

Style: document Use: literal

Page 130: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 130

Guardo el documento WSDL, luego lo abro con WordPad y busco: Parts = “ ” Parts = “ “ Suprimo, únicamente, estas dos expresiones y guardo el documento WSDL con la modificación.

2) CREANDO EL SERVICIO WEB MOVIL CON NETBEANS

O) Crear un proyecto

File / New Proyect / Web / Web Application Name : m_tarea1

P) Crear el servicio Web dentro del proyecto “m_tarea1”

m_tarea1 / New / WebService (use el botón derecho del Mouse) Name: m_tarea1

En package especifico una URL apropiado al tema, por ejemplo

Package = www.m_tarea1.edu

(x) From Local WSDL File

Allí atraigo el documento WSDL antes creado con Soa Editor

Q) Programar el método que se genera en el servicio Web del proyecto. El cual, si

está correcto debe presentar un parámetro de recepción para un número de código y debe retornar un dato complejo, que es el que contendrá toda la información del registro a consultarse en la base de datos.

// Poner aquí el código Java para la tarea1 Mobil.

package www.m_tarea1B.edu;

Page 131: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 131

import java.io.*; import java.util.*; import java.net.*; import java.sql.*;

/** * This is the implementation bean class for the m_tarea1B web service. * Created 28/11/2006 08:18:15 PM * @author enrique ruiz diaz */ public class M_tarea1PortType_Impl implements www.m_tarea1B.edu.M_tarea1PortType, java.rmi.Remote { public www.m_tarea1B.edu.Misdatos newOperation(java.lang.String codigo) throws java.rmi.RemoteException {

www.m_tarea1B.edu.Misdatos _retVal = new www.m_tarea1B.edu.Misdatos();

Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb"; String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase; // detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {}; //leyendo tabla en disco y pasandola al resultset

Page 132: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 132

String code3 = ""; String nombre = ""; String description =""; String precio = ""; try { // String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES

// String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena

// String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'"; Integer code = new Integer (codigo); int code2 = code.intValue(); String sql = "SELECT * FROM Tabla WHERE Codigo=" + code2; tabla2 = instruccion.executeQuery(sql); //nombre.value="refresco 1 C"; if (tabla2!=null) { while(tabla2.next()) {

code3 = tabla2.getString(1); // Trabaja con el indice inicial en 1 nombre = tabla2.getString(2) + " esta es el el proyecto prueba 2";

description = tabla2.getString(3); precio = tabla2.getString(4); }; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs

Page 133: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 133

catch(SQLException e) {}; _retVal.setCodigo(code3); _retVal.setNombre(nombre); _retVal.setDescripcion(description); _retVal.setPrecio(precio); return _retVal; } } R) Dar “Run Proyect” al proyecto “m_tarea1. No al Servicio Web del proyecto

“m_tarea1”

Debe desplegarse el navegador con una página con el mensaje “JSP Page” Al URL que presenta el navegador le agrego la expresión: m_tarea1?wsdl Se debe desplegar el documento WSDL generado por NetBeans (que no es el mismo al antes generado con Soa Editor). Cópiese la dirección URL del navegador que presenta dicho docto. WSDL.

S) Generar el proyecto Mobil

File / New Proyect / Mobile / Mobile Application Name : m_tarea1_ En “Create Adicional Templates” selecciona (x) Select All

T) Crear un “J2ME Web Service” sobre el proyecto “Mobil”

m_tarea1_ / New / J2ME Web Service Client Pegar la dirección URL del documento WSDL desplegado por NetBeans.

Page 134: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 134

Oprime la orden: “Retrieve WSDL”

U) Dar “Run” al proyecto Mobil “m_tarea1_”. Al proyecto mobil, no al J2ME Web

Service Client.

Si todo salió bien debe desplegarse un celular con acceso al método del servicio Web Mobil. En espera de que le proporcionemos un código para solicitar el servicio.

OBSERVACIÓN: Recuerde que servicio funcionará siempre y cuando no haya cerrado el servidor de NetBeans con su respectivo servicio Web.

RESOLVIENDO LA TAREA 2 PARA MÓVILES Definición: se invoca el método de este servicio movil y se obtiene un array de datos con toda la información de la base de datos.

1) CREANDO EL DOCTO. WSDL CON SOA EDITOR. Name: m_tarea2 OK A continuación reduzco el nombre de los dos elementos de “Message”. Messages

• NewMessageRequest • NewMessageResponse Hacer: a ambos le quito la expresión “New”

Para “MessageRequest” en esta ocasión no se define algún parámetro de envío para solicitar el servicio (es decir, del lado del cliente). Dado que solo se invoca el método y este debe devolver toda la información de la base de datos Para “MessageResponse” preparo el parámetro de respuesta:

Schema / Create Element From Type

Name: code1

Page 135: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 135

Type: String OK Repetir el procedimiento para crear un dato para “nombre”, “descripción” y “precio” Todos de type String (recordar que si se especifica un double, por ejemplo, luego se traslada a un Double y el celular no procesa Wrappers) code Type: String nombre Type: String descripción Type: String precio Type: String Los cuatro elementos creados con Schema / Create Element From Type Ahora creamos un nuevo complejo dato con la instrucción:

Schema / Insert Complex Type

Name: arraydedatos2

• (x) Element • (x) Secuence

Add Ocurrence

• codigo Type: code1 múltiple Add • nom Type: nombre múltiple Add • descrip Type: descripción múltiple Add • pre Type: precio múltiple Importante: “Occurrence” toma el valor de “múltiple”

Ahora, establezco los parámetros para “MessageResponse”.

• Para “MessageResponse”

o Parts Add � Name: resultado: Type: arraydedatos2

Ya que para “MessageRequest” en esta tarea no se requiere parámetro, entonces debemos eliminar el parámetro que aparece en “parts”.

Page 136: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 136

Ahora nos vamos a Binding / m_tarea2Binding/ Asignamos a “Style” el valor “document” Style: document Ahora, allí mismo descendemos un nivel: Binding / m_tarea2Binding/NewOperation

Asegurémonos que en “Parts” tanto para la pestaña “Request” como para la pestaña “Response” no debe haber contenido alguno. Si aparece algún contenido en la parte “Parts” suprimalo. Además, tanto para “Request” como para “Response” se configura así:

Style: document Use: literal Guardo el documento WSDL, luego lo abro con WordPad y busco: Parts = “ ” Parts = “ “ Suprimo, únicamente, estas dos expresiones y guardo el documento WSDL con la modificación.

2) CREANDO EL SERVICIO WEB MOVIL CON NETBEANS Seguimos un procedimiento análogo al descrito para la tarea 1 movil. La diferencia principal va a consistir en el uso de una programación apropiada para recuperar la base de datos y mostrarla al cliente movil. // Programación del método que da el servicio en NetBeans package www.m_tarea2.edu;

Page 137: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 137

import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import java.util.*; // necesario para la Lista Dinamica /** * This is the implementation bean class for the m_tarea2 web service. * Created 28/11/2006 09:26:46 PM * @author enrique ruiz diaz */ public class M_tarea2PortType_Impl implements www.m_tarea2.edu.M_tarea2PortType, java.rmi.Remote { public www.m_tarea2.edu.Arraydedatos newOperation() throws java.rmi.RemoteException {

www.m_tarea2.edu.Arraydedatos MiVal = new www.m_tarea2.edu.Arraydedatos();

Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

// detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {};

Page 138: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 138

List Milista = new ArrayList(); try {

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena // String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'";

// Donde code es de tipo int y no de tipo String //String sql = "SELECT * FROM Tabla WHERE Codigo=" + code; //String sql = "SELECT * FROM Tabla"; // int code = 100; String sql = "SELECT * FROM Tabla"; tabla2 = instruccion.executeQuery(sql); if (tabla2!=null) { while(tabla2.next()) { //i = i + 1;

int codigo = Integer.parseInt(new String(tabla2.getString(1))); String nombre = new String (new String (tabla2.getString(2))); String description = new String (new String (tabla2.getString(3))); double precio = Double.parseDouble(new String (tabla2.getString(4)));

Informacion infor = new Informacion (codigo, nombre, description, precio);

Page 139: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 139

Milista.add(infor); }; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; String[] ArrayCodes = new String[Milista.size()]; String[] ArrayNombre = new String[Milista.size()]; String[] ArrayDescriptions = new String[Milista.size()]; String[] ArrayPrecios = new String[Milista.size()]; for (int w=0; w<Milista.size(); w++) {

//MiVal[w] = new www.sw_tarea2.edu.Result(); // !! REQUIERE INICIALIZACIÓN CADA UNA DE LAS POSICIONES. !!

Informacion tempInfor; tempInfor = (Informacion) Milista.get(w); Integer cod = new Integer (tempInfor.getCode()); String nombre = new String (tempInfor.getNombre());

String description = new String ("13-Nov. List. Din. " + tempInfor.getDescription());

Double costo = new Double (tempInfor.getPrecio()); ArrayCodes[w] = new String("" + cod.intValue()); ArrayNombre[w] = new String(nombre); ArrayDescriptions[w] = new String(description); ArrayPrecios[w] = new String("" + costo.doubleValue()); }

Page 140: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 140

MiVal.setCode(ArrayCodes); MiVal.setNombre(ArrayNombre); MiVal.setDescripcion(ArrayDescriptions); MiVal.setPrecio(ArrayPrecios); return MiVal; } public class Informacion { private Integer code; private String nombre; private String description; private Double precio; public Informacion (int micode, String nom, String descrip, double pre) { code = new Integer (micode); nombre = nom; description = descrip; precio = new Double (pre); } public void setNombre(String nom) { nombre=nom; } public void setDescription (String descrip) { description = descrip; } public int getCode () { return code.intValue();} public String getNombre () {return nombre; } public String getDescription () { return description; } public double getPrecio() {return precio.doubleValue(); }

Page 141: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 141

} // fin de "public class Informacion" }

RESOLVIENDO LA TAREA 3 PARA MÓVILES Definición: obtener los productos con el precio más bajo. (El precio más bajo, podría ser por ejemplo, 100.00 pesos. Ahora se requiere saber todos los productos que tienen ese precio. 1) CREANDO EL DOCTO. WSDL CON SOA EDITOR. Name: m_tarea3 OK A continuación reduzco el nombre de los dos elementos de “Message”. Messages

• NewMessageRequest • NewMessageResponse Hacer: a ambos le quito la expresión “New”

Para “MessageRequest” en esta ocasión no se define algún parámetro de envío para solicitar el servicio (es decir, del lado del cliente). Dado que solo se invoca el método y este debe devolver toda la información de la base de datos para todos los productos con el precio más bajo. Para “MessageResponse” preparo el parámetro de respuesta:

Schema / Create Element From Type

Name: code1 Type: String

OK Repetir el procedimiento para crear un dato para “nombre”, “descripción” y “precio” Todos de type String (recordar que si se especifica un double, por ejemplo, luego se traslada a un Double y el celular no procesa Wrappers) code Type: String nombre Type: String descripción Type: String precio Type: String Los cuatro elementos creados con Schema / Create Element From Type

Page 142: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 142

Ahora creamos un nuevo complejo dato con la instrucción:

Schema / Insert Complex Type

Name: arraydedatos2

• (x) Element • (x) Secuence

Add Ocurrence

• codigo Type: code1 múltiple Add • nom Type: nombre múltiple Add • descrip Type: descripción múltiple Add • pre Type: precio múltiple Importante: “Occurrence” toma el valor de “múltiple”

Ahora, establezco los parámetros para “MessageResponse”.

• Para “MessageResponse”

o Parts Add � Name: resultado: Type: arraydedatos2

Ya que para “MessageRequest” en esta tarea no se requiere parámetro, entonces debemos eliminar el parámetro que aparece en “parts”.

Ahora nos vamos a Binding / m_tarea3Binding/ Asignamos a “Style” el valor “document” Style: document Ahora, allí mismo descendemos un nivel: Binding / m_tarea3Binding/NewOperation

Page 143: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 143

Asegurémonos que en “Parts” tanto para la pestaña “Request” como para la pestaña “Response” no debe haber contenido alguno. Si aparece algún contenido en la parte “Parts” suprimalo. Además, tanto para “Request” como para “Response” se configura así:

Style: document Use: literal Guardo el documento WSDL, luego lo abro con WordPad y busco: Parts = “ ” Parts = “ “ Suprimo, únicamente, estas dos expresiones y guardo el documento WSDL con la modificación.

2) CREANDO EL SERVICIO WEB MOVIL CON NETBEANS Seguimos un procedimiento análogo al descrito para la tarea 1 movil. La diferencia principal va a consistir en el uso de una programación apropiada para recuperar la base de datos para los productos con el precio más bajo y mostrarla al cliente movil. // Programación del método que da el servicio en NetBeans package www.m_tarea3B.edu; import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import java.util.*; // necesario para la Lista Dinamica /** * This is the implementation bean class for the m_tarea3B web service. * Created 29/11/2006 03:12:04 PM * @author enrique ruiz diaz */ public class M_tarea3PortType_Impl implements www.m_tarea3B.edu.M_tarea3PortType, java.rmi.Remote { public www.m_tarea3B.edu.Arraydatos newOperation() throws

Page 144: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 144

java.rmi.RemoteException {

www.m_tarea3B.edu.Arraydatos _retVal = new www.m_tarea3B.edu.Arraydatos();

Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb";

String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;

// detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

} catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {}; List Milista = new ArrayList(); try {

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'";

// ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena // String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'";

// Donde code es de tipo int y no de tipo String //String sql = "SELECT * FROM Tabla WHERE Codigo=" + code; //String sql = "SELECT * FROM Tabla";

Page 145: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 145

String sql = "SELECT * FROM Tabla"; tabla2 = instruccion.executeQuery(sql); if (tabla2!=null) { while(tabla2.next()) { String codigo = new String(tabla2.getString(1)); String nombre = new String(tabla2.getString(2)); String description = new String(tabla2.getString(3)); String precio = new String(tabla2.getString(4));

Informacion infor = new Informacion (Integer.parseInt(codigo), nombre, description, Double.parseDouble(precio));

Milista.add(infor); }; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; double minimo = 0.0; for (int w=0; w<Milista.size(); w++) { Informacion temp3 = (Informacion) Milista.get(w); Double precio = new Double (temp3.getPrecio()); if (w==0) { minimo=precio.doubleValue(); } if (precio.doubleValue() <= minimo) { minimo = precio.doubleValue(); }

Page 146: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 146

} int contadorDeMinimos = 0; for (int w=0; w<Milista.size(); w++) { Informacion temp2 = (Informacion) Milista.get(w); Double precio = new Double (temp2.getPrecio()); if (precio.doubleValue()==minimo) { contadorDeMinimos = contadorDeMinimos + 1; } } String ArrayCodigos[] = new String [contadorDeMinimos]; String ArrayNombres[] = new String [contadorDeMinimos]; String ArrayDescriptions[] = new String [contadorDeMinimos]; String ArrayPrecios[] = new String [contadorDeMinimos]; /* *LECCION: Vea como un Array requiere inicilizarse para cada posición en especifico, *para poderlo usar (para cada posición w): * * www.enrique.edu.Midato[] = new www.enrique.edu.Midato[10]; * MiVal[w]= new www.enrique.edu.Midato(); */ int k=0; for (int w=0; w<Milista.size(); w++) { Informacion temp3 = (Informacion) Milista.get(w); Double precio2 = new Double (temp3.getPrecio()); if (precio2.doubleValue()==minimo) { int code = temp3.getCode(); String nombre = new String(temp3.getNombre()); String description = new String(temp3.getDescription());

Page 147: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 147

ArrayCodigos[k] = new String (String.valueOf(code)); ArrayNombres[k] = new String (nombre); ArrayDescriptions[k] = new String (description); ArrayPrecios[k] = new String (precio2.toString()); k=k+1; } } _retVal.setCodigo(ArrayCodigos); _retVal.setNombre(ArrayNombres); _retVal.setDescripcion(ArrayDescriptions); _retVal.setPrecio(ArrayPrecios); return _retVal; } public class Informacion { private Integer code; private String nombre; private String description; private Double precio; public Informacion (int micode, String nom, String descrip, double pre) { code = new Integer (micode); nombre = nom; description = descrip; precio = new Double (pre); } public void setNombre(String nom) { nombre=nom; } public void setDescription (String descrip) { description = descrip; } public int getCode () { return code.intValue();}

Page 148: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 148

public String getNombre () {return nombre; } public String getDescription () { return description; } public double getPrecio() {return precio.doubleValue(); } } // fin de "public class Informacion" }

RESOLVIENDO LA TAREA 4 PARA MÓVILES Definición: Dado un array de códigos de solicitud, atraer la información de la base de datos para ese array de códigos. Requisito, este servicio web debe, internamente, hacer un uso iterativo del servicio web móvil de la tarea 1 para cada elemento de array de códigos. OBSERVACIÓN: Se concluyó que no es posible enviar un array de códigos desde el celular, al menos la tecnología que se utiliza no lo permite. Por tanto, el array de códigos se crea, arbitrariamente, dentro de la implementación del servicio Web Mobil de 4 y este a su vez debe hacer uso, iterativo, del servicio Web Movil del ejercicio 1. NOTAS:

1) Este ejercicio requiere de dos documentos wsdl uno para la el servicio Web Mobil número 4 al cual no se envía parámetro alguno y retorna un array con uno o más registros de la base de datos. Vea que estas características se cumplen perfectamente en el documento wsdl que ya se desarrolló tanto para el ejercicio numero 2 como para el número 3 ya que en ambos, no se envía parámetro alguno y se recibe un array conteniendo x número de registros de la base de datos. Entonces ya se cuenta con el wsdl para la tarea 4.

2) Ahora, la tarea 4 requiere, internamente, implementar el servicio Web de la tarea 1, ese wsdl de la tarea 1 ya se creó, entonces simplemente lo tomaremos.

2) CREANDO EL SERVICIO WEB MOVIL CON NETBEANS

V) Crear un proyecto

File / New Proyect / Web / Web Application Name : m_tarea4

Page 149: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 149

W) Crear el servicio Web 4 dentro del proyecto “m_tarea4”

m_tarea4 / New / WebService (use el botón derecho del Mouse) Name: m_tarea4ws

En package especifico una URL apropiado al tema, por ejemplo

Package = www.m_tarea4ws.edu Advertencia: no pierda de vista el nombre que se asignó al package

(x) From Local WSDL File

Allí atraigo el documento WSDL, como ya se dijo, el documento wsdl para la tarea 4 es identico al wsdl para la tarea 2, entonces simplemente tomo el wsdl antes creado con Soa Editor para la tarea 2

X) Programar el método que se genera en el servicio Web del proyecto. El cual, si

está correcto debe presentar un parámetro de recepción para un número de código y debe retornar un dato complejo, que es el que contendrá toda la información del registro a consultarse en la base de datos.

// Poner aquí el código Java para la tarea4 Mobil en su servicio Web Mobil principal .

package www.m_tarea4ws.edu; /** * This is the implementation bean class for the m_tarea4ws web service. * Created 29/11/2006 04:00:27 PM * @author enrique ruiz diaz */ public class M_tarea2PortType_Impl implements www.m_tarea4ws.edu.M_tarea2PortType, java.rmi.Remote { public www.m_tarea4ws.edu.Arraydedatos newOperation() throws java.rmi.RemoteException {

www.m_tarea4ws.edu.Arraydedatos _retVal = new www.m_tarea4ws.edu.Arraydedatos();

// Recuerda: como el celular no soporta que el envíe de un array de códigos, entonces se estable un array de

Page 150: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 150

// codigos arbitrario. String[] ArrayCodes = new String[3]; String[] ArrayNombre = new String[3]; String[] ArrayDescription = new String[3]; String[] ArrayPrecios = new String[3]; ArrayCodes[0] = new String ("103"); ArrayCodes[1] = new String ("102"); ArrayCodes[2] = new String ("106"); ArrayNombre[0] = new String (""); ArrayNombre[1] = new String (""); ArrayNombre[2] = new String (""); ArrayDescription[0] = new String (""); ArrayDescription[1] = new String (""); ArrayDescription[2] = new String (""); ArrayPrecios[0] = new String (""); ArrayPrecios[1] = new String (""); ArrayPrecios[2] = new String (""); try { M_tarea1PortType_Impl tarea1 = new M_tarea1PortType_Impl(); for (int i=0; i<ArrayCodes.length; i++) {

www.m_tarea4ws.edu.Misdatos resul = tarea1.newOperation(ArrayCodes[i]);

String nombre = resul.getNombre(); String descripcion = resul.getDescripcion(); String precio = resul.getPrecio(); ArrayCodes[i] = new String(ArrayCodes[i]); ArrayNombre[i] = new String (nombre); ArrayDescription[i] = new String(descripcion); ArrayPrecios[i] = new String(precio); } } catch (Exception e) {} _retVal.setCode(ArrayCodes); _retVal.setNombre(ArrayNombre);

Page 151: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 151

_retVal.setDescripcion(ArrayDescription); _retVal.setPrecio(ArrayPrecios); return _retVal; } }

3) Crear el servicio Web 1 dentro del proyecto “m_tarea4”

m_tarea4 / New / WebService (use el botón derecho del Mouse) Name: m_tarea1ws

En package DEBO especificar la misma URL que puse en la inclusión del servicio web movil 4, es decir:

Package = www.m_tarea4ws.edu

(x) From Local WSDL File

Allí atraigo el documento WSDL, como ya se dijo, el documento wsdl para la tarea 4 en inclusión del servicio Web mobil 1 ya está creado el wsdl, el mismo de la tarea movil 1 antes creado con Soa Editor

4) Programar el método que se genera en el servicio Web del proyecto. El cual, si está correcto debe presentar un parámetro de recepción para un número de código y debe retornar un dato complejo, que es el que contendrá toda la información del registro a consultarse en la base de datos.

// Poner aquí el código Java para la tarea4 Mobil, servicio Web Mobil 1.

package www.m_tarea4ws.edu; import java.io.*; import java.util.*; import java.net.*;

Page 152: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 152

import java.sql.*; public class M_tarea1PortType_Impl implements www.m_tarea4ws.edu.M_tarea1PortType, java.rmi.Remote {

public www.m_tarea4ws.edu.Misdatos newOperation(java.lang.String codigo) throws

java.rmi.RemoteException {

www.m_tarea4ws.edu.Misdatos _retVal = new www.m_tarea4ws.edu.Misdatos();

Connection canal = null; ResultSet tabla2= null; Statement instruccion=null; String sitiobase = "c:/mybase/BD1.mdb"; String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase; // detectando y cargando el objeto submit de html try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); canal=DriverManager.getConnection(strcon); instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch (java.lang.ClassNotFoundException e){} catch(SQLException e) {}; String code3 = ""; String nombre = ""; String description =""; String precio = ""; try {

Page 153: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 153

// String sql de EJEMPLO PARA CUANDO SON VARIOS DATOS, NOTA: ESTE STRING INDICA QUE TODOS SON CADENAS DE CARACTERES // String sql = "SELECT * FROM Tabla WHERE (Nombre like '%" + Nom + "%') OR Direccion='" + Dir + "' OR Estado='" + Edo + "'"; // ESTA LINEA FUNCIONA SI Codigo es de valor Texto en la base de datos, porque 'code' está como valor cadena // String sql = "SELECT * FROM Tabla WHERE Codigo='" + code + "'"; Integer code = new Integer (codigo); int code2 = code.intValue(); String sql = "SELECT * FROM Tabla WHERE Codigo=" + code2; tabla2 = instruccion.executeQuery(sql); if (tabla2!=null) { while(tabla2.next()) {

code3 = tabla2.getString(1); // Por las dudas la tabla exija comenzar con el indice 1 nombre = tabla2.getString(2) + " esta es el el proyecto prueba 2";

description = tabla2.getString(3); precio = tabla2.getString(4); }; // fin while // cerrando resultset tabla2.close(); } instruccion.close(); canal.close(); } //fin try no usar ; al final de dos o mas catchs catch(SQLException e) {}; _retVal.setCodigo(code3); _retVal.setNombre(nombre); _retVal.setDescripcion(description); _retVal.setPrecio(precio);

Page 154: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 154

return _retVal; } }

5) Dar “Run Proyect” al proyecto “m_tarea4.

Debe desplegarse el navegador con una página con el mensaje “JSP Page” El navegador presenta la URL: http://localhost:8080/m_tarea4/ Al URL que presenta el navegador le agrego la expresión: m_tarea4ws?wsdl Se debe desplegar el documento WSDL generado por NetBeans (que no es el mismo al antes generado con Soa Editor). Cópiese la dirección URL del navegador que presenta dicho docto. WSDL.

http://localhost:8080/m_tarea4/m_tarea4ws?wsdl Ahora, necesito la URL :

http://localhost:8080/m_tarea4/

para el servicio movil interno tarea1, le agrego la expresión: m_tarea1ws?wsdl Se debe desplegar el documento WSDL generado por NetBeans (que no es el mismo al antes generado con Soa Editor). Cópiese la dirección URL del navegador que presenta dicho docto. WSDL.

http://localhost:8080/m_tarea4/m_tarea1ws?wsdl

Page 155: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 155

6) Generar el proyecto Mobil File / New Proyect / Mobile / Mobile Application Name : m_tarea4_ En “Create Adicional Templates” selecciona (x) Select All

7) Crear un “J2ME Web Service” sobre el proyecto “Mobil”

m_tarea4_ / New / J2ME Web Service Client Pegar la dirección URL del documento WSDL desplegado por NetBeans.

http://localhost:8080/m_tarea4/m_tarea4ws?wsdl

Oprime la orden: “Retrieve WSDL” 8) Dar “Run” al proyecto Mobil “m_tarea4_”.

Si todo salió bien debe desplegarse un celular con acceso al método del servicio Web Mobil 4, el cual internamente accede al servicio Web movil 1.

OBSERVACIÓN: Recuerde que servicio funcionará siempre y cuando no haya cerrado el servidor de NetBeans con su respectivo servicio Web.

El servidor debe estar corriendo para esos servicios Web móviles, si se ha seguido estos procedimientos y no se ha cerrado NetBeans lo más seguro es que estos servicios móviles estén activos.

Page 156: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 156

EJECUTAR TODOS LOS 4 SERVICIOS WEB PARA MOBILES EN UN SOLO PROYECTO MOBIL

1) Detener el servidor RunTime / Servers / Sun Java System Application Server / Stop Con el botón derecho se obtiene la orden “stop” Se detiene el servidor para asegurarse que no haya conflicto entre aplicaciones Recuerde que ya tenemos creados nuestros PROYECTO Web para moviles, estos son: m_tarea1, m_tarea2, m_tarea3 y m_tarea4 Los cuales internamente implementan sus respectivos servicios Web Nos ubicamos sobre el primero de ellos, m_tarea1 y doy Run Proyect Copio su URL para su wsdl http://localhost:8080/m_tarea1/m_tarea1?wsdl lo mismo hago con m_tarea2, m_tarea3 y m_tarea4 http://localhost:8080/m_tarea2/m_tarea2?wsdl http://localhost:8080/m_tarea3/m_tarea3?wsdl http://localhost:8080/m_tarea4/m_tarea4ws?wsdl Note que el URL para el wsdl para el proyecto 4 tiene este contenido

http://localhost:8080/m_tarea4/m_tarea4ws?wsdl Vea que: “m_tarea4ws“ porque así se nombró al Servicio Web principal del proyecto de la tarea 4 para moviles.

Page 157: M.C. Enrique Ruiz Diaz - Guias Para Crear y Manejar Servicios Web, en lenguaje Java

M.C. Enrique Ruiz Díaz – Guías para crear y manejar Servicios Web

25-Junio-2010. Visite: http://www.scribd.com/enriqueruizdiaz Asimismo: http://sites.google.com/site/enriqueruizdiaz/ Página 157

Ahora ya tengo en ejecución en el servidor los 4 proyectos para moviles y ya tengo identificados sus respectivos URL’S

9) Generar el proyecto Mobil File / New Proyect / Mobile / Mobile Application Name : Todosmoviles_ En “Create Adicional Templates” selecciona (x) Select All

10) Crear un “J2ME Web Service” para cada una de las URL’s antes copiadas

Todosmoviles_ / New / J2ME Web Service Client Pegar la dirección URL del documento WSDL desplegado por NetBeans.

http://localhost:8080/m_tarea1/m_tarea1?wsdl

Oprime la orden: “Retrieve WSDL”

Repito la creación de un J2ME Web Service para el URL del proyecto 2, 3 y 4

11) Dar “Run” al proyecto Mobil “Todosmoviles_”.

Debe desplegarse un celular con acceso a los 4 servicios Web moviles.