View Javadoc

1   package org.codehaus.xfire.handler;
2   
3   import org.codehaus.xfire.MessageContext;
4   import org.codehaus.xfire.exchange.OutMessage;
5   import org.codehaus.xfire.fault.XFireFault;
6   import org.codehaus.xfire.transport.DefaultEndpoint;
7   
8   /***
9    * Reads in the message body using the service binding.
10   * 
11   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
12   */
13  public class DispatchServiceHandler
14      extends AbstractHandler
15  {
16      public String getPhase()
17      {
18          return Phase.DISPATCH;
19      }
20  
21      public void invoke(MessageContext context)
22          throws XFireFault
23      {
24          Boolean b = (Boolean) context.getProperty(DefaultEndpoint.SERVICE_HANDLERS_REGISTERED);
25          if (b == null || b.equals(Boolean.FALSE))
26          {
27              context.getInPipeline().addHandlers(context.getService().getInHandlers());
28          }
29          
30          if (context.getExchange().hasOutMessage())
31          {
32              HandlerPipeline pipeline = new HandlerPipeline(context.getXFire().getOutPhases());
33              pipeline.addHandlers(context.getService().getOutHandlers());
34              pipeline.addHandlers(context.getXFire().getOutHandlers());
35              OutMessage msg = context.getExchange().getOutMessage();
36              pipeline.addHandlers(msg.getChannel().getTransport().getOutHandlers());
37              
38              context.setOutPipeline(pipeline);
39          }
40      }
41  }