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

What are you setting as your base location?  Also, you may want to forward me the schemas you are trying to load.

--Dave

David Goodenough wrote:
Any thoughts on how to get around this problem?

David

On Wednesday 09 July 2008, David Goodenough wrote:
  
Well we get a bit further, I now get:-

Local Exception Stack:
Exception [EclipseLink-25004] (Eclipse Persistence Services - 1.0 (Build
1.0 - 20080707)): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred unmarshalling the document
Internal Exception: java.net.UnknownHostException: ..
        at
org.eclipse.persistence.exceptions.XMLMarshalException.unmarshalException(X
MLMarshalException.java:91) at
org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUn
marshaller.java:550) at
org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUn
marshaller.java:458) at
org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:
447) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypesGene
rator.java:2018) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypesGene
rator.java:2027) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTypesGene
rator.java:1999) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.define(SDOTypesGenerat
or.java:108) at
org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOClassGener
ator.java:209) at
org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOClassGener
ator.java:175) at
uk.co.linkchoose.eclipselink.sdoCompiler.CustomClassGenerator.<init>(Custom
ClassGenerator.java:21) at
uk.co.linkchoose.eclipselink.sdoCompiler.CustomClassGenerator.main(CustomCl
assGenerator.java:48) Caused by: java.net.UnknownHostException: ..
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
        at java.net.Socket.connect(Socket.java:519)
        at java.net.Socket.connect(Socket.java:469)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
        at sun.net.NetworkClient.openServer(NetworkClient.java:118)
        at sun.net.ftp.FtpClient.openServer(FtpClient.java:488)
        at sun.net.ftp.FtpClient.openServer(FtpClient.java:475)
        at
sun.net.www.protocol.ftp.FtpURLConnection.connect(FtpURLConnection.java:270
) at
sun.net.www.protocol.ftp.FtpURLConnection.getInputStream(FtpURLConnection.j
ava:352) at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity
(XMLEntityManager.java:653) at
com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVers
ion(XMLVersionDetector.java:186) at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Co
nfiguration.java:771) at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Co
nfiguration.java:737) at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:1
07) at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Abstract
SAXParser.java:1132) at
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(S
AXParserImpl.java:533) at
org.eclipse.persistence.internal.oxm.record.XMLReader.parse(XMLReader.java:
103) at
org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUn
marshaller.java:544) ... 10 more

lots of times.

David

On Wednesday 09 July 2008, David McCann wrote:
    
Please let me know if my workaround suggestion helped.  I am looking
into your issue regarding our default resolver now, and will update the
bug shortly.

--dave

------------------------------------------------------------------------

David Goodenough wrote:
      
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:CommonAggregateComponen
ts - 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.MalformedURLExce
pt i 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.resolveSche
ma ( De faultSchemaResolver.java:55) at
org.eclipse.persistence.sdo.helper.SchemaResolverWrapper.resolveSche
ma ( Sc hemaResolverWrapper.java:61) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getReferencedSc
he m a( SDOTypesGenerator.java:2056) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTy
pe s Ge nerator.java:2025) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.getSchema(SDOTy
pe s Ge nerator.java:1999) at
org.eclipse.persistence.sdo.helper.SDOTypesGenerator.define(SDOTypes
Ge n er ator.java:108) at
org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOCla
ss G en erator.java:209) at
org.eclipse.persistence.sdo.helper.SDOClassGenerator.generate(SDOCla
ss G en erator.java:175) at
org.eclipse.persistence.sdo.helper.SDOClassGenerator.main(SDOClassGe
ne r 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:Invoic
e- 2 " xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"

xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggreg
at e Co mponents-2"

xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicC
om p on ents-2"

xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataT
yp e sS chemaModule:2"
xmlns:ccts="urn:un:unece:uncefact:documentation:2"

xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtens
io n Co mponents-2"

xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDat
at y pe s-2" elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    version="2.0">
<!-- ===== Imports ===== -->
  <xsd:import
namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonAggreg
at e 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
          
_______________________________________________
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
    

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
  

--

Oracle
David McCann | Principal Software Engineer | TopLink Product
Oracle Corporation Canada
45 O'Connor Street, Suite 400
Ottawa, Ontario K1P 1A4
Canada
613.288.4636
613.238.2818 (fax)


Back to the top