Usar los Ganchos de Transporte
Algunas extensiones del marco de trabajo Apache SOAP necesitan la habilidad de interactúar con el SOAP envelope antes de enviarlo o después de recibirlo. Para facilitar este tipo de interacción, Apache SOAP proporciona la habilidad de insertar extensiones de transporte conectables en tiempo de ejecución. La ejemplarización real de estas extensiones de transporte en el marco de Apache SOAP son conocidas como Envelope Editors.
Usar Envelope Editors en el Servidor
Para permitir las extensiones de transporte en el servidor, necesitamos seelccionar un parámetro de inicialización llamado EnvelopeEditorFactory en los ficheros de configuración de los servlets RPCRouter y MessageRouter. El valor de este parámetro debería ser el nombre totalmente cualificado de una clase Java que implemente org.apache.soap.transport.EnvelopeEditorFactory.
Usar Envelope Editors en el Cliente
Para usar Envelope Editor en el lado del cliente necesitamos ejemplarizar nuestro Envelope Editor, y luego crear un ejemplar de org.apache.soap.transport.FilterTransport pasarle el objeto Envelope Editor, y un ejemplar de un objeto que represente cualquier transporte sobre el que nos estemos comunicando (por ejemplo org.apache.soap.transport.http.SOAPHTTPConnection). Luego necesitamos invocar a org.apache.soap.rpc.Call.setSOAPTransport(...) o a org.apache.soap.messaging.Message.setSOAPTransport(...), depediendo de si estámos invocando un servicio basado en RPC o un servicio orientado a mensaje, respectivamente, pasándole un ejemplar de FilterTransport.
Crear un Envelope Editor
Para crear un Envelope Editor, primero debemos crear una Envelope Editor Factory implementando el interface org.apache.soap.transport.EnvelopeEditorFactory:
public interface EnvelopeEditorFactory
{
public EnvelopeEditor create(Properties props) throws SOAPException;
}
El método creado toma un objeto java.util.Properties que contiene propiedades que, en el caso de lo servlets HTTP, son pasados desde los parámetros de inicialización del servlet.
Para crear un Envelope Editor, necesitamos implementar el interface org.apache.soap.transport.EnvelopeEditor:
public interface EnvelopeEditor
{
public void editIncoming(Reader in, Writer out) throws SOAPException;
public void editOutgoing(Reader in, Writer out) throws SOAPException;
}
Los dos métodos son las rutinas que son llamadas cuando se reciben mensajes de entrada y cuando un mensaje de salida está listo para ser enviado, respectivamente.
La clase org.apache.soap.transport.EnvelopeEditorAdapter contiene un Envelope Editor de ejemplo.