[
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