your package
import java.net.URL;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPMessage;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
import org.apache.axis.transport.http.HTTPSender;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author olamy
 * @version $Id: HTTPTransporter.java,v 1.3 2003/10/31 17:44:51 olamy Exp $
 * Created on 21 oct. 2003
 */
public class HTTPTransporter extends HTTPSender {
	private final static transient Log log =  LogFactory.getLog(HTTPTransporter.class);
	
	/** constante représentant le class factory de message SOAP implémentation de saaj 
	implémentation de sun avec dom4j :com.sun.xml.messaging.saaj.soap.MessageFactoryImpl
	implémentation de apache avec Axis/Xerces : org.apache.axis.soap.MessageFactoryImpl
	on oublie celle de sun car pb de cast
	*/
	//the sun implementation doesn't work
	//public static final String SOAP_FACTORY_IMPL = "com.sun.xml.messaging.saaj.soap.MessageFactoryImpl";
	public static final String SOAP_FACTORY_IMPL = "org.apache.axis.soap.MessageFactoryImpl";	
	//public static final String SOAP_FACTORY_IMPL = "com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl";
	/** champs static message factory */
	private static MessageFactory messageFactory;	
	/** constante mode http avec axis voir xsd */
	public static final String AXIS_MODE = "AXIS";
	/** constante mode http avec http client  voir xsd */
	public static final String HTTP_CLIENT_MODE = "HTTPCLIENT";	
	/** valeur du header http content type */
	public static final String HEADER_CONTENT_TYPE_VALUE = "text/xml; charset=utf-8";
	/** le mode http */
	private static String httpmode;
	// init en static 
	static {
		final String tmp = EnterpriseContext.getHttpmode();
		if ( null == tmp ) {
			//si null on met axis
			httpmode = AXIS_MODE;
		} else {
			httpmode = tmp;
		}
		log.info("httpmode init avec valeur : " + httpmode);
		try {
			log.info("init de javax.xml.soap.MessageFactory avec : " + SOAP_FACTORY_IMPL);
			java.lang.Class ClassCreate = Class.forName(SOAP_FACTORY_IMPL);
			messageFactory = (javax.xml.soap.MessageFactory)ClassCreate.newInstance();
		} catch (Exception e) {
			log.fatal("erreur get the MessageFactory", e);
		}		
	}	
	
	/**
	 * empty constructeur
	 */
	public HTTPTransporter() {
		super();
	}
	/**
	 * @see org.apache.axis.Handler#invoke(org.apache.axis.MessageContext)
	 */
	public void invoke(MessageContext msgCtx) throws AxisFault {
		log.debug("in invoke");
		msgCtx.setTimeout(EnterpriseContext.getTimeOut());
		if (log.isTraceEnabled()) {
			log.trace("soap part send");
			log.trace(msgCtx.getRequestMessage().getSOAPPartAsString());
			log.trace("destination : " + msgCtx.getStrProp(MessageContext.TRANS_URL));
			log.trace("getContentLength : " + msgCtx.getRequestMessage().getContentLength());
		}
		super.setOption(MessageContext.HTTP_TRANSPORT_VERSION, HTTPConstants.HEADER_PROTOCOL_11);
		if (httpmode.equalsIgnoreCase(AXIS_MODE)) {
			super.invoke(msgCtx);
		} else if (httpmode.equalsIgnoreCase(HTTP_CLIENT_MODE)) {
			this.invokeMsg(msgCtx);
		} else {
			log.fatal("mauvaise config de httpmode : " + httpmode);
			throw new AxisFault("");
		}
		
		if (log.isTraceEnabled()) {
			log.trace("soap part received");
			log.trace(msgCtx.getResponseMessage().getSOAPPartAsString());
		}
	}
	
	/**
	 * @param msgCtx
	 */
	private void invokeMsg(MessageContext msgCtx ) {
		try {
			final HostConfiguration hc = new HostConfiguration();
			URL url = null;
			
				url = new URL(msgCtx.getStrProp(MessageContext.TRANS_URL));
	
			if (log.isTraceEnabled()) {
				log.trace("url tc");
				log.trace("host = " + url.getHost());
				log.trace("port = " + url.getPort());
				log.trace("path = " + url.getPath());
			}
			hc.setHost(url.getHost(), url.getPort());
			HttpClient httpClient = new HttpClient();
			
			httpClient.setConnectionTimeout(EnterpriseContext.getTimeOut());
			httpClient.setTimeout(EnterpriseContext.getTimeOut());
			
			httpClient.setHostConfiguration(hc);
			PostMethod theHTTPMethod = new PostMethod();
			theHTTPMethod.setRequestHeader(HTTPConstants.HEADER_CONTENT_TYPE, HEADER_CONTENT_TYPE_VALUE);
			theHTTPMethod.setRequestHeader(HTTPConstants.HEADER_SOAP_ACTION, "");
			StringBuffer headerAccept = new StringBuffer(HTTPConstants.HEADER_ACCEPT_APPL_SOAP);
			headerAccept.append(", ").append(HTTPConstants.HEADER_ACCEPT_APPLICATION_DIME);
			headerAccept.append(", ").append(HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED);
			headerAccept.append(", ").append(HTTPConstants.HEADER_ACCEPT_TEXT_ALL);
			theHTTPMethod.setRequestHeader(HTTPConstants.HEADER_ACCEPT, headerAccept.toString());
			theHTTPMethod.setRequestHeader(HTTPConstants.HEADER_CACHE_CONTROL, HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE);
			theHTTPMethod.setRequestHeader(HTTPConstants.HEADER_PRAGMA, HTTPConstants.HEADER_CACHE_CONTROL_NOCACHE);
			//theHTTPMethod.
			theHTTPMethod.setPath(url.getPath());
			//doesn't work ?? with true
			theHTTPMethod.setHttp11(false);
			theHTTPMethod.setRequestBody(msgCtx.getRequestMessage().getSOAPPartAsString());
			httpClient.executeMethod(theHTTPMethod);
			SOAPMessage response = getMsgFromResponse(theHTTPMethod);
			msgCtx.setPastPivot(true);
			msgCtx.setMessage((SOAPMessage)response);
		} catch (Exception e) {
			log.error(e);
		}		
	}
	
	/**
	 * transformation en message soap
	 * @param pm
	 * @return SOAPMessage
	 */
	private final SOAPMessage getMsgFromResponse(PostMethod pm) {
		if (messageFactory == null) {
				initMessageFactory();
		} 		
		MimeHeaders mh = new MimeHeaders();
		Header[] tab = pm.getRequestHeaders(); 
		int size = tab.length;
		for ( int cpt = 0 ; cpt < size ; cpt++ ) {
			Header he = tab[cpt];
			mh.addHeader(he.getName(), he.getValue());
		}
		try  {
			SOAPMessage message = (SOAPMessage)messageFactory.createMessage(mh, pm.getResponseBodyAsStream());
			return message;
		} catch (Exception e) {
			log.error("error during createMessage", e);
			return null;
		}
		
	}

	/**
	 * Method intitMessageFactory. initialisation du champs static de factory de message
	 */
	private final void initMessageFactory() {
		if (messageFactory == null ) {
			synchronized (HTTPTransporter.class) {
				if (messageFactory == null ) {
					try {
						log.info("init de javax.xml.soap.MessageFactory avec : " + SOAP_FACTORY_IMPL);
						java.lang.Class ClassCreate = Class.forName(SOAP_FACTORY_IMPL);
						messageFactory = (javax.xml.soap.MessageFactory)ClassCreate.newInstance();
					} catch (Exception e) {
						log.fatal("erreur get the MessageFactory", e);
					}
				}
			}
		}	
	}
}
