El API Apache SOAP v2.2

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.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP