<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2479.6" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#c8e0d8>
<DIV><FONT face="Comic Sans MS" size=2><FONT face="Comic Sans MS" size=2><EM>hi 
All,</EM></FONT></DIV>
<DIV>
<DIV><FONT face="Comic Sans MS" size=2><EM></EM></FONT>&nbsp;</DIV>
<DIV><FONT face="Comic Sans MS" size=2><EM>Using this release I experienced a 
bug in the class SAXBuilder which make any custom filter useless (try the 
demos)</EM></FONT></DIV>
<DIV><FONT face="Comic Sans MS" size=2><EM></EM></FONT>&nbsp;</DIV>
<DIV><EM>I have patched the SAXBuilder and fix this bug&nbsp;,using the faster 
way. </EM></DIV>
<DIV><EM>( theres many way to fix it and they can also&nbsp;involve the design 
structure) </EM></DIV>
<DIV><FONT face="Comic Sans MS" size=2><EM></EM></FONT>&nbsp;</DIV>
<DIV>
<DIV><STRONG><EM>the problem :</EM></STRONG></DIV>
<DIV><STRONG><EM></EM></STRONG>&nbsp;</DIV>
<DIV><EM><STRONG>&nbsp;</STRONG>an error in the method "configureParser" or a 
wrong position of the code which concatenate the chain of the custom 
filters</EM></DIV>
<DIV><EM>&nbsp; anyway you can see that each time the "build" method is called a 
call to configureParser is made before to parse the file</EM></DIV>
<DIV><EM>&nbsp; this method setup&nbsp;the chain of custom filter in order 
to&nbsp;put the default parser as the&nbsp;main parent of the chain </EM></DIV>
<DIV>&nbsp; [ root.setParent(parser); ]</DIV>
<DIV><EM>&nbsp;&nbsp;and the custom filter &nbsp;as the top of the 
chain</EM></DIV>
<DIV>&nbsp;[ parser = saxXMLFilter; ]<BR><EM>&nbsp;this is ok but doesn't make 
any sense since the variable parser is a local variable of the method and it 
will never be used after the configuration</EM></DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>
<DIV><EM>-----------------------------------------------------------------------------------------------------------------------------------------</EM></DIV>&nbsp;&nbsp;&nbsp; 
public Document build(InputSource in) throws JDOMException 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXHandler contentHandler = 
null;</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Create and configure the content 
handler.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
contentHandler = 
createContentHandler();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
configureContentHandler(contentHandler);</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Create and configure the 
parser.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
XMLReader parser = 
createParser();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<STRONG>configureParser(parser, contentHandler);</STRONG></DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Parse 
the 
document.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>&nbsp;&nbsp; 
parser.parse(in);<BR></STRONG></DIV></DIV>
<DIV>
<DIV><EM>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ........ecc</EM></DIV>
<DIV><EM>-----------------------------------------------------------------------------------------------------------------------------------------</EM></DIV>&nbsp;&nbsp;&nbsp; 
protected void configureParser(XMLReader parser, SAXHandler 
contentHandler)&nbsp; throws Exception {</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Install optional 
filter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (saxXMLFilter != null) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Connect filter chain to 
parser<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
XMLFilter root = 
saxXMLFilter;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
while (root.getParent() instanceof XMLFilter) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
root = 
(XMLFilter)root.getParent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
root.setParent(parser);</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Read 
from 
filter<BR><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
parser = saxXMLFilter;<BR></STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Setup SAX 
handlers.<BR><EM><EM>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
........ecc</EM></EM></DIV>
<DIV><EM><EM>-----------------------------------------------------------------------------------------------------------------------------------------</EM></DIV></EM>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>
<DIV><STRONG><EM>one solution :</EM></STRONG></DIV>
<DIV><STRONG><EM></EM></STRONG>&nbsp;</DIV>
<DIV><EM>make the method "configureParser" to return a value so when the method 
"build"&nbsp;call the top filter it will be the correct one</EM></DIV>
<DIV><EM><EM>-----------------------------------------------------------------------------------------------------------------------------------------</EM></DIV></DIV>
<DIV>&nbsp;&nbsp;&nbsp;</EM> public Document build(InputSource in) throws 
JDOMException {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAXHandler 
contentHandler = null;</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Create and configure the content 
handler.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
contentHandler = 
createContentHandler();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
configureContentHandler(contentHandler);</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Create and configure the 
parser.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
XMLReader parser = 
createParser();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG> 
parser=configureParser(parser, contentHandler);</STRONG></DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Parse 
the 
document.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
parser.parse(in);<BR>
<DIV><EM>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...................... 
ecc<BR>-----------------------------------------------------------------------------------------------------------------------------------------</EM></DIV></DIV>
<DIV>&nbsp;<STRONG>&nbsp;&nbsp; protected XMLReader configureParser(XMLReader 
parser, SAXHandler contentHandler)&nbsp; throws Exception {</STRONG></DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Install optional 
filter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (saxXMLFilter != null) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
Connect filter chain to 
parser<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
XMLFilter root = 
saxXMLFilter;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
while (root.getParent() instanceof XMLFilter) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
root = 
(XMLFilter)root.getParent();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
root.setParent(parser);</DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Read 
from 
filter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
parser = saxXMLFilter;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.......................&nbsp;ecc<BR><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return parser;&nbsp;</STRONG></DIV>
<DIV><EM>-----------------------------------------------------------------------------------------------------------------------------------------</EM></DIV>
<DIV><EM></EM>&nbsp;</DIV>
<DIV><EM>regards,</EM></DIV>
<DIV><EM>Paolo Lioy</EM></DIV></FONT></DIV>
<DIV><EM><FONT face="Comic Sans MS" 
size=2></FONT></EM>&nbsp;</DIV></BODY></HTML>