Detelin Yordanov created AXIS2-5672:
---------------------------------------

             Summary: Addressing Action attributes are parsed incorrectly when 
deploying service from WSDL
                 Key: AXIS2-5672
                 URL: https://issues.apache.org/jira/browse/AXIS2-5672
             Project: Axis2
          Issue Type: Bug
          Components: Addressing, kernel
    Affects Versions: 1.6.2
            Reporter: Detelin Yordanov


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 document contains a namespace declaration for <prefix> on some of the 
parent element. 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 also 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 Extension registry 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.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to