You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by sa...@locus.apache.org on 2000/09/01 04:39:27 UTC

cvs commit: xml-soap/java/src/org/apache/soap/messaging Message.java

sanjiva     00/08/31 19:39:26

  Added:       java/src/org/apache/soap/messaging Message.java
  Log:
  client API for messaging
  
  Revision  Changes    Path
  1.1                  xml-soap/java/src/org/apache/soap/messaging/Message.java
  
  Index: Message.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2000, International
   * Business Machines, Inc., http://www.apache.org.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.soap.message;
  
  import java.io.*;
  import java.util.*;
  import java.net.URL;
  import org.w3c.dom.*;
  import org.apache.soap.util.*;
  import org.apache.soap.util.xml.*;
  import org.apache.soap.*;
  import org.apache.soap.transport.*;
  import org.apache.soap.transport.http.*;
  
  /**
   * A <code>Message</code> is the class whose instances represent
   * one-way messages in SOAP. While messages are one-way, they are
   * sometimes carried on two-way transports such as HTTP. To accomodate
   * that, the API supported here has a "receive" method as well - that
   * is only applicable if the transport that is being used supports
   * the receive() method (@see org.apache.soap.transport.SOAPTransport)
   * so that this API can get at the 'response' envelope.
   *
   * @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
   */
  public class Message {
    SOAPTransport st;
  
    public Message () {
    }
  
    public void setSOAPTransport (SOAPTransport st) {
      this.st = st;
    }
     
    public SOAPTransport getSOAPTransport () {
      return st;
    }
  
    /**
     * Send an envelope to the given URL via the SOAPTransport that has
     * been configured for this instance (or SOAPHTTPConnection by default).
     * The envelope is sent exactly as-is.
     * 
     * @param url the url to send to
     * @param actionURI the value of the SOAPAction header
     * @param env envelope to send
     *
     * @exception SOAPException if something goes wrong.
     */
    public void send (URL url, String actionURI, Envelope env) 
         throws SOAPException {
      if (st == null) {
        st = new SOAPHTTPConnection ();
      }
      st.send (url, actionURI, null, env, null);
    }
  
    /**
     * Receive an envelope from the given transport. Only applicable 
     * where the transport supports the receive method.
     * @return the envelope received
     * @exception SOAPException if something goes wrong
     */
    public Envelope receive () throws SOAPException {
      if (st == null) {
        throw new SOAPException (Constants.FAULT_CODE_CLIENT,
  			       "Unable to receive without sending on an " +
  			       "appropriate transport.");
      }
      BufferedReader br = st.receive ();
  
      XMLParserLiaison xpl = new XercesParserLiaison ();
      Document doc = xpl.read ("- SOAP Message Envelope -", br);
      if (doc == null) {
        throw new SOAPException (Constants.FAULT_CODE_CLIENT, "parsing error");
      }
  
      try {
        return Envelope.unmarshall (doc.getDocumentElement ());
      } catch (IllegalArgumentException e) {
        String msg = e.getMessage ();
        throw new SOAPException (Constants.FAULT_CODE_CLIENT, msg, e);
      }
    }
  }