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