La informaci�n de configuraci�n podr�a pasarse al servidor Apache SOAP mediante un fichero de configuraci�n basado en XML. Por defecto, el servidor buscar� en el directorio de trabajo actual un fichero llamado soap.xml. Si se ha utilizado un fichero diferente, el path por defecto y el nombre del fichero pueden ser sobreescritos especificando un par�metro que el oyente de transport (por ejemplo, RPCRouterServlet) le pasa al servidor SOAP durante la arrancada. (Todos los oyentes de transport deber�an llamar al m�todo est�tico setConfigFileName(...) de org.apache.soap.server.ServiceManager antes de llamar al servidor SOAP).
Para oyentes de transporte HTTP, esta opci�n puede seleccionarse en el fichero de configuraci�n para el servlet rpcrouter a�adiendo un par�metro de inicializaci�n llamado ConfigFile al fichero de propiedades de despligue del servelt. Aqu� podemos ver un ejemplo de propiedades de despliegue de un servlet con esta modificaci�n:
<servlet>
<servlet-name>rpcrouter</servlet-name>
<display-name>Apache-SOAP RPC Router</display-name>
<description>no description</description>
<servlet-class>
org.apache.soap.server.http.RPCRouterServlet
</servlet-class>
<init-param>
<param-name>faultListener</param-name>
<param-value>org.apache.soap.server.DOMFaultListener</param-value>
</init-param>
<init-param>
<param-name>ConfigFile</param-name>
<param-value>config-file</param-value>
</init-param>
</servlet>
donde config-file es el path (totalmente cualificado o relativo) y el nombre de fichero del fichero de configuraci�n de SOAP.
Actualmente hay dos selecciones disponibles en el fichero de configuraci�n del servidor SOAP: informaci�n sobre el Controlador del Servicio e informaci�n sobre el controlador de configuraci�n conectable. Abajo podemos ver un ejemplo de un fichero de configuraci�n de un servidor SOAP que selecciona informaci�n sobre el Controlador de Servicio y del Controlador de Configuraci�n:
<!-- Sample Apache SOAP Server Configuration File -->
<soapServer>
<!-- This section defines the same thing you get if you don't -->
<!-- specify anything at all - aka the default -->
<serviceManager>
<option name="SOAPInterfaceEnabled" value="boolean-value" />
</serviceManager>
<configManager value="config-manager" >
[<option name="option-name" value="option-value"/>]*
</configManager>
</soapServer>
donde boolean-value es true o false, dependiendo de si queremos activar o no el Interface SOAP para el Controlador de Servicio, y config-manager es el nombre totalmente cualificado de la clase del controlador de configuraci�n usado por el servidor SOAP. Se podr�a pasar informaci�n adicional el controlador de configuraci�n a trav�s del uso de elementos <option>, con option-name y option-value actuando como parejas clave/valor.
�Controlar el Acceso al Controlador de Servicio
Aunque el interface SOAP para desplegar/eliminar servicios puede ser muy �til durante el despliegue, no es siempre deseable exponer dichas capacidades en un entorno de ejecuci�n. Apache SOAP proporciona la habilidad de activar/desactivar el interface SOAP hacia el ServiceManager seleccionado una bandera booleana en el fichero de configuraci�n. Si la bandera se selecciona a true, o si no est� presente, el interface SOAP est� activo. Si se selecciona a false, entonces el interface ServiceManagerClient, as� como cualquier otro interface que use este interface, no podr�n comunicar con el ServiceManager. Sin embargo, algo que comunique directamente con el ServiceManager, como las p�ginas JSP de administraci�n, podr�n modificar el estado del ServiceManager.
�Controlador de Configuraci�n Conectable
El controlador de configuraci�n SOAP es el responsale de grabar la lista de servicios desplegados actualmente en un almacenamiento persistente, por eso cuando se para o se reinicia el servidor SOAP, los servicios no tienen que ser redesplegados.
Si no se especifica ning�n controlador de configuraci�n en el fichero de configuraci�n del servidor, o si no se puede cargar el controlador de configuraci�n especificado, se usar� org.apache.soap.server.DefaultConfigManager. Este graba la lista de servicios desplegados en un fichero llamado DeployedServices.ds en el directorio de trabajo actual (o en el fichero especificado por el elemento <option> del fichero de configuraci�n del servidor), cada vez que se despliegue o se elimine un servicio. En la inicializaci�n, el DefaultConfigManager intentar� leer este fichero y restaurar su informaci�n de estado.
Si queremos sobreeescribir el path y/o el nombre de fichero del fichero de almacenamiento de servicios desplegados para DefaultConfigManager, nuestro fichero de configuraci�n SOAP se deber�a parecer a �ste:
<!-- Apache SOAP Server Configuration File -->
<soapServer>
<configManager value="org.apache.soap.server.DefaultConfigManager">
<option name="filename" value="config-file"/>
</configManager>
</soapServer>
donde config-file es el path (totalmente cualificado o relativo) y el nombre de fichero del fichero de almacenamiento de servicios desplegdos.
�Crear un Controlador de Configuraci�n
Si encontramos que DefaultConfigurationManager no cubre nuestras necesidades, deber�amos crear uno propio y usarlo en su lugar. Todos los controladores de configuraci�n deben implementar el interface org.apache.soap.util.ConfigManager, que tiene esta forma:
public interface ConfigManager
{
public void setContext(ServletContext context);
public void setOptions( Hashtable options ) throws SOAPException ;
public void init() throws SOAPException ;
public void deploy( DeploymentDescriptor dd ) throws SOAPException ;
public String[] list() throws SOAPException ;
public DeploymentDescriptor undeploy( String id ) throws SOAPException ;
public DeploymentDescriptor query(String id) throws SOAPException ;
}
Los m�todos:
- void setOptions(Hashtable options) throws SOAPException
Este m�todo ser� llamado con una Hashtable de parejas nombre/valor que fueron especificadas mediante elementos <option> en el fichero de configuraci�n. En el caso de que se produzca un error se lanzar� una SOAPException.
- void init() throws SOAPException
Este m�todo ser� llamado despu�s de que se cree el objeto ConfigManager, permitiendo que se haga cualquier inicializaci�n. Por ejemplo, leer el fichero DeployedServices.ds. En el caso de que se produzca un error se lanzar� una SOAPException.
- void deploy(DeploymentDescriptor dd) throws SOAPException
Este m�todo ser� llamado cuando un servicio sea desplegado (o redesplegado). El servicio deber�a ser a�adido a la estructura de datos interna que sea utilizada para almacenar la lista de servicios y la lista deber�a hacerse persitente para que si se para el servidor la lista pueda ser recargada en la arrancada. En el caso de que se produzca un error se lanzar� una SOAPException.
- String[] list() throws SOAPException
Este m�todo deber�a devolver un array de objetos String, uno por cada servicio desplegado. En el caso de que se produzca un error se lanzar� una SOAPException.
- DeploymentDescriptor undeploy(String id) throws SOAPException
Este m�todo deber�a ser llamado cuando se elimina un servicio. El servicio deberia ser eliminado de la estructura de datos interna que sea utilizada para almcenar la lista de servicios y la lista deber�a hacerse persitente para que si se para el servidor la lista pueda ser recargada en la arrancada. En el caso de que se produzca un error se lanzar� una SOAPException.
- DeploymentDescriptor query(String id)throws SOAPException
Este m�todo deber�a devolver un objeto DeploymentDescriptor representando los metadatos sobre el servicio. En el caso de que se produzca un error se lanzar� una SOAPException.