| SOAPConnectionImpl.java |
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2002-2003 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 "Axis" 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. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.jboss.axis.soap;
import org.jboss.axis.AxisFault;
import org.jboss.axis.Constants;
import org.jboss.axis.Message;
import org.jboss.axis.attachments.Attachments;
import org.jboss.axis.client.Call;
import org.jboss.axis.message.SOAPEnvelopeAxisImpl;
import org.jboss.axis.utils.Messages;
import org.w3c.dom.Element;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import java.net.MalformedURLException;
import java.util.Iterator;
/**
* SOAP Connection implementation
*
* @author Davanum Srinivas (dims@yahoo.com)
*/
public class SOAPConnectionImpl extends javax.xml.soap.SOAPConnection
{
boolean closed = false;
/**
* Sends the given message to the specified endpoint and
* blocks until it has returned the response.
*
* @param request the <CODE>SOAPMessage</CODE>
* object to be sent
* @param endpoint a <CODE>URLEndpoint</CODE>
* object giving the URL to which the message should be
* sent
* @return the <CODE>SOAPMessage</CODE> object that is the
* response to the message that was sent
* @throws SOAPException if there is a SOAP error
*/
public SOAPMessage call(SOAPMessage request, Object endpoint)
throws SOAPException
{
if (closed)
{
throw new SOAPException(Messages.getMessage("connectionClosed00"));
}
try
{
Call call = createCall(endpoint);
((org.jboss.axis.Message)request).setMessageContext(call.getMessageContext());
SOAPEnvelopeAxisImpl env = ((org.jboss.axis.Message)request).getSOAPEnvelope();
Attachments attachments = ((org.jboss.axis.Message)
request).getAttachmentsImpl();
if (attachments != null)
{
Iterator iterator = attachments.getAttachments().iterator();
while (iterator.hasNext())
{
Object attachment = iterator.next();
call.addAttachmentPart(attachment);
}
}
call.setReturnClass(SOAPMessage.class);
call.invoke(env);
return call.getResponseMessage();
}
catch (java.net.MalformedURLException mue)
{
throw new SOAPException(mue);
}
catch (org.jboss.axis.AxisFault af)
{
processAxisFault(af);
Message msg = new Message(af);
msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
msg.setMessageContext(((org.jboss.axis.Message)request).getMessageContext());
return msg;
// throw new SOAPException(af);
}
catch (java.rmi.RemoteException re)
{
throw new SOAPException(re);
}
}
/**
* routine called whenever an axis fault is caught; where they
* are logged and any other business. The method may modify the fault
* in the process
*
* @param fault what went wrong.
*/
protected void processAxisFault(AxisFault fault)
{
//log the fault
Element runtimeException = fault.lookupFaultDetail(Constants.QNAME_FAULTDETAIL_STACKTRACE);
if (runtimeException != null)
{
//strip runtime details
fault.removeFaultDetail(Constants.QNAME_FAULTDETAIL_STACKTRACE);
}
}
/**
* Stubbed out to allow subclassing
*/
protected Call createCall(Object endpoint) throws MalformedURLException
{
Call call = new Call(endpoint.toString());
return call;
}
/**
* Closes this <CODE>SOAPConnection</CODE> object.
*
* @throws SOAPException if there is a SOAP error
*/
public void close() throws SOAPException
{
if (closed)
{
throw new SOAPException(Messages.getMessage("connectionClosed00"));
}
closed = true;
}
}
| SOAPConnectionImpl.java |