1. Servicio web SOAP en Java con NetBeans
Crear nuevo proyecto
Lo primero es crear un nuevo proyecto, así que...
1. Creamos un Nuevo proyecto de tipo Aplicación Web
2. Elegimos un nombre para la aplicación web. La llamaremos “Holate”.
2. 3. En los ajustes del servidor, seleccionamos GlassFish, como viene siendo
habitual durante el curso.
4. Y Terminar
¿Código?
Como toda aplicación web, me aparece el típico index.jsp predeterminado en el que
puedo aprovechar de describir el Servicio Web (puedo poner cualquier cosa, en
realidad, porque esto no es parte del servicio web).
3. Creación del Servicio Web
En NetBeans es muy sencillo crear un Servicio Web. Basta seleccionar el nombre del
proyecto (Holate en este caso) e ir al menú Archivo>Nuevo. En el apartado de Servicios
Web seleccionaremos Servicio Web.
Como nombre de paquete hemos empleado “hola”.
4. Añadir operaciones
Para añadir operaciones hay que posicionarse sobre el Servicio Web y seleccionar Add
Operation...
Otra forma de añadir operaciones es ir al modo Design donde hay un botón Add
Operation....
Ponemos un nombre a la operación y podemos especificar los parámetros y su tipo.
5. ServicioWeb.java
Con eso se generará automáticamente el código esqueleto que puedo modificar para que
me retorne "Hola, " + nombre:
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) {
//TODO write your implementation code here:
6. return "Hola, " + nombre;
}
}
Probémoslo
Para eso primero hay que desplegar el proyecto en el servidor (el menú contextual del
proyecto; opción Deploy)
GENERACIÓN CORRECTA (tiempo total: 7 segundos)
Y probamos el servicio web seleccionando el Servicio web y activando la 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 similar a esta:
7. Aquí, por ejemplo, si introducimos Oscar en el formulario, se puede ver el código que
entrega el servicio Web al cliente.
diHola Method invocation
Method parameter(s)
Type Value
java.lang.String Oscar
Method returned
java.lang.String : "Hola, Oscar"
SOAP Request
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
8. <S:Body>
<ns2:diHola xmlns:ns2="http://hola/">
<nombre>Oscar</nombre>
</ns2:diHola>
</S:Body>
</S:Envelope>
SOAP Response
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:diHolaResponse xmlns:ns2="http://hola/">
<return>Hola, Oscar</return>
</ns2:diHolaResponse>
</S:Body>
</S:Envelope>
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"/>
<output message="tns:diHolaResponse"/>
</operation>
</portType>
<binding name="ServicioWebPortBinding" type="tns:ServicioWeb">