Apache SOAP utiliza documentos XML llamados Descriptores de Despliegue para proporcionar informaci�n al sistema de ejecuci�n SOAP sobre los servicios que deber�an estar disponibles para los clientes. Pueden proporcionar un amplio conjunto de informaci�n como la URN para el servicio (que se utiliza para enrutar las solicitudes que le vienen), los detalles de la clase y del m�todo si el servicio est� siendo proporcionado por una clase Java, o el nombre del script si el servicio est� implementado por cualquiera de los lenguajes de script BSF soportados. El contenido exacto del descriptor de despliegue depende del tipo de artefacto que est� siendo expuesto mediante SOAP. Abajo encontraremos detalles sobre los diferentes tipos de descriptores de despliegue que pueden usarse en esta versi�n.
�Descriptores de Despliegue para Clases Java Est�ndards
Un descriptor de despliegue que expone un servicio que est� implementado mediante una clase Java est�ndard (incluyendo un Java Bean normal) se parece a este:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:service-urn>" [type="message"] [checkMustUnderstands="true|false"]>
<isd:provider type="java"
scope="Request | Session | Application"
methods="exposed-methods">
<isd:java class="implementing-class" [static="true|false"]/>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
</isd:service>
Donde service-urn es la URN donde queremos dar un servicio, exposed-methods es una lista de m�todos separados por espacios que desamos exponer, e implementing-class es el nombre totalmente cualificado de la clase (por ejemplo packagename.classname) que proporciona los m�todos que est�n siendo expuestos. Sobre el elemento <service>, hay un atributo opcional llamado type que podr�a ser configurado con el valor message si el servicio est� orientado a documento en lugar de ser un servicio RPC, y un atributo opcional llamado checkMustUnderstands que podr�a ser true o false dependiendo de si queremos o no que el servidor lance un Fault si hab�a cabeceras SOAP en la solicitud que fueron marcadas como MustUnderstand. En el elemento <java> hay un atributo opcional llamado static, que podr�a seleccionarse a true o false, dependiendo de si los m�todos que est�n siendo expuestos son est�ticos o no. El elemento <provider> tambi�n acepta un atributo scope que indica el tiempo de vida de la ejemplarizaci�n de la clase implementada. Request indica que el objeto se eliminar� despu�s de que se haya completado la solicitud, Session indica que el objeto vivir� todo el tiempo de vida de la sesi�n HTTP actual, y Application indica que el objeto vivir� hasta que se haya cerrado el servidor de servicios.
�Descriptor de Despliegue EJB
Un descriptor de despliegue que expone un servicio que est� implementado mediante un Enterprise Java Bean se parecer�a a esto:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:service-urn">
<isd:provider type="provider-class"
scope="Application"
methods="exposed-methods">
<isd:option key="JNDIName" value="jndi-name"/>
<isd:option key="FullHomeInterfaceName" value="home-name" />
<isd:option key="ContextProviderURL" value="context-provider" />
<isd:option key="FullContextFactoryName" value="factory-name" />
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
</isd:service>
Donde service-urn y exposed-methods tienen el mismo significado que en el descriptor de despliegue de una clase Java est�ndard, provider-class es org.apache.soap.providers.StatelessEJBProvider, org.apache.soap.providers.StatefulEJBProvider, o org.apache.soap.providers.EntityEJBProvider, dependiendo de si la implementaci�n es o no un bean de sesi�n sin estado, un bean de sesi�n con estado, o un bean de entidad, respectivamente, jndi-name es el nombre JNDI registrado del EJB, home-name es el nombre totalmente cualificado de la clase home del EJB, context-provider es la URL asociada con el proveedor de contexto JNDI, y factory-name es el nombre de la factor�a de contextos JNDI. Por campatibilidad con versiones anteriores, el jndi-name tambi�n podr�a especificarse en el atributo class del elemento <java>.
�Descriptor de Despliegue de un Script BSF
Un descriptor de despliegue que expone un servicio que est� implementado mediante un Script BSF se parece a esto:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:service-urn">
<isd:provider type="script"
scope="Request | Session | Application"
methods="exposed-methods">
<isd:script language="language-name" [source="source-filename"]>
[script-body]
</isd:script>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
</isd:service>
Donde service-urn, exposed-methods, tienen el mismo significado que en el descriptor de despliegue de una clase Java est�ndard, y language-name es el nombre del lenguaje BSF soportado en el que est� escrito el script. El descriptor de despliegue tambi�n debe tener un atributo source sobre el elemento <script>, o contener un script-body, que tenga el script real a utilizar para proporcionar el servicio. Si el descriptor de despliegue tiene un atributo source, entonces source-filename se refiere al fichero que contiene la implementaci�n del servicio.
�Especificar Oyentes de Fault
En todos los ejemplos de arriba se ha registrado un s�lo oyente de fault, org.apache.soap.server.DOMFaultListener, cualquier clase que implemente el interface org.apache.soap.server.SOAPFaultListener podr�a ser registrada mediante el elemento <faultListener>. Se podr�an especificar m�ltiples oyentes de fault simplemente a�adiendo elementos <faultListener> adicionales. Para m�s informaci�n sobre oyentes de fault de Apache SOAP, mira aqu�.
�Especificar el Mapeo de Tipos en un Descriptor de Despliegue
La informaci�n de mapeo de tipos para servicios RPC tambi�n podr�a especificarse en los descriptores de despliegue. Los mapeos se especifican a trav�s del uso de un elemento <mappings> que opcionalmente podr�a aparecer como hijo del elemento <service>. Los mapeos especificados de esta forma est�n s�lo disponibles para el servicio descrito por el descriptor de despliegue en el que aparecen. Un descriptor de despliegue con mapeo de tipos, se parece a esto:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="...">
<isd:provider .../>
<isd:faultListener .../>
<isd:mappings [defaultRegistryClass="registry-class"]>
<isd:map encodingStyle="encoding-uri" xmlns:x="qname-namespace" qname="x:qname-element"
javaType="java-type" java2XMLClassName="serializer" xml2JavaClassName="deserializer"/>
...
</isd:mappings>
Donde encoding-uri es la URI para el m�todo de codificaci�n (por ejemplo http://schemas.xmlsoap.org/soap/encoding para la codificaci�n est�ndard SOAP), qname-namespace es el espacio de nombres del elemento, qname-element es el nombre del elemento XML, java-type es la clase Java totalmente cualificada que hemos proporcionado para el mapeo (por ejemplo, samples.Date,) serializer es la clase Java totalmente cualificada que implementa org.apache.soap.util.xml.Serializer, y deserializer es la clase totalmente caulificada que implementa org.apache.soap.util.xml.Deserializer. El elemento <mappings> es un atributo opcional llamado defaultRegistryClass, cuyo valor (indicado por registry-class) es la clase Java totalmente cualificada (que es una subclase de org.apache.soap.encoding.SOAPMappingRegistry) que deseamos usar como tipo por defecto en registro de mapeo. Para m�s informaci�n sobre el soporte de mapeo de tipos en Apache SOAP, mira aqu�.