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 }