Affects Version/s: 2.0-M1
Fix Version/s: 2.0-M1
I have a test case that uses a set of WSDLs and schemas with multiple imports using relative URIs.
ie: A.wsdl imports B.xsd that imports C.xsd, all are located in the same directory.
<xsd:import namespace="http://foo" schemaLocation="./B.xsd"/>
<xsd:import namespace="http://foo/bar" schemaLocation="./C.xsd"/>
Code generation works fine, however I have a problem at runtime where the server fails to initialize with the following exception:
/[my project path]/C.xsd (No such file or directory)
The problem is that the URI for importing C.xsd is incorrectly determined.
In the example above, C.xsd would actually be located in
/[my project path]/target/test/wsdl/C.xsd
I see the following behavior in org.apache.cxf.resource.URIResolver:
For A imports B, we create a URIResolver with the following parameters:
baseUriStr = "file:[path to A]/A.wsdl" (correct)
uriStr = "./B.xsd"
Then tryFileSystem(baseUriStr, uriStr) is invoked and B.xsd is correctly resolved.
Now for B import C, we create a URIResolver with the following parameters:
baseUriStr = "./B.xsd"
uriStr = "./C.xsd"
The value for the base URI being set to a relative path, we fail to resolve C.xsd.
tryFileSystem ends up calling tryClasspath("./C.xsd"), which in turn calls tryRemote(), which aborts on a MalformedURLException.
I get the same problem when using relative URIs to import schemas from different directories.