Crear proyecto de servicio web SOAP
Este apartado se centra en el primer paso descrito en el apartado Configuración del servicio web SOAP y explica cómo crear un servicio web SOAP en MapForce. Todos los archivos mencionados en este apartado se encuentran en la carpeta Tutoriales. El objetivo de este servicio web SOAP es extraer registros Author de un archivo XML que cumplan determinados criterios de búsqueda.
Puntos importantes
Tenga en cuenta que:
•El proceso de crear un servicio web en MapForce no depende del lenguaje de programación de destino. Las diferencias aparecen sólo al compilar el servicio web e implementarlo en el servidor web.
•Para un servicio web, puede generar el código Java o C#.
•En nuestro ejemplo, utilizamos Altova XMLSpy para generar solicitudes SOAP de muestra, lo que nos permite obtener una vista previa de los resultados. También es posible diseñar servicios web en MapForce sin XMLSpy; sin embargo, en este caso necesitará un cliente SOAP que pueda generar solicitudes SOAP a partir de archivos WSDL.
Crear un proyecto de servicio web: Procedimientos
Crear un proyectos de servicio web SOAP en MapForce abarca los siguientes pasos:
1.El primer paso consiste en preparar un archivo WSDL (Lenguaje de descripción de servicios web) que describa los siguientes componentes del servicio: la estructura, las operaciones, los parámetros de entrada y salida, así como el protocolo de comunicación. En este ejemplo usamos Altova XMLSpy para crear un archivo WSDL. Para más información sobre documentos WSDL, consulte la descripción de WSDL.
2.En el segundo paso se crea un nuevo proyecto de servicio Web en MapForce que se basará en este archivo WSDL. Es en este momento que también importamos el archivo WSDL en MapForce y le damos un nombre a nuestro proyecto. El proyecto y todos sus contenidos aparecerán en la ventana Proyecto.
3.En la siguiente fase diseñamos una operación getAuthor, que implica, por una parte, agregar un archivo XML del cual se recuperarán los registros Author, y, por otra parte, establecer un filtro que asegurará que sólo los datos relevantes se asignarán a la estructura de la respuesta.
4.En el último paso de la configuración del servicio web, podemos obtener una vista previa del resultado antes de implementarlo en el servidor. Para poder obtener una vista previa del resultado, proporcionaremos una solicitud SOAP de muestra que contiene una consulta de búsqueda y que después se enviará al servidor que aloja el servicio web.
Paso 1: Preparar un archivo WSDL
En la imagen siguiente se puede ver la estructura del documento WSDL que se llama getAuthor.wsdl (vista WSDL de XMLSpy). Ya se ha definido una operación llamada getAuthor. Para más información sobre la estructura de un archivo WSDL, consulte Estructura de un documento WSDL. Para ver instrucciones sobre cómo crear un documento WSDL en Altova XMLSpy, consulte el apartado Tutorial de WSDL.
Tenga en cuenta que debe disponer de un archivo WSDL válido para poder crear un proyecto de servicio de MapForce.
Estructura de la respuesta
Es importante destacar que hemos modificado el archivo WSDL en la vista Texto de XMLSpy para incluir la siguiente estructura en el mensaje de respuesta:
<xsd:complexType name="Author">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Country" type="xsd:string"/>
<xsd:element name="Website" type="xsd:string"/>
<xsd:element name="Publication" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="Publisher" type="xsd:string"/>
<xsd:element name="PrintLength" type="xsd:integer"/>
<xsd:element name="Year" type="xsd:integer"/>
<xsd:element name="Genre" type="xsd:string"/>
<xsd:element name="Price" type="xsd:integer"/>
</xsd:sequence>
<xsd:attribute name="ID" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ID" use="required"/>
</xsd:complexType>
Esta estructura se podrá ver en el componente de servicio Web de destino (véase el paso 2 más abajo), y el resultado de la consulta se asignará a ésta.
Paso 2: Crear un proyecto de servicio web
Para crear un proyecto de servicio web a partir de este servicio web, siga estos pasos:
1.En el menú Archivo o en el botón de la barra de herramientas, haga clic en Nuevo y seleccione Proyecto de servicio web.
2.Busque el archivo getAuthor.wsdl. Después de seleccionar el archivo WSDL, MapForce rellena automáticamente el resto de los campos (imagen siguiente).
3.Haga clic en Aceptar.
4.Cuando la aplicación lo solicite, introduzca el nombre del nuevo proyecto WSDL (getAuthor en nuestro ejemplo) y haga clic en Guardar.
Ahora la ventana Proyecto muestra el proyecto que contiene el archivo, el puerto y las operaciones WSDL, así como una asignación asociada con este servicio (imagen siguiente).
Paso 3: Diseñar la operación getAuthor
Una vez creado el proyecto, aparecerá una nueva asignación denominada getAuthor.mfd en la ventana Proyecto. Haga doble clic en esta asignación para añadirla al área de asignación. En este punto la asignación tiene dos componentes de servicio web: getAuthor (Input) y getAuthor (Output) (imagen siguiente).
El componente getAuthor (Input) contiene la parte de la consulta que se usará para consultar un archivo XML mediante el servicio web. El componente getAuthor (Output) incluye la estructura Author, que está definida en el archivo WSDL (véase la estructura de la respuesta más arriba). En este momento no existen otros componentes ni conexiones.
Add Authors.xml
El siguiente paso es agregar un archivo XML llamado Authors.xml del cual se recuperarán los datos. Agregue Authors.xml a la asignación y conecte los nodos tal y como se ilustra en la imagen siguiente.
La conexión entre los nodos part:Query y part:Result representa la llamada al servicio web. Los datos de Authors.xml pasan al elemento Author del componente de salida getAuthor.
Configurar un filtro
El siguiente paso es configurar un filtro en la conexión entre los elementos Author. Para configurar un filtro, haga clic con el botón derecho en la conexión entre los elementos Author y seleccione Insertar filtro en el menú contextual. También es necesario agregar la función equal, cuyo resultado se suministrará al parámetro booleano del filtro (imagen siguiente). La función equal comparará la cadena de consulta con el valor del elemento Website de cada autor/a. Si el valor del elemento Website de un registro Author coincide con la cadena de consulta, éste se asignará al componente de servicio Web de destino.
Vista previa del resultado
Las asignaciones creadas a partir de archivos WSDL se pueden previsualizar en MapForce antes de implementar el servicio en un servidor web. Para previsualizar este tipo de asignaciones debe indicar una solicitud SOAP (en formato XML) conforme al archivo WSDL. Puede crear una Servicio web SOAP solicitud de prueba por cada operación con Altova XMLSpy o el cliente SOAP que prefiera.
Si usa XMLSpy, abra getAuthor.wsdl y haga clic en el comando SOAP | Crear solicitud SOAP nueva del menú. El paso siguiente consiste en agregar el archivo de la solicitud SOAP a la asignación. Para ello siga estos pasos:
1.Haga doble clic en el encabezado del componente getAuthor (Input). Esto abre el cuadro de diálogo Configuración del componente (ver imagen siguiente).
2.Si ya dispone de un archivo de solicitud SOAP de muestra, haga clic en Examinar y seleccione el archivo correspondiente. Si además de MapForce tiene instalado XMLSpy, puede crear una solicitud de prueba directamente desde MapForce, Para ello, haga clic en Crear. Al hacer clic en Crear, MapForce le pedirá que asigne un nombre al nuevo archivo de solicitud y que seleccione una carpeta dónde guardarlo. Después, el programa le redirigirá a XMLSpy, donde tendrá que introducir una cadena de consulta de muestra y guardar su archivo de solicitud.
3.Haga clic en Aceptar en la Configuración del componente.
getAuthorRequest.xml
Para este ejemplo hemos creado en XMLSpy un archivo de solicitud que se llama getAuthorRequest.xml (véase el extracto de código a continuación). Une vez que se haya importado este archivo de solicitud a la asignación, podremos obtener una vista previa del resultado. El archivo de solicitud contiene la cadena de búsqueda Iceland. Es decir que el filtro recorrerá todos los autores, y si hay autores de Islandia en Authors.xml, estos registros se asignarán a la estructura de la respuesta.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<Query xsi:type="xsd:string">Iceland</Query>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Vista previa del resultado
Para ver el mensaje de respuesta, abra la pestaña Resultados. El siguiente extracto de código muestra una parte del mensaje de respuesta. Por lo visto se han asignado dos autores de Islandia (países resaltados en amarillo a continuación).
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<Result>
<Author ID="2">
<Name>Ragnar Jonasson</Name>
<Country>Iceland</Country>
<Website>ragnarjonasson.com</Website>
<Publication ID="2">...</Publication>
<Publication ID="3">...</Publication>
<Publication ID="28">...</Publication>
<Publication ID="29">...</Publication>
</Author>
<Author ID="27">
<Name>Arnaldur Indridason</Name>
<Country>Iceland</Country>
<Website>n/a</Website>
<Publication ID="34">
<Title>The Darkness Knows</Title>
<ISBN>125076548X</ISBN>
<Publisher>Minotaur Books</Publisher>
<PrintLength>346</PrintLength>
<Year>2021</Year>
<Genre>Crime & Mystery</Genre>
<Price>14.36</Price>
</Publication>
</Author>
</Result>
</soap-env:Body>
</soap-env:Envelope>
Siguientes pasos
Ahora está todo preparado para generar el código que implementa el servicio Web (Java o C#), compilar el código e implementar el servicio en un servidor. Para más información consulte el apartado Generar servicios web SOAP (Java).