[ 
https://issues.apache.org/jira/browse/AXIS2-5732?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14987174#comment-14987174
 ] 

Detelin Yordanov commented on AXIS2-5732:
-----------------------------------------

The issue requires fix in wsdl4j as well as in Axis2. I created a patch for the 
mentioned wsdl4j bug by using the source already provided by the reporter and 
also added a couple of unit tests. I'm unable to attach the patch in wsdl4j 
jira, probably it is already closed, therefore I'm attaching it here 
(wsdl4j.patch). The patched wsdl4j version would ensure the binding's port type 
is correctly populated. After adopting this wsdl4j version, Axis2 should drop 
its recursive search for the port type (which in this case results in the 
'undefined' port type found in the bindings.wsdl) and rely on wsdl4j to 
correctly set it on the binding.

I was hesitant to change Axis2 wsdl parsing not to search for the port type 
recursively, so I examined the history behind this approach in attempt to 
identify the use cases for which it was added. I have found the following 
checkins in Axis2 which introduced and improved this search over the years:

1. Long time ago, WSDL4JImportedWSDLHelper was introduced in Axis2, which aimed 
to process the imports and find out the concrete definition where each element 
is defined, then copy/merge it in the top-most definition:
https://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/wsdl/util/WSDL4JImportedWSDLHelper.java?revision=552171&view=markup&pathrev=590599

2. Later Amila discovered that this breaks the "useOriginalWsdl" support and 
improved that NOT to copy/merge elements, but to identify source definition for 
each element:
https://svn.apache.org/viewvc?view=revision&revision=552753

3. Further on (7 years ago), this was improved and generalized:
https://svn.apache.org/viewvc?view=revision&revision=590599

But still, I have no clue why this is necessary. I checked other web service 
engines (CXF) and they seem to rely in wsdl4j to properly parse the wsdl. From 
my perspective this is the way to go, since wsdl4j is responsible for doing 
exactly that. 
At the end, I prepared a fix for Axis2 that will drop the recursive search only 
for the port type but retain that for the binding. I'm attaching axis2.patch 
(done against Axis2 1.6.3), which also contains a test case for this issue.
Both the wsdl4j and axis2 patch should resolve this problem and hopefully not 
cause any regressions.

> WSDL11ToAxisServiceBuilder fails to determine the MEP when wsdl bindings are 
> defined in an imported document
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-5732
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5732
>             Project: Axis2
>          Issue Type: Bug
>          Components: kernel, wsdl
>    Affects Versions: 1.6.3
>            Reporter: Detelin Yordanov
>         Attachments: EchoService.aar, stacktrace.txt
>
>
> When deploying a web service archive with 'useOriginalwsdl=true' and a wsdl 
> which imports the bindings from another document, the 
> WSDL11ToAxisServiceBuilder fails with "Cannot Determine the MEP" exception.
> The issue seems to be caused by wsdl4j which does not properly populate 
> binding's port type operations, this is reported in wsdl4j jira:
> https://sourceforge.net/p/wsdl4j/bugs/39/
> Additionally, since Axis2 will do a depth-first search in imported wsdls to 
> find the port type, it will not use the port type in the parent wsdl, but the 
> unpopulated/undefined port type in the bindings' wsdl. 
> I'm providing an 'EchoService.aar' that demonstrates the issue - please raise 
> Axis2 log level to DEBUG to see the exception.



--
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