View Javadoc

    1   package org.codehaus.xfire.transport.http;
    2
    3   import java.io.IOException;
    4   import java.io.InputStream;
    5   import java.io.OutputStream;
    6   import java.net.HttpURLConnection;
    7   import java.net.URL;
    8
    9   import org.codehaus.xfire.XFireException;
    10  import org.codehaus.xfire.exchange.InMessage;
    11  import org.codehaus.xfire.fault.XFireFault;
    12  import org.codehaus.xfire.util.STAXUtils;
    13
    14  /***
    15   * Http Sender
    16   *
    17   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
    18   * @since Oct 26, 2004
    19   */
    20  public class HttpMessageSender
    21  {
    22      private String username;
    23      private String password;
    24      private String encoding;
    25      private String urlString;
    26      private HttpURLConnection urlConn;
    27      private InputStream is;
    28      private String action;
    29
    30      public HttpMessageSender(String urlString, String encoding)
    31      {
    32          this.urlString = urlString;
    33          this.encoding = encoding;
    34      }
    35
    36      public void open() throws IOException, XFireFault
    37      {
    38          URL url = new URL(urlString);
    39          urlConn = createConnection(url);
    40
    41          urlConn.setDoInput(true);
    42          urlConn.setDoOutput(true);
    43          urlConn.setUseCaches(false);
    44          urlConn.setRequestMethod("POST");
    45
    46          // Specify the content type.
    47          urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    48
    49          urlConn.setRequestProperty("User-Agent", "XFire Client +http://xfire.codehaus.org");
    50          urlConn.setRequestProperty("Accept", "text/xml; text/html");
    51          urlConn.setRequestProperty("Content-type", "text/xml; charset=" + encoding);
    52
    53          String action = getAction();
    54          if (action == null)
    55              action = "";
    56
    57          urlConn.setRequestProperty( "SOAPAction", "\"" + action + "\"");
    58      }
    59
    60      public OutputStream getOutputStream() throws IOException, XFireFault
    61      {
    62          return urlConn.getOutputStream();
    63      }
    64
    65      public InMessage getInMessage() throws IOException
    66      {
    67          try
    68          {
    69              is = urlConn.getInputStream();
    70          }
    71          catch (IOException ioe)
    72          {
    73              if (urlConn.getResponseCode() == HttpURLConnection.HTTP_INTERNAL_ERROR)
    74              {
    75                  is = urlConn.getErrorStream();
    76              }
    77          }
    78
    79          return new InMessage(STAXUtils.createXMLStreamReader(is, encoding), urlString);
    80      }
    81
    82      public void close() throws XFireException
    83      {
    84
    85          try
    86          {
    87              if (is != null)
    88                  is.close();
    89          }
    90          catch (IOException e)
    91          {
    92              throw new XFireException("Couldn't close stream.", e);
    93          }
    94          finally
    95          {
    96              if (urlConn != null)
    97                  urlConn.disconnect();
    98          }
    99      }
    100
    101     private HttpURLConnection createConnection(URL url)
    102         throws IOException
    103     {
    104         return (HttpURLConnection) url.openConnection();
    105     }
    106
    107     /***
    108      * @return Returns the url.
    109      */
    110     public String getUrl()
    111     {
    112         return urlString;
    113     }
    114
    115     /***
    116      * @param url The url to set.
    117      */
    118     public void setUrl(String url)
    119     {
    120         this.urlString = url;
    121     }
    122
    123     /***
    124      * @return Returns the password.
    125      */
    126     public String getPassword()
    127     {
    128         return password;
    129     }
    130
    131     /***
    132      * @param password The password to set.
    133      */
    134     public void setPassword(String password)
    135     {
    136         this.password = password;
    137     }
    138
    139     /***
    140      * @return Returns the username.
    141      */
    142     public String getUsername()
    143     {
    144         return username;
    145     }
    146
    147     /***
    148      * @param username The username to set.
    149      */
    150     public void setUsername(String username)
    151     {
    152         this.username = username;
    153     }
    154
    155     public String getAction()
    156     {
    157         return action;
    158     }
    159
    160     public void setAction(String action)
    161     {
    162         this.action = action;
    163     }
    164
    165 }