Why does a trivial SAAJ client which imports only javax.xml.soap.* work 
correctly with Sun's JAX-WS 2.1 libraries in the classpath, but fail when I 
substitute either the Axis2 1.3 or Axis2 1.4 libraries?  The client app is 
constructing the SOAPAction and Authorization mime headers itself, then using 
SOAPConnection.call to send the message:

        SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
        SOAPBody body = soapEnvelope.getBody();
        SOAPBodyElement operation = body.addBodyElement
                (soapEnvelope.createName( requestName, nsPrefix, nsURI ));

        // Basic Authorization header
        String authorization = new 
sun.misc.BASE64Encoder().encode((userId+":"+pwd).getBytes());
        MimeHeaders hd = soapMessage.getMimeHeaders();
        hd.addHeader( "Authorization", "Basic " + authorization);

        // SOAPAction header
        hd.addHeader( "SOAPAction", soapAction );

        SOAPMessage response = null;

        try
        {
           response = conn.call( request, endpointURL );
        }
        catch( Exception e )
        {
           System.out.println( "Got exception " + e.toString() );
        }

With Sun JAX-WS 2.1, the application works fine.

With Axis2 1.3, I get exception javax.xml.soap.SOAPException: 
org.apache.axis2.deployment.DeploymentException: 
org/apache/commons/httpclient/HttpException
With Axis2 1.4, I get exception javax.xml.soap.SOAPException: Transport error: 
401 Error: Unauthorized

Searching the Axis user archives reveals that Axis has had issues in this area 
since Axis 1.0 rc1.  I found bug 14636 for that release "SOAPAction MimeHeader 
set via SAAJ not passed on".  I found another bug against Axis 1.2, number 
1545. This time Axis was generating TWO soapaction headers!  Now Axis is back 
to generating zero headers.

Reply via email to