Introducción a los servicios web 2012 Marcelino Rodríguez Suárez http://www.marce.com Un servicio web publica su descripción en un documento XML en



Documentos relacionados
PASO 1: Creamos un nuevo proyecto en NetBeans. Nos vamos a File y pulsamos sobre New Project

Tutorial 4. Aplicaciones Web con NetBeans 5.0

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

Conexión de Mysql con NetBeans

Introducción Descripción del servicio

Manual del Protocolo XML-RPC de Mensajería Negocios

Práctica 4: Java Remote Method Invocation (RMI)

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

Universidad ORT - Arquitecturas de Software sobre plataforma JEE Web Services (parte 1)

JSP. MSc. Daniel Alejandro Yucra Sotomayor Pag Web Services. Laboratorio Nro. 11. Web Services con JAX-WS con MySQL. I. Competencia General:

Introducción a JAX-WS Web Services

Universidad ORT - Arquitectura de Software. Requisitos

Laboratorio de Aplicaciones Telemáticas Ingeniería Técnica de Telecomunicación Especialidad en Telemática

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

JAVA EE 5. Arquitectura, conceptos y ejemplos.

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Quickstart-Webapps-Spring

Requisitos. Universidad ORT Arquitectura de Software

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Modelo de Objetos Distribuidos

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Agosto. Un primer JSP. Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / j a v a. p h p ]

ISJu: Técnicas de Programación Cartilla Teórica-Práctica Instalación del "Eclipse IDE for Java EE Developers" y el servidor "Apache Tomcat"

Tutorial básico del entorno de desarrollo Eclipse.

Estructura de las Aplicaciones Orientadas a Objetos El patrón Modelo-Vista-Controlador (MVC)

2. Se indica el nombre y las configuraciones necesarias para la creación del proyecto

Introducción al lenguaje Java

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

1. Visión general de RMI

Desarrollo de Servicios Web con JBuilder

Manual de referencia de sistema para la invocación de Web Services con Aduanas (SMS v3.1.12)

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

RMI [Remote Method Invocation]

Formato para prácticas de laboratorio

Web Services en Java. Taller de Programación. Instituto de Computación Facultad de Ingeniería Universidad de la República

Introduciendo datos desde el

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

RUEDA TORRES DULCE CAROLINA 3CM2 JAX-WS WEB SERVICES WEB APPLICATION DEVELOPMENT

Introducción Entorno de ejecución Referencias Descripción del servicio

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Repaso desarrollo de software Parte #1. Jorge Iván Meza Martínez

Universidad Tecnológica del Valle del Mezquital. Desarrollo de Aplicaciones Web. Manual JSP

Introducción a Java LSUB. 15 de enero de 2015 GSYC

2. Estructura de un programa en Java

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

Configuración servidor Tomcat

Introducción al lenguaje de programación java

J2SE , Grupo Salenda, S.L.

MSSQL Server Java

Manejo de eventos AWT

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa

Tutorial Servicios Web

Manual de referencia para la invocación de WebServices con Aduanas (SMS v3.0)

Tema: Introducción a Java y Netbeans

Administración Local Soluciones

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

Práctica 2: Java Remote Method Invocation (RMI)

API de java. ( Guía de alumno Laboratorio 9. Recursos disponibles en moodle para este día.

MODELO DE IMPLEMENTACIÓN

AGESIC. Gerencia de Proyectos. Tutorial para Consumir un servicio sincrónico de la PGE sobre Plataforma Java

FRAMEWORK SPRING EN UNA APLICACIÓN WEB

CFDi Client Manual de Usuario

9. Objetos y clases Clases

d) Mencione dos diferencias y dos semejanzas entre clases abstractas e interfaces.

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Tema 7. Construcción de Applets en Java

Ingeniería del Software Arquitectura Física en 3 niveles

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

Manual de JSP con Eclipse y ApacheTomcat o JBoss

Plugin para NetBeans que realiza migración de una base de datos postgresql a couchdb.

Libertya Web Service r46gc Índice de contenido

Manual Integración Clientes Servicios WCF. Versión 2.5

FACULTAD DE INGENIERÍA

Las pruebas unitarias se crean en una carpeta raíz del symfony: Test/Unit/EjemploTest.php

DESARROLLO WEB EN ENTORNO SERVIDOR

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

Práctica 1: Instalación de un servidor de aplicaciones web y diseño de la vista de una aplicación

Programación Orientada a Objetos. Java: Excepciones

CAPÍTULO 14. DESARROLLO

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

JAVA NATIVE INTERFACE (JNI) INVOCANDO C/C++ DESDE JAVA

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Comunicación utilizando la biblioteca en JAVA para SADE

4. DESARROLLO WEB CON JAVA JSP & SERVLETS

James Gosling, creador de Java

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Plataforma de Contratación del Sector Público

WEB SERVICES. Manual técnico para desarrollador

Un breve resumen del lenguaje Java

Transcripción:

Introducción a los servicios web 2012 Marcelino Rodríguez Suárez http://www.marce.com Un servicio web publica su descripción en un documento XML en lenguaje WSDL. De esta forma es conocido y utilizado por sus clientes. Un cliente de un servicio web crea un proxy para llamar a los métodos que el servicio proporciona. Durante la comunicación las API s JAX-WS (Java API for XML Web Services) y JAXB (Java Architecture for XML Binding), se encargan de las tareas de bajo nivel (generación y análisis de mensajes SOAP). El programador se ocupa exclusivamente de escribir la clase del servicio web y la clase cliente. En el desarrollo del servicio web, no se usará un IDE en particular. Sólo debe tener instalado el JDK6 o posterior y un servidor de aplicaciones como WebSphere Application Server. Creación del servicio web El servicio web que se ha implementado es bastante sencillo. En el apéndice, podrá observar el archivo fuente completo de la interfaz Simple, de la clase SimpleService que la implementa y de la clase de apoyo UserInfo. Las clases son almacenadas en: servicios_web/simple/ WEB-INF/ classes/com/marce/ws. Observe que, excepto la anotación @WebService, es una clase normal del paquete com.marce.ws. Las anotaciones son procesadas por la herramienta apt (annotation processing tool) del JDK. La estructura de directorios para almacenar los componentes del servicio y del cliente, de acuerdo con la utilizada para las aplicaciones web, es la que sigue:

Compilación del servicio web Para compilar el servicio, se abre la consola (en System i: qsh o qp2term) y se va a la carpeta clases del servicio (servicios_web/simple/web-inf/classes). Allí se ejecuta: >javac com/marce/ws/.java Empaquetado del servicio web El servicio se empaqueta en el archivo simple.war, para su posterior despliegue. Con este objetivo se va a la carpeta del servicio (servicios_web/simple) y se ejecuta el comando jar así: >jar cvf simple.war Despliegue del servicio web en el servidor de aplicaciones Con el servidor de aplicaciones arrancado, se despliega el servicio web empaquetado, simple.war. Esto genera, entre otros, el archivo de despliegue web.xml. Prueba del servicio web El servicio web ya está preparado para ser accedido por un cliente que lo descubra. Para probar su funcionamiento se puede solicitar desde un navegador que sea mostrada su descripción: http://systemi.marce.com:8080/simple/simple?wsdl Creación del cliente del servicio web Después de finalizada la construcción del servicio web, se continúa con la creación del cliente que accede a su funcionalidad. Se consideran los casos en que el cliente del servicio web sea una aplicación de consola, windows o web. Sus archivos fuente son respectivamente, SimpleClientConsole.java, SimpleClientWindow.java e index.jsp. En el apéndice, podrá observar su contenido. Las clases se almacenan en: servicios_web/simple-cliente/ WEB-INF/ classes/com/marce/ws. Compilación y empaquetado del cliente del servicio web Para compilar el cliente, se va a la carpeta de clases del cliente (servicios_web/simple-cliente/web-inf/classes) y se ejecuta la orden: >javac com/marce/ws/.java Luego se va a la carpeta del cliente (servicios_web/simplecliente) y se empaqueta así: >jar cvf simple-cliente.war Ejecución del cliente Para probar cómo funcionan los diferentes tipos de clientes se va a la carpeta de clases del cliente (servicios_web/simplecliente/web-inf/classes) y se ejecutan las siguientes órdenes para probar las aplicaciones de consola y window: >java com.marce.ws.simpleclientconsole >java com.marce.ws.simpleclientwindow Por último, para ejecutar el cliente web del servicio, despliegue el archivo WAR en el servidor de aplicaciones. Apéndice

Página 1 Simple.java package com.marce.ws; import javax.jws.webservice; / La interfaz de la clase SimpleService. WebSphere Application Server sobre System i. @author Marcelino Rodriguez Suarez http://www.marce.com @version 1.0-2012 / @WebService(serviceName = "Simple", portname = "SimplePort", name = "SimplePortType", targetnamespace = "http://ws.marce.com/") public interface Simple { / Devuelve un mensaje del System i. @param sistema Nombre del System i. @param usuario Usuario del System i. @param password Password del usuario del System i. @return Mensaje devuelto por el System i. / public String getmensaje(string sistema, String usuario, String password);

Página 1 SimpleService.java package com.marce.ws; import javax.jws.webservice; import com.ibm.as400.access.as400; / Servicio web simple. Su objetivo es demostrar como se puede llamar a un programa del System i pasandole parametros de entrada y recibiendo parametros de salida. WebSphere Application Server sobre System i. @author Marcelino Rodriguez Suarez http://www.marce.com @version 1.0-2012 / @WebService(serviceName = "Simple", portname = "SimplePort", name = "SimplePortType", targetnamespace = "http://ws.marce.com/") public class SimpleService implements Simple { / Devuelve un mensaje del System i. @param sistema Nombre del System i. @param usuario Usuario del System i. @param password Password del usuario del System i. @return Mensaje devuelto por el System i. / @Override public String getmensaje(string sistema, String usuario, String password) { String info = ""; try { // Crear un objeto AS400 para el sistema al que se envian los // mandatos AS400 as400system = new AS400(sistema, usuario, password); // AS400 sin interfaz grafica de usuario as400system.setguiavailable(false); // Conexion al servicio de comandos y llamadas a programas as400system.connectservice(as400.command); // Conexion realizada con exito if (as400system.isconnected()) { // Mensaje de bienvenida con informacion sobre la version del // System i String infosystem = "Bienvenido al System i " + "V" + as400system.getversion() + "R" + as400system.getrelease() + "M" + as400system.getmodification(); // Composicion de mensaje con informacion del sistema y de la // devuelta por la llamada al programa que da informacion // sobre el usuario info = infosystem + ". " + UserInfo.getInfo(as400System); else { info = "Imposible conectar. Causa: Desconocida";

Página 2 SimpleService.java catch (Exception e) { info = "Imposible conectar. Causa: " + e.getlocalizedmessage(); return info;

Página 1 UserInfo.java package com.marce.ws; import com.ibm.as400.access.as400; import com.ibm.as400.access.as400message; import com.ibm.as400.data.programcalldocument; / Recuperar informacion del usuario del System i. @author Marcelino Rodriguez Suarez http://www.marce.com @version 1.0-2012 / public class UserInfo { / Devuelve informacion sobre el usuario que se conecta al System i. @param as400system Conexion del System i. @return Informacion devuelta sobre el usuario que se conecta al System i. / public static String getinfo(as400 as400system) { String info = ""; try { // Construir ProgramCallDocument. // El primer parametro es el sistema al que se va a conectar. // El segundo parametro es el nombre del recurso PCML. // El archivo PCML serializado "UserInfo.pcml.ser" o el archivo // fuente PCML "UserInfo.pcml" deben estar en la ruta de acceso // a las clases. ProgramCallDocument pcml = new ProgramCallDocument(as400System, "com.marce.ws.userinfo"); // Establecer parametros de entrada. // Varios parametros tienen valores predeterminados especificados // en el fuente PCML y, por lo tanto, no es necesario establecerlos // mediante codigo. pcml.setvalue("userinfo.receiverlength", new Integer((pcml.getOutputsize("UserInfo.receiver")))); // Codigo de retorno de callprogram() boolean rc = false; // Peticion de llamada al programa. rc = pcml.callprogram("userinfo"); // Si el codigo de retorno es false, se han recibido mensajes del // servidor. if (rc == false) { // Recuperar la lista de mensajes del servidor. AS400Message[] msgs = pcml.getmessagelist("userinfo"); // Iterar a traves de los mensajes y escribirlos. StringBuilder msgalltext = new StringBuilder(); for (int m = 0; m < msgs.length; m++) { // Mensajes devueltos desde el servidor String msgtext = msgs[m].gettext(); msgalltext.append(msgtext + " "); info = msgalltext.tostring(); else {

Página 2 UserInfo.java // Si el codigo de retorno ha sido true, la llamada ha sido // satisfactoria. String prvsignondate = pcml.getstringvalue("userinfo.receiver.previoussignondate"); String prvsignontime = pcml.getstringvalue("userinfo.receiver.previoussignontime"); // Anno, mes y dia del inicio de sesion anterior String anno = prvsignondate.substring(1, 3); String mes = prvsignondate.substring(3, 5); String dia = prvsignondate.substring(5, 7); // Hora, minutos y segundos del inicio de sesion anterior String hora = prvsignontime.substring(0, 2); String minutos = prvsignontime.substring(2, 4); String segundos = prvsignontime.substring(4, 6); info = "Inicio de sesion anterior: " + dia + "-" + mes + "-" + anno + " " + hora + ":" + minutos + ":" + segundos; catch (Exception e) { info = e.getlocalizedmessage(); return info;

Página 1 UserInfo.pcml <pcml version="1.0"> <!-- Fuente PCML que llama al programa QSYRUSRI "API-Recuperar informacion de usuario" --> <!-- Format USRI0100-Informacion sobre inicio de sesion y password --> <struct name="usri0100"> <data name="bytesreturned" type="int" length="4" usage="output" /> <data name="bytesavailable" type="int" length="4" usage="output" /> <data name="userprofile" type="char" length="10" usage="output" /> <data name="previoussignondate" type="char" length="7" usage="output" /> <data name="previoussignontime" type="char" length="6" usage="output" /> <data name="reserved1" type="byte" length="1" usage="output" /> <data name="badsignonattempts" type="int" length="4" usage="output" /> <data name="status" type="char" length="10" usage="output" /> <data name="passwordchangedate" type="byte" length="8" usage="output" /> <data name="nopassword" type="char" length="1" usage="output" /> <data name="reserved2" type="byte" length="1" usage="output" /> <data name="passwordexpirationinterval" type="int" length="4" usage="output" /> <data name="datepasswordexpires" type="byte" length="8" usage="output" /> <data name="daysuntilpasswordexpires" type="int" length="4" usage="output" /> <data name="setpasswordtoexpire" type="char" length="1" usage="output" /> <data name="displaysignoninfo" type="char" length="10" usage="output" /> <data name="localpasswordmanagement" type="char" length="1" usage="output" /> <data name="blockpasswordchange" type="char" length="10" usage="output" /> </struct> <!-- Programa llamado y su lista de parametros --> <program name="userinfo" path="/qsys.lib/qsyrusri.pgm"> <data name="receiver" type="struct" struct="usri0100" usage="output" /> <data name="receiverlength" type="int" length="4" usage="input" /> <data name="format" type="char" length="8" usage="input" init="usri0100" /> <data name="profilename" type="char" length="10" usage="input" init="current" /> <data name="errorcode" type="int" length="4" usage="input" init="0" /> </program> </pcml>

Página 1 SimpleClientConsole.java package com.marce.ws; import java.io.printstream; import java.util.scanner; import java.net.url; import javax.xml.namespace.qname; import javax.xml.ws.service; import javax.xml.ws.webserviceref; / Llama al servicio web simple con interfaz de consola. WebSphere Application Server sobre System i. @author Marcelino Rodriguez Suarez http://www.marce.com @version 1.0-2012 / public class SimpleClientConsole { // Definir la referencia al servicio web @WebServiceRef(wsdlLocation = "http://systemi.marce.com:8080/simple/simple?wsdl") private static Service service; / Llamada al servicio web simple. @param args Array de objetos String pasados al metodo main. / public static void main(string[] args) { // Lectura de la entrada estandar Scanner input = new Scanner(System.in); // Escritura en la salida estandar PrintStream output = System.out; try { output.println("nombre del sistema: "); String sistema = input.nextline(); output.println("usuario: "); String usuario = input.nextline(); output.println("password: "); String password; // De iniciar desde la linea de comandos se lee el password sin eco if (System.console()!= null) { char[] passwordchar = System.console().readPassword(); password = new String(passwordChar); else { password = input.nextline(); // URL del servicio web URL url = new URL("http://systemi.marce.com:8080/simple/Simple?wsdl"); // Representacion del nombre completo del servicio web QName qname = new QName("http://ws.marce.com/", "Simple"); // Creacion del objeto que implementa el servicio

Página 2 SimpleClientConsole.java service = Service.create(url, qname); // Proxy de soporte a la interfaz de servicio web Simple smpl = service.getport(simple.class); // Invocacion del metodo correspondiente del servicio web String mensaje = smpl.getmensaje(sistema, usuario, password); output.println(mensaje); catch (Exception e) { output.println(e.getlocalizedmessage());

Página 1 SimpleClientWindow.java package com.marce.ws; import java.awt.; import java.awt.event.; import javax.swing.; import java.net.url; import javax.xml.namespace.qname; import javax.xml.ws.service; import javax.xml.ws.webserviceref; / Llama al servicio web simple con interfaz grafica. WebSphere Application Server sobre System i. @author Marcelino Rodriguez Suarez http://www.marce.com @version 1.0-2012 / public class SimpleClientWindow extends JFrame { // Variables private static final long serialversionuid = 1L; private JTextField jtfsistema, jtfusuario; private JPasswordField jtfpassword; private JButton jbtconectar; // Definir la referencia al servicio web @WebServiceRef(wsdlLocation = "http://systemi.marce.com:8080/simple/simple?wsdl") private Service service; / Inicio @param args Array de objetos String pasados al metodo main. / public static void main(string args[]) { new SimpleClientWindow().setVisible(true); / Creacion del formulario. / public SimpleClientWindow() { setname("jfrconnect"); settitle("conexion al System i"); setlocationrelativeto(null); setresizable(false); setdefaultcloseoperation(windowconstants.exit_on_close); jtfsistema = new JTextField("", 10); jtfusuario = new JTextField("", 10); jtfpassword = new JPasswordField("", 10); jbtconectar = new JButton("Realizar la conexion"); JPanel jpndatos = new JPanel(); jpndatos.setlayout(new GridLayout(3, 2)); jpndatos.add(new JLabel("Nombre de sistema"));

Página 2 SimpleClientWindow.java jpndatos.add(jtfsistema); jpndatos.add(new JLabel("Usuario")); jpndatos.add(jtfusuario); jpndatos.add(new JLabel("Password")); jpndatos.add(jtfpassword); Container jpnfrm = getcontentpane(); jpnfrm.setlayout(new BoxLayout(jpnFrm, BoxLayout.PAGE_AXIS)); jpnfrm.add(jpndatos); jpnfrm.add(jbtconectar); jbtconectar.setalignmentx(center_alignment); pack(); // Llamada a la operacion del Web Service jbtconectar.addactionlistener(new ActionListener() { @Override public void actionperformed(actionevent evt) { jbtconectaractionperformed(evt); ); / Llamada a la operacion del Web Service @param evt Evento de accion (pulsacion del boton) / private void jbtconectaractionperformed(actionevent evt) { try { String sistema = jtfsistema.gettext(); String usuario = jtfusuario.gettext(); String password = new String(jtfPassword.getPassword()); // URL del servicio web URL url = new URL("http://systemi.marce.com:8080/simple/Simple?wsdl"); // Representacion del nombre completo del servicio web QName qname = new QName("http://ws.marce.com/", "Simple"); // Creacion del objeto que implementa el servicio service = Service.create(url, qname); // Proxy de soporte a la interfaz de servicio web Simple smpl = service.getport(simple.class); // Invocacion del metodo correspondiente del servicio web String mensaje = smpl.getmensaje(sistema, usuario, password); JOptionPane.showMessageDialog(this, mensaje, this.gettitle(), JOptionPane.INFORMATION_MESSAGE); catch (Exception e) { JOptionPane.showMessageDialog(this, e.getlocalizedmessage(), this.gettitle(), JOptionPane.ERROR_MESSAGE);

Página 3 SimpleClientWindow.java

Página 1 index.jsp <%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8" import="java.net.url" import="javax.xml.namespace.qname" import="javax.xml.ws.service" import="javax.xml.ws.webserviceref" import="com.marce.ws.simple" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <%-- Llama al servicio web simple con JavaServer Pages (JSP) WebSphere Application Server sobre System i. (c) Marcelino Rodriguez Suarez http://www.marce.com version 1.0-2012 --%> <%! // Definir la referencia al servicio web // @WebServiceRef(wsdlLocation = "http://systemi.marce.com:8080/simple/simple?wsdl") private Service service; %> <% String sistema = request.getparameter("sistema"); String usuario = request.getparameter("usuario"); String password = request.getparameter("password"); if (sistema == null usuario == null password == null) { sistema = ""; usuario = ""; password = ""; request.setattribute("sistema", sistema); request.setattribute("usuario", usuario); request.setattribute("password", password); request.setattribute("mensaje", ""); if (!sistema.isempty()!usuario.isempty()!password.isempty()) { try { // URL del servicio web URL url = new URL( "http://systemi.marce.com:8080/simple/simple?wsdl"); // Representacion del nombre completo del servicio web QName qname = new QName("http://ws.marce.com/", "Simple"); // Creacion del objeto que implementa el servicio service = Service.create(url, qname); // Proxy de soporte a la interfaz de servicio web Simple smpl = service.getport(simple.class); // Invocacion del metodo correspondiente del servicio web String mensaje = smpl.getmensaje(sistema, usuario, password); request.setattribute("mensaje", mensaje); catch (Exception e) { request.setattribute("mensaje", e.getlocalizedmessage());

Página 2 index.jsp %> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>conexion al System i</title> </head> <body> <center> <h2>conexion al System i</h2> <hr /> <!-- Invocacion al servicio Web --> <form style="font-family: arial" action="index.jsp" method="post"> <table border="0"> <tr> <td align="left">nombre de sistema</td> <td><input type="text" name="sistema" value='${requestscope.sistema' /></td> </tr> <tr> <td align="left">usuario</td> <td><input type="text" name="usuario" value='${requestscope.usuario' /></td> </tr> <tr> <td align="left">password</td> <td><input type="password" name="password" value='${requestscope.password' /></td> </tr> </table> <input type="submit" value="realizar la conexion" name="conectar" /> </form> <hr /> <p style="font-family: arial; color: blue;">${requestscope.mensaje</p> </center> </body> </html>