cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Jones <peter.jo...@iona.com>
Subject Re: Possible WSDL/Schema multiple import bug
Date Sun, 05 Nov 2006 15:35:26 GMT

Hi there,

There is still an issue here.  If you import a relative file, and then that
file imports another file with a path relative to the import (in a
different directory) then this imported file isn't resolved correctly.

I've worked around this problem in my tree in XmlSchemaURIResolver by
resetting the schemaLocation:

    if (resolver.isResolved()) {
        if (resolver.isFile()) {
            // When importing a relative file,
            // setSystemId with an absolute path so the
            // resolver finds any files which that file
            // imports with locations relative to it.
            URI resolved = resolver.getURI();
            schemaLocation = resolved.toString();
        }
        InputSource source = new InputSource(resolver.getInputStream());
        source.setSystemId(schemaLocation);
        return source;
    }

So, when the resolver is called to resolve the second import, the baseUri
passed in is an absolute path instead of a relative path, which allows the
resolver to find the second file.

Cheers,
Peter

On Sun, Nov 05, 2006 at 02:19:32PM +0800, James Mao wrote:
> I thought Tom already fix this problem last Friday.
> And i think the better solution is to report a bug to ws-common , not in 
> cxf.
> But anyway, tom already fix that.
> 
> 
> Dan Diephouse 写道:
> > Michael - did this ever get resolved? If not, can you create a JIRA 
> > issue so we make sure it doesn't get lost?
> >
> > - Dan
> >
> > Michael Bricout wrote:
> >
> >> Hi,
> >>
> >> 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.
> >>
> >> In A.wsdl:
> >> <xsd:import namespace="http://foo" schemaLocation="./B.xsd"/>
> >>
> >> In 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:
> >>
> >> java.lang.RuntimeException: 
> >> org.apache.ws.commons.schema.XmlSchemaException:
> >> /[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 simplified my test case a bit in an effort to isolate the issue, but
> >> I get the same problem when using relative URIs to import schemas
> >> from different directories.
> >>
> >>
> >> Should I file a bug report for this, or am I doing something wrong ?
> >>
> >> This use case was working before the switch from XmlSchema 1.0.2 to 1.1
> >>
> >> Best regards,
> >> Michael

-- 
Peter Jones
IONA Technologies Inc.
E-Mail: mailto:peter.jones@iona.com
Tel: (w) 709-738-3725 x22 | Fax: 709-738-3745
84-86 Elizabeth Ave. St. John's, NL A1A 1W7 Canada

Mime
View raw message