I can not set the grammar pool on the parser configuration. It says the feature is not supported.
But when I try this after the parsing( getting the configuration from the document) , then it is allowed.
I don't get the logic of this. See the output and program at the end of this mail.

Also I am getting confused of all the different methods to achieve the (same?) goal:
On the page http://xerces.apache.org/xerces2-j/faq-grammars.html the proposed method is:

XMLParserConfiguration config = new XIncludeAwareParserConfiguration();
config.setProperty("http://apache.org/xml/properties/internal/grammar-pool",
myFullGrammarPool);
(SAX|DOM)Parser parser = new (SAX|DOM)Parser(config);


On the page
http://www-128.ibm.com/developerworks/xml/library/x-perfap3.html?ca=dnt-535



XMLReader parser = XMLReaderFactory.createXMLReader();
try {
Class poolClass =
Class.forName("org.apache.xerces.util.XMLGrammarPoolImpl");
Object grammarPool = poolClass.newInstance();
parser.setProperty(

"http://apache.org/xml/properties/internal/grammar-pool",
grammarPool);
}
catch (Exception e) {}


The property above (http://xerces.apache.org/xerces2-j/properties.html ) is in the first example set on the config and in the second example set on the parser,
Also this property is not mentioned as JAXP property on page http://xerces.apache.org/xerces2-j/properties.html. Does this mean it can not be used when using JAXP. And can't you use the JAXP properties in the above coding?
SetParamer/setProperty/setFeature/setAttribute, they all do the same, but slightly different. I think I really need a matrix to know where to set what.

Regards,
Dick Deneer


program output:
Program started
Before parse Canset grammarpool false
Na parse Canset grammarpool true
Program ended
 

Used program:


import java.io.FileInputStream;
import org.apache.xerces.util.XMLGrammarPoolImpl;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.Document;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSParser;

public class TestGrammarPool
{
public static void main(String[] args) throws Exception
{
//give file as input

System.out.println("Program started");
System.setProperty(DOMImplementationRegistry.PROPERTY,

"org.apache.xerces.dom.DOMXSImplementationSourceImpl");
DOMImplementationRegistry registry = DOMImplementationRegistry
.newInstance();
DOMImplementationLS impl = (DOMImplementationLS) registry

.getDOMImplementation("psvi");
LSParser parser = impl.createLSParser(
DOMImplementationLS.MODE_SYNCHRONOUS, null);
LSInput in = impl.createLSInput();

in.setByteStream(new FileInputStream(args[0]));
DOMConfiguration config = parser.getDomConfig();
XMLGrammarPoolImpl grammarPool = new XMLGrammarPoolImpl();
System.out
.println("Before parse Canset grammarpool "
+ config
.canSetParameter(

"http://apache.org/xml/properties/internal/grammar-pool",
grammarPool));
Document document = parser.parse(in);
System.out
.println("Na parse Canset grammarpool "
+ document
.getDomConfig()
.canSetParameter(

"http://apache.org/xml/properties/internal/grammar-pool",
grammarPool));

System.out.println("Program ended");
}
}

Reply via email to