You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Simon Laws <si...@googlemail.com> on 2007/04/16 12:11:23 UTC

Loading XSD includes?

I'm having problems getting XSD includes to load in the databinding itest so
am interested to know if we are using a different version of
o.a.ws.common.XmlSchema than used to be the case. I'm getting an NPE in this
package because the baseUri in the XmlSchemaCollection is not set up
correctly. I'm going to dig into why this is the case but if anyone knows
why things have changed or is alos getting this effect I would be interested
to know.

Simon

Re: Loading XSD includes?

Posted by Simon Laws <si...@googlemail.com>.
On 4/16/07, Jean-Sebastien Delfino <js...@apache.org> wrote:
>
> Simon Laws wrote:
> > On 4/16/07, Simon Laws <si...@googlemail.com> wrote:
> >>
> >> I'm having problems getting XSD includes to load in the databinding
> >> itest
> >> so am interested to know if we are using a different version of
> >> o.a.ws.common.XmlSchema than used to be the case. I'm getting an NPE in
> >> this package because the baseUri in the XmlSchemaCollection is not
> >> set up
> >> correctly. I'm going to dig into why this is the case but if anyone
> >> knows
> >> why things have changed or is alos getting this effect I would be
> >> interested
> >> to know.
> >>
> >> Simon
> >>
> >
> > OK, so I have not solved this satisfactorily but I have put in a work
> > around
> > on my machine. I added the following lines to
> > WSDLDocumentProcessor.read()
> > (the two lines I added are the ones with the comment above them).
> >
> >            // Read inline schemas
> >            Types types = definition.getTypes();
> >            if (types != null) {
> >                wsdlDefinition.getInlinedSchemas().setSchemaResolver(new
> > URIResolverImpl());
> >                for (Object ext : types.getExtensibilityElements()) {
> >                    if (ext instanceof Schema) {
> >                        Element element = ((Schema)ext).getElement();
> >
> >                        // TODO: temporary fix to make includes in
> > imported
> >                        //       schema work. The XmlSchema library was
> > crashing
> >                        //       because the base uri was not set. This
> > doesn't
> >                        //       affect imports.
> >                        XmlSchemaCollection schemaCollection =
> > wsdlDefinition.getInlinedSchemas();
> >                        schemaCollection.setBaseUri
> > (((Schema)ext).getDocumentBaseURI());
> >
> >                        wsdlDefinition.getInlinedSchemas().read(element,
> > element.getBaseURI());
> >                    }
> >                }
> >            }
> >
> >
> > The scenario I have is:
> >
> > WSDL <import..---> XSD <inlcude..---> XSD
> >
> > The impact of this change is that the includes are processed BUT they
> are
> > processed relative to the base URI I set up, i.e. the URI of of the WSDL
> > document not the URI of the XML that includes them. I can work round
> this
> > for the time being as all the XSDs are in the same directory (and this
> > lets
> > me get on and work through the rest of the test) but it's not a generic
> > solution. So this needs some more work to either work out how to
> > configure
> > the XmlSchema library properly or take a look at the latest version to
> > see
> > if this apparent problem is fixed.
> >
> > Simon
> >
>
> Simon, what you've done looks like the right fix to me as an XSD include
> from an XML schema inlined in a WSDL document should be loaded relative
> to the WSDL document.
>
> --
> Jean-Sebastien
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: tuscany-dev-help@ws.apache.org
>
> it works fine for XSDs include from the WSDL but I don't think it's
correct for an XSD included in an XML schema which is itself
included/imported into the inline XML schema of a WSDL, i.e. nested
includes. The reasone I am concerned is that the databinding schema don;t
now work in the way that they used to. I've not had a chance to chase the
documentation to find out what the correct behaviour is but I think the old
behaviour was correct.

When I say old behaviour here what I mean is that includes are assumed to be
relative to the file that is including them and not relative to some parent
of that file.

Simon

Re: Loading XSD includes?

Posted by Jean-Sebastien Delfino <js...@apache.org>.
Simon Laws wrote:
> On 4/16/07, Simon Laws <si...@googlemail.com> wrote:
>>
>> I'm having problems getting XSD includes to load in the databinding 
>> itest
>> so am interested to know if we are using a different version of
>> o.a.ws.common.XmlSchema than used to be the case. I'm getting an NPE in
>> this package because the baseUri in the XmlSchemaCollection is not 
>> set up
>> correctly. I'm going to dig into why this is the case but if anyone 
>> knows
>> why things have changed or is alos getting this effect I would be 
>> interested
>> to know.
>>
>> Simon
>>
>
> OK, so I have not solved this satisfactorily but I have put in a work 
> around
> on my machine. I added the following lines to 
> WSDLDocumentProcessor.read()
> (the two lines I added are the ones with the comment above them).
>
>            // Read inline schemas
>            Types types = definition.getTypes();
>            if (types != null) {
>                wsdlDefinition.getInlinedSchemas().setSchemaResolver(new
> URIResolverImpl());
>                for (Object ext : types.getExtensibilityElements()) {
>                    if (ext instanceof Schema) {
>                        Element element = ((Schema)ext).getElement();
>
>                        // TODO: temporary fix to make includes in 
> imported
>                        //       schema work. The XmlSchema library was
> crashing
>                        //       because the base uri was not set. This
> doesn't
>                        //       affect imports.
>                        XmlSchemaCollection schemaCollection =
> wsdlDefinition.getInlinedSchemas();
>                        schemaCollection.setBaseUri
> (((Schema)ext).getDocumentBaseURI());
>
>                        wsdlDefinition.getInlinedSchemas().read(element,
> element.getBaseURI());
>                    }
>                }
>            }
>
>
> The scenario I have is:
>
> WSDL <import..---> XSD <inlcude..---> XSD
>
> The impact of this change is that the includes are processed BUT they are
> processed relative to the base URI I set up, i.e. the URI of of the WSDL
> document not the URI of the XML that includes them. I can work round this
> for the time being as all the XSDs are in the same directory (and this 
> lets
> me get on and work through the rest of the test) but it's not a generic
> solution. So this needs some more work to either work out how to 
> configure
> the XmlSchema library properly or take a look at the latest version to 
> see
> if this apparent problem is fixed.
>
> Simon
>

Simon, what you've done looks like the right fix to me as an XSD include 
from an XML schema inlined in a WSDL document should be loaded relative 
to the WSDL document.

-- 
Jean-Sebastien


---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org


Re: Loading XSD includes?

Posted by Simon Laws <si...@googlemail.com>.
On 4/16/07, Simon Laws <si...@googlemail.com> wrote:
>
> I'm having problems getting XSD includes to load in the databinding itest
> so am interested to know if we are using a different version of
> o.a.ws.common.XmlSchema than used to be the case. I'm getting an NPE in
> this package because the baseUri in the XmlSchemaCollection is not set up
> correctly. I'm going to dig into why this is the case but if anyone knows
> why things have changed or is alos getting this effect I would be interested
> to know.
>
> Simon
>

OK, so I have not solved this satisfactorily but I have put in a work around
on my machine. I added the following lines to WSDLDocumentProcessor.read()
(the two lines I added are the ones with the comment above them).

            // Read inline schemas
            Types types = definition.getTypes();
            if (types != null) {
                wsdlDefinition.getInlinedSchemas().setSchemaResolver(new
URIResolverImpl());
                for (Object ext : types.getExtensibilityElements()) {
                    if (ext instanceof Schema) {
                        Element element = ((Schema)ext).getElement();

                        // TODO: temporary fix to make includes in imported
                        //       schema work. The XmlSchema library was
crashing
                        //       because the base uri was not set. This
doesn't
                        //       affect imports.
                        XmlSchemaCollection schemaCollection =
wsdlDefinition.getInlinedSchemas();
                        schemaCollection.setBaseUri
(((Schema)ext).getDocumentBaseURI());

                        wsdlDefinition.getInlinedSchemas().read(element,
element.getBaseURI());
                    }
                }
            }


The scenario I have is:

WSDL <import..---> XSD <inlcude..---> XSD

The impact of this change is that the includes are processed BUT they are
processed relative to the base URI I set up, i.e. the URI of of the WSDL
document not the URI of the XML that includes them. I can work round this
for the time being as all the XSDs are in the same directory (and this lets
me get on and work through the rest of the test) but it's not a generic
solution. So this needs some more work to either work out how to configure
the XmlSchema library properly or take a look at the latest version to see
if this apparent problem is fixed.

Simon