Re: jdom2 runtime

Rolf Lear <[email protected]> Tue, 21 Aug 2012 14:39:13 -0400
Newsgroups gmane.comp.java.jdom.general
Message-ID <[email protected]>
In JDOM 2.x the new SAXBuilder()   (no arguments) will use regular JAXP 
API's to get the right SAX Parser for your system.

The JAXP process is described here: 
http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance%28%29

In most cases, if you want to use a particular parser (xerces, for 
example), all you need to do is add the jar to the classpath. As a 
fallback mechanism, the standard JRE has an XML Parser built in already 
(an older version of xerces with some customizations - one of which is 
that it is not in the regular apache package.... so you cannot call it 
org.apache.xerces.parsers.SAXParser). So, you do not need to have any 
third-party jar unless you want one. I would still recommend adding 
xerces to your classpath though (and with it, you will want the 
xml-apis.jar).

So, in your 'old' code, if you used to do:

... = new SAXBuilder("org.apache.xerces.parsers.SAXParser");

then I suggest you either:
    -  add (only) xerces (with xmlapis.jar) to the classpath, and use 
the plain ... = new SAXBuilder(); constructor....
    -  add xerces to the classpath, use ... = new SAXBuilder(new 
XMLReaderSAX2Factory(false, "org.apache.xerces.parsers.SAXParser"));

Note though, that the deprecated/'old' constructor new 
SAXBuilder("org.apache.xerces.parsers.SAXParser"); will still work (with 
a deprecated warning) if you have the xerces.jar in your classpath.

I recommend that you use the (newer) JAXP API for constructing 
SAXBuilders. You can still customize it with a particular library.

I note that there is a lack of functionality in JDOM for using JAXP with 
a custom factory.... I will add that.... I think.... see issue #89

For what it's worth, the documentation on the org.jdom.input.sax is 
fairly comprehensive: 
http://www.jdom.org/docs/apidocs/org/jdom2/input/sax/package-summary.html even 
though it does not have an example of what you want (although it has 
other examples).

Also, the source code for the deprecated constructor is educational... :
https://github.com/hunterhacker/jdom/blob/master/core/src/java/org/jdom2/input/SAXBuilder.java#L266
and
https://github.com/hunterhacker/jdom/blob/master/core/src/java/org/jdom2/input/SAXBuilder.java#L288

I will consider the usage of a JAXP custom factory using the 'other' 
JAXP constructor: 
http://docs.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance%28java.lang.String,%20java.lang.ClassLoader%29

Issue #89: https://github.com/hunterhacker/jdom/issues/89

Rolf

On 21/08/2012 1:23 PM, Craig Christophersen wrote:
>
> Hello;
>
> While I now have jdom2 compiling OK in an application, I am running 
> into runtime problems with SAXBuilder.
>
> With previous jdom both SAXBuilder builder = new SAXBuilder();  and 
> SAXBuilder builder = new 
> SAXBuilder("_org.apache.xerces.parsers.SAXParser_");worked for 
> constructing a SAXBuilder.
>
> Question:
>
> So now to use new SAXBuilder() (which uses JAXP) do I need something 
> additional in my classpath??
>
> Or is there somewhere I can see an example of what is mentioned in the 
> migration guide --- *Deprecated.* /use 
> |SAXBuilder(XMLReaderJDOMFactory)| 
> <http://www.jdom.org/docs/apidocs/org/jdom2/input/SAXBuilder.html#SAXBuilder%28org.jdom2.input.sax.XMLReaderJDOMFactory%29> 
> with |XMLReaderSAX2Factory.XMLReaderSAX2Factory(boolean, String)| 
> <http://www.jdom.org/docs/apidocs/org/jdom2/input/sax/XMLReaderSAX2Factory.html#XMLReaderSAX2Factory%28boolean,%20java.lang.String%29>?/
>
> Thanks,
>
> Craig Christophersen
>
> Software Developer
>
> Synesis7
>
> [email protected] <mailto:[email protected]>
>
>
>
> _______________________________________________
> To control your jdom-interest membership:
> http://www.jdom.org/mailman/options/jdom-interest/[email protected]

_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/[email protected]