Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current Restore this Version View Page History

« Previous Version 6 Current »

It may be necessary to access and modify SOAP message headers or content when invoking a service or receiving a request. Fabric3 provides a generic binding handler framework that can be extended to provide low-level access to SOAP messages.

To do this, a class that implements org.fabric3.spi.binding.handler.BindingHandler must be provided as a component:

public interface BindingHandler<T> {

    /**
     * The fully qualified binding name corresponding to the SCA architected binding name scheme binding.xxxx.
     *
     * @return the fully qualified binding name
     */
    QName getType();

    /**
     * Handles an outbound (reference-side) message.
     *
     * @param context the binding-specific transport context
     * @param message the current message
     */
    void handleOutbound(Message message, T context);

    /**
     * Handles an inbound (service-side) message.
     *
     * @param context the binding-specific transport context
     * @param message the current message
     */
    void handleInbound(T context, Message message);

}

BindingHandler implementations that require access Web Service SOAP messages must use javax.xml.soap.SOAPMessage as the parameterized type. Below is an example handler:

@Scope("COMPOSITE")
public class TestHandler implements BindingHandler<SOAPMessage>{
    private static final QName BINDING = new QName(Constants.SCA_NS, "binding.ws");

    public QName getType() {
        return BINDING;
    }

    public void handleOutbound(Message message, SOAPMessage context) {
       // ...
    }

    public void handleInbound(SOAPMessage context, Message message) {
       //.. 
    }
}

Note the handler is composite-scoped. Although this is not necessary, most handlers are threadsafe and making them composite-scoped will avoid the overhead associated with stateless-scoped implementations. The handler configuration is shown below. Note the component may be contained in the same contribution as the services or references it applies to or in a different contribution if used for more than one application:

<component name="TestHandler">
   <implementation.java class="org.fabric3.tests.binding.metro.handler.TestHandler"/>
</component>

The manifest (sca-contribution.xml) of the contribution containing the handler must contain the following imports:

<contribution ...>
    <import.java package="org.fabric3.spi.*" version="1.9.6"/>
    <import.java package="javax.xml.ws.*"/>
</contribution>

Finally, the handler may be used on a binding as follows:

<component name="HandlerService">
   <implementation.java class="org.fabric3.tests.binding.metro.handler.HandlerServiceImpl"/>
   <service name="HandlerService">
      <binding.ws uri="/handlerService">
         <f3:handler target="TestHandler"/>
      </binding.ws>
   </service>
</component>

0 Comments

You are not logged in. Any changes you make will be marked as anonymous. You may want to Log In if you already have an account.