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 }