Just in case anybody still uses Apache Soap, here are my migration experiences from Soap to Axis:

----- Forwarded by Johannes Fiala/Johannes Fiala on 02.05.2003 09:34 -----
"Johannes Fiala" <soap@fwd.at>

23.03.2003 11:10
Please respond to
soap-user@ws.apache.org

To
"'soap-user@xml.apache.org'" <soap-user@xml.apache.org>
cc
Subject
From Apache Soap 2.3.1 to Apache Axis 1.1






Hi there,


Just in case anybody else is finally making the move to Apache 1.1 (RC2 is a good candidate!), here are some facts on it:


Migrating to Apache Axis from Apache Soap 2.3.1 turned out to be quite easy.

Here are the most important things I ran into while exchanging my Apache Soap routines with Apache Axis calls:


*) Apache Axis doesn't return a generic Parameter datatype.
You can set the type you get returned (e.g. a String or a Bean)


*) Interoperability:

It seems Apache Soap Client Interface has no trouble calling an Apache Axis interface and vice versa.

I only ran into troubles with BeanSerializers, but I didn't check that in more detail. I think that was an configuration issue.

However Axis Client to Axis Server BeanSerializers work as expected, even with complex configurations with deeply cascaded beans.


*) Calling Soap Backends - a comparison

Apache Soap 2.3.1 Apache Axis 1.1
    Call call = new Call();

   call.setTargetObjectURI(service);

   call.setMethodName(methodname);


   call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);


   // prepare parameters

   Vector params = new Vector();

   params.addElement(new Parameter("command", String.class, command, Constants.NS_URI_SOAP_ENC));

   params.addElement(new Parameter("portalUserId", String.class, portalUserId, Constants.NS_URI_SOAP_ENC));


   params.addElement(new Parameter("vorname", String.class, vorname, Constants.NS_URI_SOAP_ENC));

   params.addElement(new Parameter("nachname", String.class, nachname, Constants.NS_URI_SOAP_ENC));

   params.addElement(new Parameter("geburtsDatum", java.util.Date.class, geburtsDatum, Constants.NS_URI_SOAP_ENC));

   call.setParams(params);


   // Invoke the call.

   Response resp;

   try

   {

     resp = call.invoke(url, "");

   }


   catch (SOAPException exception)

   {

     logger.error("Caught SOAPException (" +

                        exception.getFaultCode() + "): " +

                        exception.getMessage());

     return(null);

   }
Service  service = new Service();
   Call     call    = (Call) service.createCall();


   call.setTargetEndpointAddress( url );

   call.setOperationName( new QName(servicename, methodname) );


           call.addParameter( "command", XMLType.XSD_STRING, ParameterMode.IN);

           call.addParameter( "portalUserId", XMLType.XSD_STRING, ParameterMode.IN);

           call.addParameter( "vorname", XMLType.XSD_STRING, ParameterMode.IN);

           call.addParameter( "nachname", XMLType.XSD_STRING, ParameterMode.IN);

           call.addParameter( "geburtsDatum", XMLType.XSD_DATETIME, ParameterMode.IN);


           call.setReturnType( XMLType.XSD_STRING );


           result = (String) call.invoke( new Object[] { command, portalUserId, vorname, nachname, geburtsDatum } );

   



The server side:

Apache Axis doesn't need the SoapContext parameter if you need some info about the context. You can turn to a MessageContext instead.
Apache Soap 2.3.1 Apache Axis 1.1
public myfunction (SOAPContext ctx, ...)

HttpServlet servlet = (HttpServlet)ctx.getProperty(Constants.BAG_HTTPSERVLET);

ServletContext context = servlet.getServletContext();
MessageContext mycontext = MessageContext.getCurrentContext();
         HttpServlet servlet = (HttpServlet)mycontext.getProperty(HTTPConstants.MC_HTTP_SERVLET);

       ServletContext context = servlet.getServletContext();



Best regards,

Johannes