Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] MalformedURLException in sdo-compiler

That is to say how do I do this using the command sdo-compiler.sh?

Also why does the else below (and that in the default one) use new URL
when surely it should use new URI?

David

On Wednesday 09 July 2008, David Goodenough wrote:
> How do I use this in the sdo-compiler?
>
> David
>
> On Wednesday 09 July 2008, David McCann wrote:
> > Hey David,
> >
> > To handle this scenario you will need to implement a SchemaResolver
> > (org.eclipse.persistence.sdo.helper package) that can load the doc based
> > on the relative path.  To do this, you can simply extend the default
> > resolver we provide
> > (org.eclipse.persistence.sdo.helper.DefaultSchemaResolver) and override
> > the resolveSchema(Source, String, String) method to handle this case.
> > Note that the schema resolver is passed in as a parameter in the define
> > method on the delegator.
> >
> > Here's an example of a custom resolver:
> >
> >     public class CyclicSchemaResolver extends DefaultSchemaResolver {
> >         public Source resolveSchema(Source sourceXSD, String namespace,
> >     String schemaLocation) {
> >             if (schemaLocation != null && !schemaLocation.equals("")) {
> >                 return super.resolveSchema(sourceXSD, namespace,
> >     schemaLocation);
> >             }
> >             schemaLocation = namespace.equals("uri") ? "Cyclic1.xsd" :
> >     "Cyclic2.xsd";
> >             URL schemaUrl = null;
> >             try {
> >                 if (getBaseSchemaLocation() != null) {
> >                     // Attempt to resolve the schema location against
> >     the base location
> >                     URI baseUri = new URI(getBaseSchemaLocation());
> >                     URI resolvedUri = baseUri.resolve(schemaLocation);
> >                     schemaUrl = resolvedUri.toURL();
> >                 } else {
> >                     schemaUrl = new URL(schemaLocation);
> >                 }
> >             } catch (Exception e) {
> >                 return null;
> >             }
> >             return new StreamSource(schemaUrl.toExternalForm());
> >         }
> >     }
> >
> > Please let me know if you have any questions.
> >
> > --Dave
> > ------------------------------------------------------------------------
> >
> > David Goodenough wrote:
> > > I am trying to run the sdo-compiler against some of the OASIS xsd files
> > > but when I try I get a MalformedURLException when resolving schemas.
> > >
> > > This is using 1.0M11.
> > >
> > > The first exception I get is:-
> > >
> > > [EL Warning]: 2008.07.09 11:41:48.932--Thread(Thread[main,5,main])--An
> > > java.net.MalformedURLException occurred processing referenced schema
> > > with uri
> > > urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-
> > >2 with schemaLocation ../common/UBL-CommonAggregateComponents-2.0.xsd.
> > > [EL Finest]: 2008.07.09
> > > 11:41:48.947--Thread(Thread[main,5,main])--java.net.MalformedURLExcepti
> > >on
> > >
> > >: no protocol: ../common/UBL-CommonAggregateComponents-2.0.xsd
> > >
> > >         at java.net.URL.<init>(URL.java:567)
> > >         at java.net.URL.<init>(URL.java:464)
> > >         at java.net.URL.<init>(URL.java:413)
> > >         at
> > > org.eclipse.persistence.sdo.helper.DefaultSchemaResolver.resolveSchema(
> > >De faultSchemaResolver.java:55) at
> > > org.eclipse.persistence.sdo.helper.SchemaResolverWrapper.resolveSchema(
> > >Sc hemaResolverWrapper.java:61) at
> > > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getReferencedSchem
> > >a( SDOTypesGenerator.java:2056) at
> > > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypes
> > >Ge nerator.java:2025) at
> > > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypes
> > >Ge nerator.java:1999) at
> > > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.define(SDOTypesGen
> > >er ator.java:108) at
> > > org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOClassG
> > >en erator.java:209) at
> > > org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOClassG
> > >en erator.java:175) at
> > > org.eclipse.persistence.sdo.helper.SDOClassGenerator.main(SDOClassGener
> > >at or.java:111)
> > >
> > > Looking at the relevant line in the xsd file, it starts:-
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <!--
> > >   Document Type:     Invoice
> > >   Generated On:      Tue Oct 03 2:26:38 P3 2006
> > >
> > > -->
> > > <!-- ===== xsd:schema Element With Namespaces Declarations ===== -->
> > > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> > >
> > > targetNamespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2
> > >" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
> > >
> > > xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregate
> > >Co mponents-2"
> > >
> > > xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComp
> > >on ents-2"
> > >
> > > xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataType
> > >sS chemaModule:2" xmlns:ccts="urn:un:unece:uncefact:documentation:2"
> > >
> > > xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtension
> > >Co mponents-2"
> > >
> > > xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataty
> > >pe s-2" elementFormDefault="qualified"
> > >     attributeFormDefault="unqualified"
> > >     version="2.0">
> > > <!-- ===== Imports ===== -->
> > >   <xsd:import
> > > namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregate
> > >Co mponents-2"
> > > schemaLocation="../common/UBL-CommonAggregateComponents-2.0.xsd"/>
> > >
> > > and I think it is complaining about schemaLocation.
> > >
> > > I guess this is because of the lack of a protocol.
> > >
> > > I am using Sun Java 6 on linux, using its default XML code.
> > >
> > > Perhaps the code in DefaultSchemaResolver needs to trap this exception
> > > and try adding file:/// to the front of the URL.  I do not know whether
> > > this is really a fault with the OASIS xsd file but they have been in
> > > the field for a while and I am sure of XML parsers generally objected
> > > to this it would have been picked up as a problem.
> > >
> > > In fact looking at the code, should DefaultSchemaResolver.java line 55
> > > which currently reads:-
> > >
> > >                 schemaUrl = new URL(schemaLocation);
> > >
> > > read instead:-
> > >
> > > 		schemaUrl = new URI(schemaLocation).toUrl();
> > >
> > > as the javadoc for URI says that it can handle this kind of
> > > specification without a protocol.
> > >
> > > David
> > > _______________________________________________
> > > eclipselink-users mailing list
> > > eclipselink-users@xxxxxxxxxxx
> > > https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users




Back to the top