Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-5672

Addressing Action attributes are parsed incorrectly when deploying service from WSDL

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.6.2
    • nightly
    • Addressing, kernel
    • None

    Description

      When creating a web service out of a WSDL which contains WS-Addressing Action attributes with format <prefix>:<value>, Axis2 will strip the "<prefix>:" part if the WSDL document contains a namespace declaration for <prefix> on some of the parent elements. For example, if the definition element contains the following namespace declaration:

      xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

      And operation's input contains a wsaw:Action that starts with "http:":

      <wsdl:input message="ns:getVersionRequest" wsam:Action="http://axisversion.sample/VersionPortType/getVersionWSAMRequest"/>

      Then the result would be that the input AxisMessage is configured with an incorrect Action value of "//axisversion.sample/VersionPortType/getVersionWSAMRequest".

      I'm attaching a patch that contains a test case to verify this behavior - please see WSDL11ToAxisServiceBuilderTest.testGetVersionActions() method.

      I investigated the issue and I think this is caused by WSDL4J assuming wsaw:Action attribute's value is of QName type and thus tries to parse it as such, expecting that it might have a namespace prefix. I think this is wrong and WSDL4J has to be configured to process wsaw:Action values as simple literals rather than QNames. I have added a utility method for that, see:

      WSDLUtil.registerDefaultExtensionAttributeTypes

      This will register all WS-Addressing Action attribute flavors (for each known namespace) in WSDL ExtensionRegistry to be of String type. For this to work, the so configured ExtensionRegistry must be used whenever a WSDLReader is created, therefore I added an additional utility method to be used for creating WSDLReader instances:

      WSDLUtil.newWSDLReaderWithPopulatedExtensionRegistry

      I have replaced the regular WSDLFactory.newWSDLReader calls throughout Axis2 codebase with this new factory method.
      While doing this, I noticed that in the past this issue might have been identified and fixed in Axis2 CodeGenerationEngine alone:

      https://svn.apache.org/viewvc?view=revision&revision=1003032

      The attached patch is basically similar, but it would fix all other places in Axis2 code where WSDLReader instance is created.

      Attachments

        1. axis2_patch.txt
          66 kB
          Detelin Yordanov
        2. axis2_patch.txt
          66 kB
          Detelin Yordanov

        Issue Links

          Activity

            People

              Unassigned Unassigned
              detyo Detelin Yordanov
              Votes:
              4 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: