Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
-Tutoriales

El API Apache SOAP v2.2


Crear Mapeos de Tipos

Apache SOAP usa mapeos de tipos para determinar cómo se deberían empaquetar/desempaquetar los tipos Java desde XML para que puedan ser transmitidos/recibidos. Los mapeos de tipos son almacenados en el registro de mapeos de tipos, y el registro por defecto es org.apache.soap.encoding.SOAPMappingRegistry.

Cada mapeo de tipo trae varias informaciones: una URI que describe el estilo de codificación (por ejemplo, http://schemas.xmlsoap.org/soap/encoding/), un nombre cualificado (QName) para el elemento XML (por ejemplo, http://www.w3.org/2001/XMLSchema:int), la clase Java a ser codificada/descodifiada, el nombre de la clase Java que actúa como serializador, y el nombre de la clase Java que actúa como deserialziador. Las clases Java que actúan como serializadores/deserializadores deben implementar org.apache.soap.util.xml.Serializer y org.apache.soap.util.xml.Deserializer, respectivamente.

Para hacernos la vida un poco más fácil, se ha predefinido y registrado un conjunto de mapeos de tipos dentro del SOAPMappingRegistry para el estilo de codificación SOAP. Estos mapeos incluyen los siguientes tipos Java:

  • Todos los tipos primitivos Java, como int, float, boolean, byte, etc. y sus clases envoltura correspondientes (por ejemplo, java.lang.Integer, java.lang.Boolean, etc.)
  • Arrays Java
  • java.lang.String
  • java.util.Date
  • java.util.GregorianCalendar
  • java.util.Vector
  • java.util.Hashtable
  • java.util.Map (bajo las ediciones Java que lo soportan)
  • java.math.BigDecimal
  • javax.mail.internet.MimeBodyPart
  • java.io.InputStream
  • javax.activation.DataSource
  • javax.activation.DataHandler
  • org.apache.soap.util.xml.QName
  • org.apache.soap.rpc.Parameter
  • java.lang.Object (un deserializador sólo para objetos null)

SOAPMappingRegistry también proporciona un mapeo de tipo para codificar org.apache.soap.rpc.Parameters en el estilo de codificación literal XML, y un conjunto de mapeos para codificar los tipos soportados por el IBM XMI Framework en el estilo de codificación XMI.

Si queremos pasar nuestros propios objetos como parámetros a servicios SOAP RPC, necesitaremos registrar nuevos mapeos de tipos (y posiblemente crear nuestros propios serializadores/deserializadores). Debemos recordar mapear los nuevos tipos en el lado del cliente y en el lado del servidor.

. Registar Mapeos de Tipos en el Servidor

Hay dos formas principales de registrar información de mapeos de tipos en un servidor Apache SOAP:

  1. Registrarlos mediante el descriptor de despliegue.
  2. Sobreescribir el registro de mapeo por defecto con un registro que tenga los nuevos mapeos de tipos pre-registrados.

La primera forma probablemente es la más sencilla de implementar y manejar, pero requiere que repliquemos la informacion de mapeado en cada descriptor de despliegue que la necesite. Para más información sobre el registro de mapeos de tipos mediante el descriptor de despliegue, mira aquí.

El segundo mecanismo requiere un poco más de trabajo, pero nos permite limitar el número de información adicional que necesitamos poner en cada descriptor de despliegue. Además, el mismo registro de mapeo se puede usar en el lado del cliente, y así podríamos recortar el código que debemos escribir para el cliente. El nuevo registro debe ser una subclase de SOAPMappingRegistry. Para más información sobre el registro de mapeos de tipos mediante el descriptor de despliegue, mira aquí.

. Registrar Mapeo de Tipos en el Cliente

Como en el caso del servidor, en el cliente hay dos formas principales de registrar la información de mapeo de tipos:

  1. Crear un ejemplar de SOAPMappingRegistry y usar el método mapTypes(...) para añadir nuevos mapeos.
  2. Crear un ejemplar de una subclase SOAPMappingRegistry que ya tenga pre-registrados nuestros mapeos.

La primera forma es probablemente la más fácil de hacerlo, pero si tenemos que usar los mismos mapeos en muchos clientes diferentes o si también estámos implemetando el lado del servidor, la forma del segundo método nos ahorrará un poco de codificación.

. El Bean Serializer/Deserializer

En muchos casos, incluso si no hay un mapeo de tipos por defecto para el objeto que estamos intentando transmitir, podríamos no necesitar crear un nuevo serializador/deserializador. Apache SOAP viene con un Java Bean Serializer/Deserializer que podría cubrir nuestras necesidades. org.apache.soap.encoding.soapenc.BeanSerializer puede usarse para serializar o deserializar JavaBeans usando el estilo de codificación SOAP. Las propiedades públicas del bean se covertirán en accesores nombrados (elementos) en el formato XML. Para usar BeanSerializer, simplemente pasamos org.apache.soap.encoding.soapenc.BeanSerializer como el último de los dos parámetros cuando estámos registrando el mapeo de tipos para nuestro objeto

Nota:
El objeto que estámos serializando con BeanSerializer DEBE ser un JavaBean para que este serializador funcione.
  • DEBE tener un constructor sin argumentos.
  • DEBE exponer todos los estados interesantes a través de propiedades.
  • No le DEBE importar el orden de los accesores para las propiedades (por ejemplo, métodos setX/getX).
  • etc.

Este NO es un serializador de propósito general. NO funcionará si el objeto que estámos serializando/deserializando no cumple la JavaBeans definition. NO es un bug si no podemos serializar/deserializar nuestras clases Java, que no son Beans, lo mismo que no es un bug no poder serializar un java.awt.Panel con el serializador java.util.Date.

. Crear Nuevos Serializadores y Deserializadores

Si necesitamos crear un nuevo serializador/deserializador, un vistazo al código fuente de los predefinidos nos proporcionará una buena guía. Debemos recordar que necesitan implemetnar org.apache.soap.util.xml.Serializer y org.apache.soap.util.xml.Deserializer, respectivamente, Podemos implementar los dos en la misma clase, o usar dos clases diferentes, realmente no hay ninguna diferencia.

 
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network