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

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.MalformedURLException
> >: 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.getReferencedSchema(
> >SDOTypesGenerator.java:2056) at
> > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypesGe
> >nerator.java:2025) at
> > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypesGe
> >nerator.java:1999) at
> > org.eclipse.persistence.sdo.helper.SDOTypesGenerator.define(SDOTypesGener
> >ator.java:108) at
> > org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOClassGen
> >erator.java:209) at
> > org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOClassGen
> >erator.java:175) at
> > org.eclipse.persistence.sdo.helper.SDOClassGenerator.main(SDOClassGenerat
> >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:CommonAggregateCo
> >mponents-2"
> >
> > xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicCompon
> >ents-2"
> >
> > xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesS
> >chemaModule:2" xmlns:ccts="urn:un:unece:uncefact:documentation:2"
> >
> > xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionCo
> >mponents-2"
> >
> > xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatype
> >s-2" elementFormDefault="qualified"
> >     attributeFormDefault="unqualified"
> >     version="2.0">
> > <!-- ===== Imports ===== -->
> >   <xsd:import
> > namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateCo
> >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




Back to the top