View Javadoc

1   package org.codehaus.xfire.handler.dom;
2   
3   import java.util.ArrayList;
4   import java.util.Iterator;
5   import java.util.List;
6   import javax.xml.namespace.QName;
7   import javax.xml.stream.XMLStreamReader;
8   import org.codehaus.xfire.MessageContext;
9   import org.codehaus.xfire.handler.AbstractHandler;
10  import org.codehaus.xfire.util.STAXStreamReader;
11  import org.dom4j.Document;
12  import org.dom4j.io.XMLWriter;
13  
14  /***
15   * Creates a DOM structure from the stream (lazily instantiated).
16   * It then passes off the DOM messages to a series of 
17   * <code>DOMHandler</code>s.
18   * 
19   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
20   * @since Sep 18, 2004
21   */
22  public class DOMPipelineHandler
23      extends AbstractHandler
24  {
25      private List handlers;
26      
27      public DOMPipelineHandler()
28      {
29          this.handlers = new ArrayList();
30      }
31  
32      public DOMPipelineHandler( List handlers )
33      {
34          this.handlers = handlers;
35      }
36      
37      public QName[] getUnderstoodHeaders()
38      {
39          return super.getUnderstoodHeaders();
40      }
41      
42      /***
43       * @see org.codehaus.xfire.handler.Handler#invoke(org.codehaus.xfire.MessageContext, javax.xml.stream.XMLStreamReader)
44       */
45      public void invoke( MessageContext context, 
46                          XMLStreamReader parser ) throws Exception
47      {
48          STAXStreamReader reader = new STAXStreamReader();
49          
50          Document docRequest = reader.readDocument(parser);
51          Message request = new Message(docRequest);
52          context.setSoapVersion( request.getSoapVersion() );
53          
54          Message response = new Message(request.getSoapVersion());
55          
56          for ( Iterator itr = getHandlers().iterator(); itr.hasNext(); )
57          {
58              DOMHandler handler = (DOMHandler) itr.next();
59              
60              handler.invoke( context, request, response );
61          }
62          
63          XMLWriter writer = new XMLWriter(context.getResponseStream());
64          writer.write(response.getMessage());
65      }
66      
67      public List getHandlers()
68      {
69          return handlers;
70      }
71  }