You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Nick Williams (JIRA)" <ji...@apache.org> on 2012/09/10 18:00:08 UTC

[jira] [Created] (DIGESTER-173) No way to enable schema validation from DigesterLoader

Nick Williams created DIGESTER-173:
--------------------------------------

             Summary: No way to enable schema validation from DigesterLoader
                 Key: DIGESTER-173
                 URL: https://issues.apache.org/jira/browse/DIGESTER-173
             Project: Commons Digester
          Issue Type: Improvement
    Affects Versions: 3.2
            Reporter: Nick Williams
            Priority: Critical


It's possible that I'm using DigesterLoader with the improper assumptions, but my belief is that it is meant to be a factor of sorts for creating Digesters. If this is the case, the DigesterLoader interface is incomplete (and, for that matter, even if it is not the case, the documentation surrounding the use of Digester and DigesterLoader is seriously lacking).

I originally used the following code to digest my XML files:

{code}this.loader = DigesterLoader.newLoader(module);
this.loader.setNamespaceAware(true);
this.loader.setSchema(schema);
this.loader.setValidating(true);
this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
this.loader.setUseContextClassLoader(false);
this.loader.setClassLoader(Digester.class.getClassLoader());

...

this.loader.newDigester().parse(myFile);{code}

However, I was getting strange errors "Document is invalid: no grammar found" and "must match DOCTYPE root null". Since I wasn't using a DOCTYPE, I had no idea why this was happening. Much Googling of other sources (the documentation did not help me with this) finally made me realize that setValidating() was turning on DTD validating, regardless of the fact that I was actually using schemas.

I finally figured out my code needed to be this:

{code}{code}this.loader = DigesterLoader.newLoader(module);
this.loader.setNamespaceAware(true);
this.loader.setSchema(schema);
this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
this.loader.setUseContextClassLoader(false);
this.loader.setClassLoader(Digester.class.getClassLoader());

...

Digester digester = this.loader.newDigester();
digester.setFeature("http://xml.org/sax/features/validation", true);
digester.setFeature("http://apache.org/xml/features/validation/schema", true);
digester.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);{code}

As you can see, I have to first get a Digester from the factory and THEN configure the digester further before I can use it. This is contrary to the standard factory pattern.

*Proposal 1*
- Deprecate setValidating(boolean) in DigesterLoader and Digester and replace them with setDoctypeValidating(boolean).
- Add a setSchemaValidating(boolean) method to DigesterLoader and Digester.
- Add a setFeature() method in DigesterLoader to mirror the one in Digester.

*Proposal 2*
- Document the setValidating(boolean) DigesterLoader and Digester methods better to indicate that it is for DOCTYPE validation and should not be used when using schemas.
- Add a setFeature() method in DigesterLoader to mirror the one in Digester.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Commented] (DIGESTER-173) No way to enable schema validation from DigesterLoader

Posted by "Simone Tripodi (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/DIGESTER-173?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13452333#comment-13452333 ] 

Simone Tripodi commented on DIGESTER-173:
-----------------------------------------

Proposal #2 is the best solution - {{Digester(Loader)#setValidating(boolean)}} needs a better explanation on which features turns on and {{DigesterLoader#setFeature()}} would be a great addition to the loader.

Patches are welcome, if you could provide one I am available on review it and check the modifications in.

{quote}
If this is the case, the DigesterLoader interface is incomplete (and, for that matter, even if it is not the case, the documentation surrounding the use of Digester and DigesterLoader is seriously lacking).
{quote}

Patches are more than welcome for documentation as well, you are encouraged on providing your help to the community.
Please take also in consideration that components at commons are usually maintained by volunteers, that means that at 95% of the cases there are not entities that sponsor developers, so:

 * if you can provide help on improving the component, please don't hesitate on doing it - new contributors are lifeblood!

 * if you contribute back, also the rest of the community could get benefit from your fixes.

Many thanks in advance!
                
> No way to enable schema validation from DigesterLoader
> ------------------------------------------------------
>
>                 Key: DIGESTER-173
>                 URL: https://issues.apache.org/jira/browse/DIGESTER-173
>             Project: Commons Digester
>          Issue Type: Improvement
>    Affects Versions: 3.2
>            Reporter: Nick Williams
>            Priority: Critical
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> It's possible that I'm using DigesterLoader with the improper assumptions, but my belief is that it is meant to be a factor of sorts for creating Digesters. If this is the case, the DigesterLoader interface is incomplete (and, for that matter, even if it is not the case, the documentation surrounding the use of Digester and DigesterLoader is seriously lacking).
> I originally used the following code to digest my XML files:
> {code}this.loader = DigesterLoader.newLoader(module);
> this.loader.setNamespaceAware(true);
> this.loader.setSchema(schema);
> this.loader.setValidating(true);
> this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
> this.loader.setUseContextClassLoader(false);
> this.loader.setClassLoader(Digester.class.getClassLoader());
> ...
> this.loader.newDigester().parse(myFile);{code}
> However, I was getting strange errors "Document is invalid: no grammar found" and "must match DOCTYPE root null". Since I wasn't using a DOCTYPE, I had no idea why this was happening. Much Googling of other sources (the documentation did not help me with this) finally made me realize that setValidating() was turning on DTD validating, regardless of the fact that I was actually using schemas.
> I finally figured out my code needed to be this:
> {code}this.loader = DigesterLoader.newLoader(module);
> this.loader.setNamespaceAware(true);
> this.loader.setSchema(schema);
> this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
> this.loader.setUseContextClassLoader(false);
> this.loader.setClassLoader(Digester.class.getClassLoader());
> ...
> Digester digester = this.loader.newDigester();
> digester.setFeature("http://xml.org/sax/features/validation", true);
> digester.setFeature("http://apache.org/xml/features/validation/schema", true);
> digester.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);{code}
> As you can see, I have to first get a Digester from the factory and THEN configure the digester further before I can use it. This is contrary to the standard factory pattern.
> *Proposal 1*
> - Deprecate setValidating(boolean) in DigesterLoader and Digester and replace them with setDoctypeValidating(boolean).
> - Add a setSchemaValidating(boolean) method to DigesterLoader and Digester.
> - Add a setFeature() method in DigesterLoader to mirror the one in Digester.
> *Proposal 2*
> - Document the setValidating(boolean) DigesterLoader and Digester methods better to indicate that it is for DOCTYPE validation and should not be used when using schemas.
> - Add a setFeature() method in DigesterLoader to mirror the one in Digester.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (DIGESTER-173) No way to enable schema validation from DigesterLoader

Posted by "Nick Williams (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DIGESTER-173?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nick Williams updated DIGESTER-173:
-----------------------------------

    Description: 
It's possible that I'm using DigesterLoader with the improper assumptions, but my belief is that it is meant to be a factor of sorts for creating Digesters. If this is the case, the DigesterLoader interface is incomplete (and, for that matter, even if it is not the case, the documentation surrounding the use of Digester and DigesterLoader is seriously lacking).

I originally used the following code to digest my XML files:

{code}this.loader = DigesterLoader.newLoader(module);
this.loader.setNamespaceAware(true);
this.loader.setSchema(schema);
this.loader.setValidating(true);
this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
this.loader.setUseContextClassLoader(false);
this.loader.setClassLoader(Digester.class.getClassLoader());

...

this.loader.newDigester().parse(myFile);{code}

However, I was getting strange errors "Document is invalid: no grammar found" and "must match DOCTYPE root null". Since I wasn't using a DOCTYPE, I had no idea why this was happening. Much Googling of other sources (the documentation did not help me with this) finally made me realize that setValidating() was turning on DTD validating, regardless of the fact that I was actually using schemas.

I finally figured out my code needed to be this:

{code}this.loader = DigesterLoader.newLoader(module);
this.loader.setNamespaceAware(true);
this.loader.setSchema(schema);
this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
this.loader.setUseContextClassLoader(false);
this.loader.setClassLoader(Digester.class.getClassLoader());

...

Digester digester = this.loader.newDigester();
digester.setFeature("http://xml.org/sax/features/validation", true);
digester.setFeature("http://apache.org/xml/features/validation/schema", true);
digester.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);{code}

As you can see, I have to first get a Digester from the factory and THEN configure the digester further before I can use it. This is contrary to the standard factory pattern.

*Proposal 1*
- Deprecate setValidating(boolean) in DigesterLoader and Digester and replace them with setDoctypeValidating(boolean).
- Add a setSchemaValidating(boolean) method to DigesterLoader and Digester.
- Add a setFeature() method in DigesterLoader to mirror the one in Digester.

*Proposal 2*
- Document the setValidating(boolean) DigesterLoader and Digester methods better to indicate that it is for DOCTYPE validation and should not be used when using schemas.
- Add a setFeature() method in DigesterLoader to mirror the one in Digester.

  was:
It's possible that I'm using DigesterLoader with the improper assumptions, but my belief is that it is meant to be a factor of sorts for creating Digesters. If this is the case, the DigesterLoader interface is incomplete (and, for that matter, even if it is not the case, the documentation surrounding the use of Digester and DigesterLoader is seriously lacking).

I originally used the following code to digest my XML files:

{code}this.loader = DigesterLoader.newLoader(module);
this.loader.setNamespaceAware(true);
this.loader.setSchema(schema);
this.loader.setValidating(true);
this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
this.loader.setUseContextClassLoader(false);
this.loader.setClassLoader(Digester.class.getClassLoader());

...

this.loader.newDigester().parse(myFile);{code}

However, I was getting strange errors "Document is invalid: no grammar found" and "must match DOCTYPE root null". Since I wasn't using a DOCTYPE, I had no idea why this was happening. Much Googling of other sources (the documentation did not help me with this) finally made me realize that setValidating() was turning on DTD validating, regardless of the fact that I was actually using schemas.

I finally figured out my code needed to be this:

{code}{code}this.loader = DigesterLoader.newLoader(module);
this.loader.setNamespaceAware(true);
this.loader.setSchema(schema);
this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
this.loader.setUseContextClassLoader(false);
this.loader.setClassLoader(Digester.class.getClassLoader());

...

Digester digester = this.loader.newDigester();
digester.setFeature("http://xml.org/sax/features/validation", true);
digester.setFeature("http://apache.org/xml/features/validation/schema", true);
digester.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);{code}

As you can see, I have to first get a Digester from the factory and THEN configure the digester further before I can use it. This is contrary to the standard factory pattern.

*Proposal 1*
- Deprecate setValidating(boolean) in DigesterLoader and Digester and replace them with setDoctypeValidating(boolean).
- Add a setSchemaValidating(boolean) method to DigesterLoader and Digester.
- Add a setFeature() method in DigesterLoader to mirror the one in Digester.

*Proposal 2*
- Document the setValidating(boolean) DigesterLoader and Digester methods better to indicate that it is for DOCTYPE validation and should not be used when using schemas.
- Add a setFeature() method in DigesterLoader to mirror the one in Digester.

    
> No way to enable schema validation from DigesterLoader
> ------------------------------------------------------
>
>                 Key: DIGESTER-173
>                 URL: https://issues.apache.org/jira/browse/DIGESTER-173
>             Project: Commons Digester
>          Issue Type: Improvement
>    Affects Versions: 3.2
>            Reporter: Nick Williams
>            Priority: Critical
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> It's possible that I'm using DigesterLoader with the improper assumptions, but my belief is that it is meant to be a factor of sorts for creating Digesters. If this is the case, the DigesterLoader interface is incomplete (and, for that matter, even if it is not the case, the documentation surrounding the use of Digester and DigesterLoader is seriously lacking).
> I originally used the following code to digest my XML files:
> {code}this.loader = DigesterLoader.newLoader(module);
> this.loader.setNamespaceAware(true);
> this.loader.setSchema(schema);
> this.loader.setValidating(true);
> this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
> this.loader.setUseContextClassLoader(false);
> this.loader.setClassLoader(Digester.class.getClassLoader());
> ...
> this.loader.newDigester().parse(myFile);{code}
> However, I was getting strange errors "Document is invalid: no grammar found" and "must match DOCTYPE root null". Since I wasn't using a DOCTYPE, I had no idea why this was happening. Much Googling of other sources (the documentation did not help me with this) finally made me realize that setValidating() was turning on DTD validating, regardless of the fact that I was actually using schemas.
> I finally figured out my code needed to be this:
> {code}this.loader = DigesterLoader.newLoader(module);
> this.loader.setNamespaceAware(true);
> this.loader.setSchema(schema);
> this.loader.setErrorHandler(new DefaultThrowingErrorHandler());
> this.loader.setUseContextClassLoader(false);
> this.loader.setClassLoader(Digester.class.getClassLoader());
> ...
> Digester digester = this.loader.newDigester();
> digester.setFeature("http://xml.org/sax/features/validation", true);
> digester.setFeature("http://apache.org/xml/features/validation/schema", true);
> digester.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);{code}
> As you can see, I have to first get a Digester from the factory and THEN configure the digester further before I can use it. This is contrary to the standard factory pattern.
> *Proposal 1*
> - Deprecate setValidating(boolean) in DigesterLoader and Digester and replace them with setDoctypeValidating(boolean).
> - Add a setSchemaValidating(boolean) method to DigesterLoader and Digester.
> - Add a setFeature() method in DigesterLoader to mirror the one in Digester.
> *Proposal 2*
> - Document the setValidating(boolean) DigesterLoader and Digester methods better to indicate that it is for DOCTYPE validation and should not be used when using schemas.
> - Add a setFeature() method in DigesterLoader to mirror the one in Digester.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira