View Javadoc

1   package org.codehaus.xfire.xmlbeans;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.xml.stream.XMLStreamReader;
7   
8   import org.apache.xmlbeans.XmlObject;
9   import org.codehaus.xfire.MessageContext;
10  import org.codehaus.xfire.handler.AbstractHandler;
11  import org.codehaus.xfire.util.STAXUtils;
12  
13  /***
14   * An XMLBeans handler which can be used in SOAP and REST services.
15   * Override handleRequest and getResponse to add in your service
16   * logic.
17   * 
18   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
19   * @since Oct 31, 2004
20   */
21  public abstract class AbstractXMLBeansHandler
22      extends AbstractHandler
23  {
24      public abstract XmlObject[] invoke( XmlObject[] request, MessageContext context ) 
25          throws Exception;
26  
27      public void invoke(MessageContext context, XMLStreamReader reader) throws Exception
28      {
29          List params = new ArrayList();
30          
31          int event = reader.getEventType();
32          boolean end = false;
33          while ( !end )
34          {
35              switch( event )
36              {
37              case XMLStreamReader.START_ELEMENT:
38                  XmlObject param = XmlObject.Factory.parse(reader);
39                  params.add(param);
40                  break;
41              case XMLStreamReader.END_ELEMENT:
42                  end = true;
43                  break;
44              case XMLStreamReader.END_DOCUMENT:
45                  end = true;
46                  break;
47              default:
48                  break;
49              }
50              
51              if ( !end )
52                  event = reader.next();
53          }
54          
55          XmlObject[] response =
56              invoke( (XmlObject[]) params.toArray(new XmlObject[params.size()]), context );
57  
58          if ( response != null )
59          {
60              for ( int i = 0; i < response.length; i++ )
61              {
62                  STAXUtils.copy(response[i].newXMLStreamReader(), getXMLStreamWriter(context));
63              }
64          }
65      }
66  }