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   * 
17   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
18   * @since Sep 18, 2004
19   */
20  public class DOMPipelineHandler
21      extends AbstractHandler
22  {
23      private List handlers;
24      
25      public DOMPipelineHandler()
26      {
27          this.handlers = new ArrayList();
28      }
29  
30      public DOMPipelineHandler( List handlers )
31      {
32          this.handlers = handlers;
33      }
34      
35      public QName[] getUnderstoodHeaders()
36      {
37          return super.getUnderstoodHeaders();
38      }
39      
40      /***
41       * @see org.codehaus.xfire.handler.Handler#invoke(org.codehaus.xfire.MessageContext, javax.xml.stream.XMLStreamReader)
42       */
43      public void invoke( MessageContext context, 
44                          XMLStreamReader parser ) throws Exception
45      {
46          STAXStreamReader reader = new STAXStreamReader();
47          
48          Document docRequest = reader.readDocument(parser);
49          Message request = new Message(docRequest);
50          context.setSoapVersion( request.getSoapVersion() );
51          
52          Message response = new Message(request.getSoapVersion());
53          
54          for ( Iterator itr = getHandlers().iterator(); itr.hasNext(); )
55          {
56              DOMHandler handler = (DOMHandler) itr.next();
57              
58              handler.invoke( context, request, response );
59          }
60          
61          XMLWriter writer = new XMLWriter(context.getResponseStream());
62          writer.write(response.getMessage());
63      }
64      
65      public List getHandlers()
66      {
67          return handlers;
68      }
69  }