We are in a need to upgrade our SOAP component to use Axis2 1.7.4 which was running using Axis2-1.4.1. We use Axis for our SOAP communication and to compile our WSDL to generate Axis Archive(Shortly, AAR). When we deployed the upgraded SOAP Server in production we started getting mix of responses from our client. Most of our customers were mentioned all-good but few of them came back and asked us to rollback the upgrade.

Those who faced issue were receiving following error at the client side.


org.apache.axis2.AxisFault: The endpoint reference (EPR) for the Operation not found is '' and the WSA Action = null. If this EPR was previously reachable, please contact the server administrator.

It was totally clueless as we know we did not change anything which will have client impact as such. Following are the static list were we had anticipation and appropriate actions were taken already,

  1. We did not change our WSDL, we retained same wsdl’s that our clients are using for all our versions.
  2. We know the generated skeleton code is different, since we have our own custom implementation for types such as List, Map we have made sure that they are compatible with older implementation while returning serialized objects to our API calls.
  3. The API which was used by clients are not modified, hence backward compatibility was ensured.

We also tried to find RCA looking at the request and response for those failed customers. Interestingly, those clients were using SOAP 1.1 style of encoding without SOAPAction and Content-Type set as text/xml. They were all using Python, Ruby, Perl, etc.

After spending lot of time analyzing Axis2 source code for both Axis version, I found following code difference in HTTPTransportUtils.java,

The code which hands SOAP 11 has been modified like below,

Axis2-1.4.1 – HTTPTransportUtils.java:

 if (soapVersion == VERSION_SOAP11) {
     // TODO Keith : Do we need this anymore
     // Deployment configuration parameter
     Parameter enableREST = msgContext
                  .getParameter(Constants.Configuration.ENABLE_REST);
     if ((soapActionHeader == null) && (enableREST != null)) {
         if (Constants.VALUE_TRUE.equals(enableREST.getValue())) {
             // If the content Type is text/xml (BTW which is the
             // SOAP 1.1 Content type ) and the SOAP Action is
             // absent it is rest !!
             msgContext.setDoingREST(true);
         }
      }
 }

Axis-2 1.7.4 HTTPTransportUtils.java:

 if (soapVersion == VERSION_SOAP11) {
     // TODO Keith : Do we need this anymore
     // Deployment configuration parameter
     Parameter disableREST = msgContext
                  .getParameter(Constants.Configuration.DISABLE_REST);
     if (soapActionHeader == null && disableREST != null) {
         if (Constants.VALUE_FALSE.equals(disableREST.getValue())) {
             // If the content Type is text/xml (BTW which is the
             // SOAP 1.1 Content type ) and the SOAP Action is
             // absent it is rest !!
             msgContext.setDoingREST(true);
         }
     }
 }

The above code change in Axis version 1.7.4 and the default configuration (axis2.conf) to enable REST flow. It causes the EPR exception when soap version is not found in request header. I made following configuration change in Axis2.conf from default false to true to make us SOAP Server work for those SOAP 1.1 clients.


<!-- Following parameter will completely disable REST handling in Axis2-->

<parameter name="disableREST" locked="false">true</parameter>

Hope it helped some one !

Leave a Reply

Your email address will not be published.

WP2Social Auto Publish Powered By : XYZScripts.com