Crear un webservice básico con PHP y Java

25 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

Texto completo

(1)

Crear un webservice básico con PHP y SOAP

SOAP es un protocolo de intercambio para servicios web basado en XML, sobre el que

puedes leer en esta entrada de la

wikipedia

. Para no liarnos con preámbulos, vamos con la

chicha ¿cómo creamos un servicio web en PHP?.

Para facilitarnos la vida empezaremos por descargar

NuSOAP

, un toolkit para el desarrollo

de servicios web con SOAP en PHP, que nos proveerá de diversas clases para trabajar

con este protocolo. Basta con descargarlo, descomprimirlo, meterlo dentro de nuestro

proyecto y, cuando queramos usarlo, incluir nusoap.php como librería.

Ok, con NuSOAP instalado toca crear un servidor SOAP en nuestra aplicación. Para el

ejemplo crearemos un servidor, lo llamaremos producto.php, que si recibe una petición

donde se le pida una lista de libros devuelva tres títulos (es un ejemplo básico, piensa que

en la realiad podrías acceder a una base de datos y dar muchas más funcionalidades).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?php require_once"nusoap.php";

functiongetProd($categoria) { if($categoria== "libros") { returnjoin(",", array(

"El señor de los anillos", "Los límites de la Fundación", "The Rails Way"));

} else{

return"No hay productos de esta categoria"; }

}

$server= newsoap_server(); $server->register("getProd");

$server->service($HTTP_RAW_POST_DATA); ?>

Ok, ahora necesitas un cliente, que llamaremos cliente.php. En el constructor, el cliente

recibirá el url del servidor y para acceder al método que nos devuelve los libros

recurriremos al método call(), al cual le pasaremos el nombre del método del servidor al

que queremos acceder y los parámetros en forma de array. Además, también

controlaremos que no haya errores en la comunicación.

1

2

3

4

5

6

7

8

9

10

11

<?php require_once"nusoap.php";

$cliente= newnusoap_client("http://localhost/producto.php");

$error= $cliente->getError(); if($error) {

echo"<h2>Constructor error</h2><pre>". $error. "</pre>"; }

$result= $cliente->call("getProd", array("categoria"=> "libros"));

if($cliente->fault) {

(2)

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

print_r($result); echo"</pre>"; } else{ $error= $cliente->getError(); if($error) {

echo"<h2>Error</h2><pre>". $error. "</pre>"; } else{ echo"<h2>Libros</h2><pre>"; echo$result; echo"</pre>"; } } ?>

Con esto ya tienes una idea múy básica del funcionamiento de un webservice SOAP

construído con PHP. Pero claro, nos falta un archivo

WSDL

para tener un webservice

decente. Aunque dicho archivo puede ser escrito a mano, NuSOAP puede generarlo por

tipasándole ciertos parámetros, por lo que lo ideal sería generarlo en el servidor. Así que

modifica tu producto.php para que quede tal que así:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?php require_once"nusoap.php";

functiongetProd($categoria) { if($categoria== "libros") { returnjoin(",", array(

"El señor de los anillos", "Los límites de la Fundación", "The Rails Way"));

} else{

return"No hay productos de esta categoria"; }

}

$server= newsoap_server();

$server->configureWSDL("producto", "urn:producto");

$server->register("getProd", array("categoria"=> "xsd:string"), array("return"=> "xsd:string"), "urn:producto", "urn:producto#getProd", "rpc", "encoded",

"Nos da una lista de productos de cada categoría");

$server->service($HTTP_RAW_POST_DATA); ?>

(3)

28

29

Como ves, el cambio en es cuando llamamos a register, ya que en vez de pasarle, como

antes, el método en cuestión, le añadimos también varios argumentos para generar el

WSDL:

El primer array nos permite definir el argumento de entrada y su tipo de datos

El segundo define la función de retorno y su tipo de datos

urn:producto es la definición del namespace

urn:producto#getProd es donde definimos la acción SOAP

Luego viene el tipo de llamada,que puede ser rpc, como en el ejemplo,

o document

Tras esto definimos el valor del atribute use, que puede ser encoded o literal

Finalmente viene una descripción de qué hace el método al que llamamos

Ahora basta con que en el navegador accedas a producto.php?wsdl y verás el WSDL

generado. Ya puedes copiarlo y añadirlo a tu directorio web (crea un archivo y llámalo, por

ejemplo, libros.wsdl). Para que el cliente lo utilice debes modificar el código, y en el

constructor, en vez del url le pasas el nombre del archivo, de forma que quede como en el

ejemplo:

1

$client= newnusoap_client("libros.wsdl", true);

Ahora sí, ya tienes montado un pequeño servicio web. El ejemplo es simplón, pero piensa

en todas las funcionalidades que podrías incorporarle.

Cómo crear servicios web en JAVA– IDE NetBeans

17:13 Fabián Bermeo Pérez[MSP]

Hola a todos, bienvenidos a otro curso de desarrollo web, esta vez vamos a aprender cómo crear servicios web en java con el IDE NetbBeans.

Antes de implementarlo, quiero recordarles que usamos servicios web en sistemas distribuidos donde necesitamos integrar diferentes plataformas como .NET, JAVA etc.

 Abrimos nuestro NetBeans, en mi caso uso una versión 6.9.1 full que me funciona muy bien sobre windows 7 Ultimate x64

(4)

 Nos dirigimos a archivo y le damos clic en nuevo proyecto

(5)

 A continuación le damos un nombre a nuestro proyecto, y los demás valores los dejamos por defecto

 En la siguiente pantalla debemos escoger el servidor, en nuestro caso usaremos GlassFish Server 3 y la versión de java EE la dejamos como JAVA EE 6 Web

(6)

 la ventana a continuación la dejamos como está. No seleccionamos ningún valor de los checkbox

 Luego de configurar, veremos un entorno como el siguiente, que es código puro de HTML, y el conocidísimo “Hello World!“

(7)

 Damos clic en ejecutar, para levantar los servicios

 seamos un poco pacientes, lleva de 2 a 3 minutos

 al finalizar veremos en nuestro explorador el “Hello World!”

 De seguido necesitamos crear un nuevo paquete en donde se alojará el servicio web que vamos a construir

 damos clic derecho en fuente de paquetes, luego clic en nuevo y seleccionamos paquete de java

(8)

 Obviamente le tenemos que dar un nombre, siempre usen pack_ + el nombre que le deseen asignar para llevar una jerarquía en cuanto nombres en el desarrollo de aplicaciones

 ahora ubicamos a nuestro paquete, y le damos clic derecho

(9)

 le asignamos ahora un nombre a nuestro servicio web, que servirá para identificarlo dentro de netbeans

 Concluido el proceso, seleccionamos modo diseñador, clic en agregar operación, le asignamos un nombre que en nuestro caso lo denominé multiplicar_dos_números

 con clic en agregar, inserto 3 parámetros dos de tipo int y uno de tipo string que me servirá para mostrar el resultado

(10)

 Volvemos a modo código y agregamos las sentencias que busquemos sean ejecutadas por el servicio web

 en mi caso estoy declarando una nueva variable para multiplicar do números que ingrese el usuario

 y devuelvo un texto concatenado con el resultado

 para probar nuestro servicio web, buscamos la carpeta servicios web en el árbol de contenidos de la izquierda

 ingresamos en él y ubicamos a nuestro servicio web que creamos

(11)

 En el navegador veremos algo como esto, en donde debemos ingresar las variables que definimos en el servicio web

 solo necesitamos ingresar dos valores porque la tercera variable la usamos como retorno de la operación

 así que le damos los valores del número 1 y del número 2 para multiplicarlos

 y clic en el botón que indica la operación a realizar

 lo que devolverá será el valor de las variables que ingresamos y su multiplicación o resultado que se procesó dentro del servicio web

(12)

de esta manera se manejan los servicios web, en próximas publicaciones les enseñaré como invocar este mismo servicio web desde .NET

JAVA: Crear un servicio web básico con NetBeans 7.x

Una forma muy sencilla de desarrollar un servicio web en Java es haciendo uso de la

plataforma de desarrollo NetBeans 7.x que nos permite además desplegarlos en un servidor web local para pruebas como es GlassFish.

Para descargarnos NetBeans iremos a https://netbeans.org/downloads/. De todas las opciones

que nos indica, os recomiendo descargar el paquete Java EE o All para asegurarnos de tener instalado GlassFish. En mi caso he escogido el paquete All para curarme en salud ;-).

De la instalación voy a comentar poco, ya que simplemente hay que seguir el asistente con la técnica de “siguiente siguiente siguiente”, estando bien seguros que instalamos GlassFish.

Desarrollo del servicio web

(13)

En el asistente se nos preguntará por el servidor que usaremos, y es aquí donde seleccionaremos el GlassFish que hemos instalado.

Una vez creado el proyecto, añadiremos un nuevo WebService desde el menú contextual New > WebService….

Se nos abrirá un asistente en el que rellenaremos el nombre de la clase y su paquete.

Y con esto ya tenemos el servicio creado. @WebService(serviceName = "WSDemo") public class WSDemo {

(14)

/**

* This is a sample web service operation */

@WebMethod(operationName = "hello")

public String hello(@WebParam(name = "name") String txt) { return "Hello " + txt + " !";

} }

Analizando su código, vemos que el servicio publica una función llamada hello. Sabemos que la clase es un servicio por @WebService y que es una función publicada en el WS

por@WebMethod. Si queremos añadir una nueva función, simplemente tendremos que copiar la anterior y cambiar lo que queramos ;-)

Para publicar el servicio simplemente seleccionaremos deploy en el menú contextual sobre el proyecto.

(15)

En el output del IDE nos mostrará que se ha generado correctamente y que GlassFish está iniciado.

En la pestaña de GlassFish podremos ver la ruta para acceder al servicio web.

Probando el servicio web

Accedemos a la URL que nos indica para ver el servicio. Para consultar su WSDL solo tenemos que añadir ?WSDL al final de la URL.

Esto nos valdrá en el caso de querer probarlo con herramientas

como SoapUI(http://www.soapui.org/), al que deberemos indicarle el WSDL para que genere la

(16)

Este nos generará la invocación, y simplemente pulsado el botón de run, obtendremos el resultado en el lateral derecho de la request.

Simple, ¿verdad?

Crear un simple servicio web SOAP en Java con

NetBeans es re-fácil

21.12.08. Por ooscarr (ooscarr)

A través de un video tutorial (mencionado al final de este

documento), aprendí a crear un simple servicio

web con NetBeans.

Según leí,

Sun removió el soporte para el

WSDK

(aunque igual

se sigue distribuyendo) para reemplazarlo por GlassFish. Así que

ni modo. Pero estas instrucciones también funcionan con

Tomcat.

(17)

Crear nuevo proyecto

Lo primero es crear un nuevo proyecto, así que...

1. Creamos un Nuevo proyecto, en mi caso de tipo Aplicación

Web

(18)

3. En los ajustes del servidor, elijo GlassFish o Tomcat, como

siempre.

4. Y Terminar

¿Código?

Como

toda

apliación

web,

me

aparece

el

típico index.jsppredeterminado en el que puedo aprovechar de

describir el Servicio Web (puedo poner cualquier cosa, en

realidad, porque esto no es parte del servicio web).

index.jsp

<%-- Document : index Created on : 21-dic-2008, 12:06:37 Author : ooscarr --%>

<%@page contentType="text/html" pageEncoding="UTF-8"%> <?xml version="1.0" encoding="UTF-8"?>

(19)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-cl"> <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Servicio web</title>

</head> <body>

<h1>Este es el Servicio web</h1>

<p>Este servicio lo que hace es decir "Hola, [nombre]" a cambio de un parámetro [nombre] de tipo <code>String</code>.</p> </body>

</html>

Creación del Servicio Web

Mmm... Bueno, en NetBeans es muy sencillo crear un Servicio

Web, sólo basta seleccionar el nombre del proyecto (Holaste en

mi caso) y poner Archivo Nuevo. Ahi también hay una opción

llamada Web Service.

(20)

Aproveché de agregarlo a un paquete llamado

hola

.

Añadir operaciones

Para añadir operaciones hay que sólo posicionarse sobre el

Servicio Web y poner Add Operation...

(21)

De otra forma, en el modo Design existe el botón Add

Operation....

Ahí le pongo un nombre, puedo añadir parámetros y elegir si lo

quiero de tipo String, boolean, int, etc.

(22)

ServicioWeb.java

Con eso se generará automáticamente el código esqueleto que

puedo modificar para que me retorne "Hola, " + nombre;. Así:

package hola; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; /** * * @author ooscarr */ @WebService()

public class ServicioWeb { /**

* Web service operation */

@WebMethod(operationName = "diHola")

public String diHola(@WebParam(name = "nombre") String nombre) {

(23)

//TODO write your implementation code here: return "Hola, " + nombre;

} }

Probémoslo

Ya. Probémoslo. Para eso primero hay que armar el proyecto

con el menú contextual del proyecto, opción Deploy.

GENERACIÓN CORRECTA (tiempo total: 7 segundos)

Y probar el servicio web, seleccionando el Servicio web,

opción Test Web Service.

INFO: Dynamically creating request wrapper Class hola.jaxws.DiHola INFO: Dynamically creating response wrapper bean Class

hola.jaxws.DiHolaResponse INFO: parsing WSDL... INFO: generating code... INFO:

compiling code...

INFO: Invoking wsimport with

http://localhost:8080/Holaste/ServicioWebService?WSDL INFO: wsimport successful

INFO: parsing WSDL... INFO: generating code... INFO:

compiling code...

INFO: Invoking wsimport with

http://localhost:8080/Holaste/ServicioWebService?WSDL INFO: wsimport successful

Si todo está bien instalado, se debería abrir una ventana del

navegador más o menos así.

(24)

Aquí, por ejemplo, si pongo Oscar en el formulario, se puede ver

el código que entrega el servicio Web al cliente.

WSDL

También es bueno hacer notar que NetBeans genera

automáticamente el archivo

WSDL

(y su XML Schema también)

para ser usado en las implementaciones de los Clientes.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.5-hudson-$BUILD_NUMBER-. -->

<definitions targetNamespace="http://hola/" name="ServicioWebService" xmlns:tns="http://hola/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <xsd:schema> <xsd:import namespace="http://hola/" schemaLocation="ServicioWebService_schema1.xsd"/> </xsd:schema> </types> <message name="diHola">

<part name="parameters" element="tns:diHola"/> </message>

<message name="diHolaResponse">

<part name="parameters" element="tns:diHolaResponse"/> </message>

<portType name="ServicioWeb"> <operation name="diHola">

<input message="tns:diHola"/>

(25)

</operation> </portType>

<binding name="ServicioWebPortBinding" type="tns:ServicioWeb"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="diHola"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="ServicioWebService">

<port name="ServicioWebPort" binding="tns:ServicioWebPortBinding"> <soap:address location="REPLACE_WITH_ACTUAL_URL"/>

</port> </service> </definitions>

Fuente

Todo lo que dije lo saqué de un video hecho por un

desarrollador de Sun. Lo puedes ver (en inglés) desde el

siguiente link, por si te quedó alguna duda.

Figure

Actualización...

Referencias

  1. wikipedia
  2. NuSOAP
  3. nusoap_client("http://localhost/producto.php
  4. WSDL
  5. Cómo crear servicios web en JAVA– IDE NetBeans
  6. http://lh4.ggpht.com/_jSyZN3LlIO0/TWr16sqTh9I/AAAAAAAAAHI/K8KRA__DfA4/s1600-h/2[3].png
  7. http://lh3.ggpht.com/_jSyZN3LlIO0/TWr1-s8qSfI/AAAAAAAAAHQ/58iq241Z7lw/s1600-h/1[5].png
  8. http://lh6.ggpht.com/_jSyZN3LlIO0/TWr2CIyzMCI/AAAAAAAAAHY/Pc0cb-UYye4/s1600-h/3[7].png
  9. http://lh6.ggpht.com/_jSyZN3LlIO0/TWr2FgtJ2bI/AAAAAAAAAHg/Ie56QMAztJI/s1600-h/4[7].png
  10. http://lh3.ggpht.com/_jSyZN3LlIO0/TWr2I-V9pFI/AAAAAAAAAHo/n6No4X87DKs/s1600-h/5[7].png
  11. http://lh6.ggpht.com/_jSyZN3LlIO0/TWr2MM_ThVI/AAAAAAAAAHw/PI2Vu_l3jRo/s1600-h/6[7].png
  12. http://lh4.ggpht.com/_jSyZN3LlIO0/TWr2OuBHC3I/AAAAAAAAAH4/ltNOkpl9Cz4/s1600-h/7[7].png
  13. http://lh5.ggpht.com/_jSyZN3LlIO0/TWr2Q8kzERI/AAAAAAAAAIA/7EWzMs1tkCk/s1600-h/8[7].png
  14. http://lh5.ggpht.com/_jSyZN3LlIO0/TWr2TZMRznI/AAAAAAAAAII/HJtWRo5gJRQ/s1600-h/9[7].png
  15. http://lh4.ggpht.com/_jSyZN3LlIO0/TWr2WtP7qWI/AAAAAAAAAIQ/J0RPsCOtgQU/s1600-h/10[7].png
  16. http://lh6.ggpht.com/_jSyZN3LlIO0/TWr2Z9AUlLI/AAAAAAAAAIY/LKmrvMze4NA/s1600-h/11[11].png
  17. http://lh3.ggpht.com/_jSyZN3LlIO0/TWr2c3fF3dI/AAAAAAAAAIg/cZsiVyGH1no/s1600-h/12[7].png
  18. http://lh6.ggpht.com/_jSyZN3LlIO0/TWr2f8oM0II/AAAAAAAAAIo/gle5TZjSKTY/s1600-h/13[7].png
  19. http://lh5.ggpht.com/_jSyZN3LlIO0/TWr2i7bzbhI/AAAAAAAAAIw/7PQY7urzd6c/s1600-h/14[7].png
  20. http://lh5.ggpht.com/_jSyZN3LlIO0/TWr2miDkUPI/AAAAAAAAAI4/A1xZ2j-dUoc/s1600-h/15[7].png
  21. http://lh5.ggpht.com/_jSyZN3LlIO0/TWr2qKhC9TI/AAAAAAAAAJA/sLlmfxD9hiw/s1600-h/16[7].png
  22. http://lh6.ggpht.com/_jSyZN3LlIO0/TWr2scfKMQI/AAAAAAAAAJI/g_DZDP0ZJmo/s1600-h/17[7].png
  23. https://netbeans.org/downloads/
  24. http://2.bp.blogspot.com/-3M9CGwQ3yEQ/UV6SnYD3YNI/AAAAAAAAAZc/CDOCY2BTtuY/s1600/ws_java1.png
  25. http://4.bp.blogspot.com/-zKFuIQearJQ/UV6SrWHPxwI/AAAAAAAAAZk/v5xM4QNTzrA/s1600/ws_java2.png
  26. http://1.bp.blogspot.com/-y_A0ra5xYAw/UV6Suujk-_I/AAAAAAAAAZs/b_32zRNAFbo/s1600/ws_java3.png
  27. http://4.bp.blogspot.com/-ye3KAjwfOTo/UV6S0Gc7srI/AAAAAAAAAZ0/wy1RSWn0tWg/s1600/ws_java4.png
  28. http://1.bp.blogspot.com/-PDdtLErmDq0/UV6S3xwcBJI/AAAAAAAAAZ8/3X-RJR3_UEs/s1600/ws_java5.png
  29. http://2.bp.blogspot.com/-4bTxBOJuiGI/UV6S61oOQZI/AAAAAAAAAaE/KjA0CY9RYOI/s1600/ws_java6.png
  30. http://2.bp.blogspot.com/-k_lLthKflf0/UV6S9z0myJI/AAAAAAAAAaM/j97QwiFVPLw/s1600/ws_java7.png
Related subjects :