View Javadoc

    1   package org.codehaus.xfire.client.http;
    2
    3   import java.net.URLConnection;
    4
    5   import javax.xml.stream.XMLStreamException;
    6   import javax.xml.stream.XMLStreamReader;
    7   import javax.xml.stream.XMLStreamWriter;
    8
    9   import org.codehaus.xfire.client.ClientHandler;
    10  import org.codehaus.xfire.fault.XFireFault;
    11
    12  /***
    13   * A SOAP client for the HTTP transport.
    14   *
    15   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
    16   * @since Oct 26, 2004
    17   */
    18  public class SoapHttpClient
    19      extends AbstractHttpClient
    20  {
    21      private ClientHandler bodyHandler;
    22      private ClientHandler headerHandler;
    23      private String soapVersion;
    24      private String action = "";
    25
    26      /***
    27       * Create the SoapHttpClient. It will default to generating a
    28       * SOAP 1.1 Envelope.
    29       *
    30       * @param bodyHandler A handler which will generate and process
    31       * the SOAP Body.
    32       * @param url The URL to invoke.
    33       */
    34      public SoapHttpClient(ClientHandler bodyHandler, String url)
    35      {
    36          super();
    37          this.bodyHandler = bodyHandler;
    38          setUrl( url );
    39          setSoapVersion( SOAP11_ENVELOPE_NS );
    40      }
    41
    42      /***
    43       * Create the SoapHttpClient. It will default to generating a
    44       * SOAP 1.1 Envelope.
    45       *
    46       * @param bodyHandler A handler which will generate and process
    47       * the SOAP Body.
    48       * @param headerHandler A handler which will generate and process
    49       * the SOAP Header.
    50       * @param url The URL to invoke.
    51       */
    52      public SoapHttpClient( ClientHandler bodyHandler,
    53                             ClientHandler headerHandler,
    54                             String url )
    55      {
    56          super();
    57          this.bodyHandler = bodyHandler;
    58          this.headerHandler = headerHandler;
    59          setUrl( url );
    60          setSoapVersion( SOAP11_ENVELOPE_NS );
    61      }
    62      /***
    63       * Create the SoapHttpClient.
    64       *
    65       * @param bodyHandler A handler which will generate and process
    66       * the SOAP Body.
    67       * @param headerHandler A handler which will generate and process
    68       * the SOAP Header.
    69       * @param url The URL to invoke.
    70       * @param soapVersion The soap version.  See SOAPConstants.
    71       */
    72      public SoapHttpClient( ClientHandler bodyHandler,
    73                             ClientHandler headerHandler,
    74                             String url,
    75                             String soapVersion )
    76      {
    77          super();
    78          this.bodyHandler = bodyHandler;
    79          this.headerHandler = headerHandler;
    80          this.soapVersion = soapVersion;
    81          setUrl( url );
    82      }
    83
    84      protected void writeRequest(XMLStreamWriter writer)
    85          throws XMLStreamException
    86      {
    87          writer.writeStartDocument(getEncoding(), "1.0");
    88
    89          writer.setPrefix("soap", getSoapVersion());
    90          writer.writeStartElement("soap", "Envelope", soapVersion);
    91          writer.writeNamespace("soap", getSoapVersion());
    92
    93          if ( headerHandler != null )
    94          {
    95              writer.writeStartElement("soap", "Header", soapVersion);
    96              headerHandler.writeRequest(writer);
    97              writer.writeEndElement();
    98          }
    99
    100         writer.writeStartElement("soap", "Body", soapVersion);
    101
    102         bodyHandler.writeRequest(writer);
    103
    104         writer.writeEndElement(); // Body
    105
    106         writer.writeEndElement();  // Envelope
    107
    108         writer.writeEndDocument();
    109         writer.close();
    110     }
    111
    112     protected void readResponse(XMLStreamReader reader)
    113         throws XMLStreamException, XFireFault
    114     {
    115         while ( true )
    116         {
    117             int event = reader.next();
    118             switch( event )
    119             {
    120                 case XMLStreamReader.END_DOCUMENT:
    121                     return;
    122                 case XMLStreamReader.START_ELEMENT:
    123                     if( reader.getLocalName().equals("Header") && headerHandler != null )
    124                     {
    125                         reader.nextTag();
    126                         headerHandler.handleResponse(reader);
    127                     }
    128                     else if ( reader.getLocalName().equals("Body") )
    129                     {
    130                         reader.nextTag();
    131                         bodyHandler.handleResponse(reader);
    132                     }
    133                     break;
    134                 default:
    135                     break;
    136             }
    137         }
    138     }
    139
    140     protected void writeHeaders(URLConnection urlConn)
    141     {
    142         // Set the SOAPAction header
    143         String action = getAction();
    144         if (action == null)
    145             action = "";
    146
    147         urlConn.setRequestProperty( "SOAPAction", "\"" + action + "\"");
    148     }
    149
    150     /***
    151      * @return Returns the bodyHandler.
    152      */
    153     public ClientHandler getBodyHandler()
    154     {
    155         return bodyHandler;
    156     }
    157
    158     /***
    159      * @return Returns the headerHandler.
    160      */
    161     public ClientHandler getHeaderHandler()
    162     {
    163         return headerHandler;
    164     }
    165
    166     /***
    167      * @return Returns the soapVersion.
    168      */
    169     public String getSoapVersion()
    170     {
    171         return soapVersion;
    172     }
    173
    174     /***
    175      * @param soapVersion The soapVersion to set.
    176      */
    177     public void setSoapVersion(String soapVersion)
    178     {
    179         this.soapVersion = soapVersion;
    180     }
    181     /***
    182      * @param action The action to set.
    183      */
    184     public void setAction(String action)
    185     {
    186         this.action = action;
    187     }
    188
    189     public String getAction()
    190     {
    191         return action;
    192     }
    193 }