Incorrect resolution of imported schema URLs
--------------------------------------------

                 Key: AXIS2-4451
                 URL: https://issues.apache.org/jira/browse/AXIS2-4451
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: wsdl
    Affects Versions: 1.4.1
            Reporter: dmitry beransky
            Priority: Critical


[see the original email thread here: 
http://www.nabble.com/schema-location-resolution-td24648927.html]

I have several services deployed under Axis2: S1, S1, S3.  Each service 
packages it's own but identical to others copy of enterprise-common.xsd that 
gets imported from each service's specific schema file: [S1.wsdl <-- S1.xsd <-- 
enterprise-common.xsd; S3.wsdl <-- S3.xsd <-- enterprise.common.xsd].

Let's say I next deploy a new service S4 which also has a copy of 
enterprise-common.xsd, but this copy is different from those included with 
other services (it has new element and type definitions).

The location of S4's wsdl is <http://localhost/axis2/services/S4?wsdl>.

When Axis2 serves the WSDL document, it rewrites schemaLocation to be 
'schemaLocation="S4?xsd=S4.xsd"'.  So, S4.xsd's absolute URL becomes
<http://location/axis2/services/S4?xsd=S4.xsd>.

enterprise-common.xsd location inside of S4.xsd is defined as 
'schemaLocation="enterprise-common.xsd"'.  When Axis2 returns S4.xsd
it doesn't rewrite schema's location like it does with the wsdl document, so 
enterprise-common.xsd's absolute URL becomes
<http://localhost/axis2/services/enterprise-common.xsd>.

When Axis2 recieves a request for 
<http://localhost/axis2/services/enterprise-common.xsd>, which now doesn't have 
a service binding in the URL, as far as I can tell, it simply goes through all 
installed .aars looking for one that has the file.  It finds it in the first 
service installed, say for example, S1.  Unfortunately, S1 has the old version 
of enterprise-common.xsd that will against service S4.

Also, consider these three URLs: 

1. http://localhost/axis2/services/enterprise-common.xsd
2. http://localhost/axis2/services/S4/enterprise-common.xsd
3. http://localhost/axis2/services/S4?xsd=enterprise-common.xsd

Only #3 returns the schema that is defined inside of S4.aar (the newest 
version).   #1 & #2 return an older version of enterprise-common.xsd that sits 
in other .aars.  If I undeploy S1, S2, and S3 .aars, then #1 & #2 return the 
latest version from S4.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to