Try setting the schemalocation of your schema (noNamespaceLocation) to match
the fakeLocationURI used for the entity resolver:


parser.setProperty("http://apache.org/xml/properties/schema/external-noNames
paceSchemaLocation","http://www.contextmedia.com";);
    parser.setEntityResolver(new
SchemaEntityResolver(parser.getEntityResolver(), schemaString,
"http://www.contextmedia.com";));

Jeff

----- Original Message -----
From: Praveen Peddi
To: [EMAIL PROTECTED]
Sent: Friday, January 24, 2003 11:34 AM
Subject: Re: XML validation using xml schema string


Hi Jeff,
I did exactly what you told and it doesn't seem to work. Please look at the
following code and see if I am doing anything wrong.
The error I get is:
**Parsing Error**
  Line:    1
  URI:     null
  Message: cvc-elt.1: Cannot find the declaration of element 'content'.
SAXException Exception
Total time of SAXValidate:3546
org.xml.sax.SAXException: Error Validating the content XML.
 at XMLValidator.validateXmlAgainstLocalSchema(XMLValidator.java:105)

My Entity Resolver is:
public class SchemaEntityResolver implements EntityResolver {

 InputSource source;
  EntityResolver defaultResolver;
  String fakeLocationURI;


 public SchemaEntityResolver(EntityResolver defaultResolver, String
mySchemaString,
String fakeLocationURI) {
      source = new InputSource(new StringReader(mySchemaString));
      this.defaultResolver = defaultResolver;
       this.fakeLocationURI = fakeLocationURI;
  }


    public InputSource resolveEntity(String pubId, String sysId)
        throws IOException, SAXException {
  if ((pubId != null && pubId.equals(fakeLocationURI))
           || (sysId != null && sysId.equals(fakeLocationURI))) {
           return source;
     }
      return defaultResolver.resolveEntity(pubId, sysId);
    }
 }

And My validate method is as follows:

public static void validateXmlAgainstLocalSchema(String XMLString, String
schemaString) throws SAXException{
   long startTime = System.currentTimeMillis();
            System.out.println("Files: XML:" + XMLString + " XSD:" +
schemaString);
            XMLReader parser = null;
            // Instantiate a parser
            try{
                parser =
XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
            } catch (org.xml.sax.SAXException ex){
                System.out.println("SAXException Exception");
    throw new SAXException("Error Obtaining the parser.");
            }

            try{

                // Register the error handler
                parser.setErrorHandler(new SchemaErrorHandler());


//parser.setFeature("http://apache.org/xml/features/continue-after-fatal-err
or", true);
                // Turn on validation

parser.setFeature("http://xml.org/sax/features/namespaces",true);
                parser.setFeature("http://xml.org/sax/features/validation";,
true);

parser.setFeature("http://apache.org/xml/features/validation/schema",true);

parser.setFeature("http://apache.org/xml/features/validation/schema-full-che
cking",true);

//parser.setProperty("http://apache.org/xml/properties/schema/external-noNam
espaceSchemaLocation",Schema);
    parser.setEntityResolver(new
SchemaEntityResolver(parser.getEntityResolver(), schemaString,
"http://www.contextmedia.com";));


            } catch (org.xml.sax.SAXNotRecognizedException ex){
    ex.printStackTrace();
                    System.out.println("SAXNotRecognizedException
Exception");
            } catch (org.xml.sax.SAXNotSupportedException ex){
    ex.printStackTrace();
                    System.out.println("SAXNotSupportedException
Exception");
            }

            // Parse the document
            try{
                //String XMLSystemId = new
File(XMLString).toURL().toExternalForm();
                parser.parse(new InputSource(new StringReader(XMLString)));
    //parser.parse(XMLSystemId);
                System.out.println("Parsed Successfully by SAX Parser");
            } catch (org.xml.sax.SAXException ex){
                System.out.println("SAXException Exception");
    throw new SAXException("Error Validating the content XML.");
            } catch (java.io.IOException ex){
                System.out.println("IOException Exception");
    throw new SAXException("Error Validating the content XML.");
            } finally {
   long endTime = System.currentTimeMillis();
         System.out.println("Total time of
SAXValidate:"+(endTime-startTime));
   }
    }

----- Original Message -----
From: "Jeff Greif" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, January 23, 2003 3:07 PM
Subject: Re: XML validation using xml schema string


> Something like this (just typed into mail message, neither compiled nor
> tested).
>
> in main:
>
>     DomParser parser = new DomParser();
>     parser.setEntityResolver(new
> MyEntityResolver(parser.getEntityResolver(),
>
> mySchemaString, myfakeSchemaLocationURI));
>
> class MyEntityResolver {
>   InputSource source;
>   EntityResolver defaultResolver;
>   String fakeLocationURI;
>    public MyEntityResolver(EntityResolver default, String mySchemaString,
> String fakeLocationURI) {
>       source = new InputSource(new StringReader(mySchemaString));
>       defaultResolver = default;
>        this.fakeLocationURI = fakeLocationURI;
>   }
>   public InputSource resolveEntity(String pubId, String sysId) {
>       if ((pubId != null && pubId.equals(fakeLocationURI))
>            || (sysId != null && sysId.equals(fakeLocationURI))) {
>           return source;
>     }
>       return defaultResolver.resolveEntity(pubId, sysId);
>   }
>
> }
>
> Jeff
> ----- Original Message -----
> From: "Praveen Peddi" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Thursday, January 23, 2003 10:51 AM
> Subject: Re: XML validation using xml schema string
>
>
> > Jeff,
> > I think I didn't get you completely.
> >
> > Could you please write a sample code or modify my code below so that I
can
> > understand what you are syaing.
> >
> > Thanks
> > Praveen
> > ----- Original Message -----
> > From: "Jeff Greif" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Thursday, January 23, 2003 11:28 AM
> > Subject: Re: XML validation using xml schema string
> >
> >
> > > I'm not able to give information correct in detail, but here is an
> outline
> > > of what must happen:
> > >
> > > The entity resolver is called with a namespace URI or a schema
location
> as
> > > an argument, I think.  In the course of parsing your instance document
> > (.xml
> > > file), it will be called to process your schema's namespace and
possibly
> > > other namespaces (e.g. the XMLSchema-instance namespace) mentioned
> > therein.
> > > Probably you should get the default entity resolver for the parser
> (which
> > > knows how to handle some things, presumably), and create your own
entity
> > > resolver holding that one as a member.  Then when asked for a
particular
> > > schema by its namespace or location, if it's your schema, return the
> input
> > > source as your code below does, otherwise, pass the request to the
> member
> > > resolver which knows better than you what to do.
> > >
> > > Jeff
> > >
> > > ----- Original Message -----
> > > From: "Praveen Peddi" <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Thursday, January 23, 2003 7:44 AM
> > > Subject: Re: XML validation using xml schema string
> > >
> > >
> > > > I posted a question yesterday about the validation of XML against
the
> > > local
> > > > schema (in memory). Could anyone please look at the message below
and
> > > reply
> > > > if you know the answer.
> > > >
> > > > Thanks in Advance.
> > > >
> > > > Praveen
> > > > ----- Original Message -----
> > > > From: "Praveen Peddi" <[EMAIL PROTECTED]>
> > > > To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>
> > > > Sent: Wednesday, January 22, 2003 1:35 PM
> > > > Subject: Re: XML validation using xml schema string
> > > >
> > > >
> > > > > As you said I wrote an EntityResolver but it didn't work. Could
you
> > send
> > > > me
> > > > > a sample code (just the validation code) if u already have one.
> > > > >
> > > > > My validate method looks as follows:
> > > > >
> > > > > public static void validateXmlAgainstLocalSchema(String XMLString,
> > > String
> > > > > schemaString) throws SAXException{
> > > > >    long startTime = System.currentTimeMillis();
> > > > >             System.out.println("Files: XML:" + XMLString + " XSD:"
+
> > > > > schemaString);
> > > > >             XMLReader parser = null;
> > > > >             // Instantiate a parser
> > > > >             try{
> > > > >                 parser =
> > > > >
> > XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
> > > > >             } catch (org.xml.sax.SAXException ex){
> > > > >                 System.out.println("SAXException Exception");
> > > > >     throw new SAXException("Error Obtaining the parser.");
> > > > >             }
> > > > >
> > > > >             try{
> > > > >
> > > > >                 // Register the error handler
> > > > >                 parser.setErrorHandler(new SchemaErrorHandler());
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
>
//parser.setFeature("http://apache.org/xml/features/continue-after-fatal-err
> > > > > or", true);
> > > > >                 // Turn on validation
> > > > >
> > > > > parser.setFeature("http://xml.org/sax/features/namespaces",true);
> > > > >
> > > > parser.setFeature("http://xml.org/sax/features/validation";,
> > > > > true);
> > > > >
> > > > >
> > > >
> > >
> >
>
parser.setFeature("http://apache.org/xml/features/validation/schema",true);
> > > > >
> > > > >
> > > >
> > >
> >
>
parser.setFeature("http://apache.org/xml/features/validation/schema-full-che
> > > > > cking",true);
> > > > >
> > > > >
> > > >
> > >
> >
>
//parser.setProperty("http://apache.org/xml/properties/schema/external-noNam
> > > > > espaceSchemaLocation",Schema);
> > > > >     parser.setEntityResolver(new
> SchemaEntityResolver(schemaString));
> > > > >
> > > > >
> > > > >             } catch (org.xml.sax.SAXNotRecognizedException ex){
> > > > >     ex.printStackTrace();
> > > > >                     System.out.println("SAXNotRecognizedException
> > > > > Exception");
> > > > >             } catch (org.xml.sax.SAXNotSupportedException ex){
> > > > >     ex.printStackTrace();
> > > > >                     System.out.println("SAXNotSupportedException
> > > > > Exception");
> > > > >             }
> > > > >
> > > > >             // Parse the document
> > > > >             try{
> > > > >                 //String XMLSystemId = new
> > > > > File(XMLString).toURL().toExternalForm();
> > > > >                 parser.parse(new InputSource(new
> > > > StringReader(XMLString)));
> > > > >     //parser.parse(XMLSystemId);
> > > > >                 System.out.println("Parsed Successfully by SAX
> > Parser");
> > > > >             } catch (org.xml.sax.SAXException ex){
> > > > >                 System.out.println("SAXException Exception");
> > > > >     throw new SAXException("Error Validating the content XML.");
> > > > >             } catch (java.io.IOException ex){
> > > > >                 System.out.println("IOException Exception");
> > > > >     throw new SAXException("Error Validating the content XML.");
> > > > >             } finally {
> > > > >    long endTime = System.currentTimeMillis();
> > > > >          System.out.println("Total time of
> > > > > SAXValidate:"+(endTime-startTime));
> > > > >    }
> > > > >     }//SAXValidate
> > > > >
> > > > > And SchemaEntityResolver looks as follows:
> > > > >
> > > > > public class SchemaEntityResolver implements EntityResolver {
> > > > >  InputSource source = null;
> > > > >  public SchemaEntityResolver(String schemaString) {
> > > > >   source = new InputSource(new StringReader(schemaString));
> > > > >  }
> > > > >
> > > > >     public InputSource resolveEntity(String publicID, String
> systemID)
> > > > >         throws SAXException {
> > > > >             return source;
> > > > >     }
> > > > > }
> > > > >
> > > > > When I try to validate an xml with the schema string, I get the
> > > following
> > > > > error:
> > > > > Line:    1
> > > > >   URI:     null
> > > > >   Message: cvc-elt.1: Cannot find the declaration of element
> > 'content'.
> > > > >
> > > > >
> > > > > Am I doing it wrong? If so please tell me how to use the
> > entityresolver.
> > > > >
> > > > > Praveen
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: <[EMAIL PROTECTED]>
> > > > > To: <[EMAIL PROTECTED]>
> > > > > Sent: Monday, January 20, 2003 10:18 AM
> > > > > Subject: Re: XML validation using xml schema string
> > > > >
> > > > >
> > > > > > Write an entity resolver
> > > > > >
> > > > >
> > > >
> > >
> >
>
(http://xml.apache.org/xerces2-j/javadocs/api/org/xml/sax/EntityResolver.htm
> > > > > l),
> > > > > >
> > > > > > and returned an input source with a StringReader when the schema
> > > > document
> > > > > > is asked.
> > > > > >
> > > > > > HTH,
> > > > > > Sandy Gao
> > > > > > Software Developer, IBM Canada
> > > > > > (1-905) 413-3255
> > > > > > [EMAIL PROTECTED]
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >                       "Praveen Peddi"
> > > > > >                       <[EMAIL PROTECTED]        To:
> > > > > <[EMAIL PROTECTED]>
> > > > > >                       dia.com>                 cc:
> > > > > >                                                Subject:  Re: XML
> > > > > validation using xml schema string
> > > > > >                       01/20/2003 09:16
> > > > > >                       AM
> > > > > >                       Please respond to
> > > > > >                       xerces-j-user
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > Hi all,
> > > > > > Last week I sent an email regarding the xml validation against
the
> > > > schema,
> > > > > > but didn't get any reply. Please reply if any one has answer to
my
> > > > > > question. Is it possible to validate an xml document using a
> schema
> > > > > > document (not the schema url) that is present with in the
> > application.
> > > > If
> > > > > > its not possible, whats the best way of achieving it. Please
read
> my
> > > > > > previous email below.
> > > > > >
> > > > > > Thanks
> > > > > > Praveen
> > > > > >
> > > > > >  Hi all,
> > > > > >  I want to validate an xml document with an existing schema. I
> know
> > > > there
> > > > > >  is a code to do it when the schema is present as a URL. BUt in
my
> > > case
> > > > > >  schema is present with in the application memory (since it is
> > stored
> > > in
> > > > > >  the database) and that is not the url or on the hard disk.
> > > > > >  I have the following method which validates only when the
schema
> is
> > > > > >  present externally. Note that the argument Schema is a URL:
> > > > > >  public static void DOMValidate(String XMLfile, String Schema){
> > > > > >    long startTime = System.currentTimeMillis();
> > > > > >
> > > > > >          // Instantiate the DOM parser.
> > > > > >          DOMParser parser = new DOMParser();
> > > > > >
> > > > > >          // set the features
> > > > > >          try{
> > > > > >
> > parser.setFeature("http://xml.org/sax/features/namespaces
> > > > > >  ",true);
> > > > > >
> > > parser.setFeature("http://xml.org/sax/features/validation";,
> > > > > >  true);
> > > > > >              parser.setFeature("
> > > > > >  http://apache.org/xml/features/validation/schema",true);
> > > > > >              parser.setFeature("
> > > > > >
> > > http://apache.org/xml/features/validation/schema-full-checking",true);
> > > > > >              // convert the xml file name to a URL
> > > > > >              String SystemId = null;
> > > > > >              try{
> > > > > >                  SystemId = new
> > File(Schema).toURL().toExternalForm();
> > > > > >              } catch(java.net.MalformedURLException ex){
> > > > > >                  //ex.printStackTrace();
> > > > > >                  log.error(ex);
> > > > > >              }
> > > > > >              parser.setProperty("
> > > > > >
> > > > >
> > >
> http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation
> > > > > >  ",SystemId);
> > > > > >              // myErrorHandler is a descendant of ErrorHandler,
it
> > > > should
> > > > > >  be set here to be able to catch parse errors
> > > > > >              parser.setErrorHandler(new SchemaErrorHandler());
> > > > > >
> > > > > >          } catch (SAXNotSupportedException ex){
> > > > > >              System.out.println("SAXNotSupportedException
> > Exception");
> > > > > >          } catch (SAXNotRecognizedException ex){
> > > > > >                  System.out.println("SAXNotRecognizedException
> > > > > Exception");
> > > > > >          }
> > > > > >
> > > > > >          // parse the xml file, the errorhandler class has
> > callbacks,
> > > > > >          // so those will be called automatically there is a
parse
> > > error
> > > > > >          try{
> > > > > >                  parser.parse(new
> > > > File(XMLfile).toURL().toExternalForm());
> > > > > >                  //System.out.println("Parsed Successfully by
DOM
> > > > > Parser");
> > > > > >          } catch (org.xml.sax.SAXException ex){
> > > > > >                  //System.out.println("SAXException Exception");
> > > > > >                  //ex.printStackTrace();
> > > > > >              log.error(ex);
> > > > > >          } catch (java.io.IOException ex){
> > > > > >                  System.out.println("IOException Exception");
> > > > > >     } finally {
> > > > > >     long endTime = System.currentTimeMillis();
> > > > > >           //System.out.println("Total time of DOMValidate:"
> > > > > >  +(endTime-startTime));
> > > > > >
> > > > > >   }
> > > > > >
> > > > > >      }
> > > > > >
> > > > > >  How can I do the validation if the Schema is the actual schema
> > string
> > > > not
> > > > > >  the url. This looks like a common problem. I assume that its
not
> > > > > universal
> > > > > >  that schema is not always stored externally.
> > > > > >
> > > > > >  Any suggestions are appreciated.
> > > > > >
> > > > > >  Praveen
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > ---------------------------------------------------------------------
> > > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > > For additional commands, e-mail:
[EMAIL PROTECTED]
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > > >
> > > > >
> > > >
> > > >
> > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to