Tema: java arbatinukas - nekunkuliuoja
Autorius: Kopustas
Data: 2010-05-14 14:42:07
Sveiki gyvi,

ne paslaptis- su java nedraugauju labai švelniai tariant... o štai nutiko 
tokia problema ir nežinau kaip kapstytis.

Krapštau svetimą kodą, jame naudojama SAXParser klasė 
(org.apache.xerces.parsers.SAXparser) XML dokumento parsinimui.

Kodo gabaliukas:

String parserName = "org.apache.xerces.parsers.SAXParser" ;
try {
    XMLReader parser = 
(XMLReader)Class.forName(this.parserName).newInstance();
    DefaultHandler handler = this ;
    try {
        parser.setFeature("http://apache.org/xml/features/allow-java-encodings", 
true) ;
        parser.setFeature("http://xml.org/sax/features/validation", true) ;
        parser.setFeature("http://xml.org/sax/features/external-general-entities", 
true) ;
    } catch (SAXException se) {
        logger.warn("MlDefaultHandler.doParsing.setFeature: " + 
se.toString()) ;
    }
    parser.setContentHandler(handler);
    parser.setErrorHandler(handler);
    startParsing = System.currentTimeMillis();
    logger.info("MlDefaultHandler.doParsing(): start parser.parse()");
    parser.parse(uri);
}catch (Exception e) { ...

Viskas kaip ir veikia, bet kartais būna toks nutikimas, kad iškviečiamas 
parse metodas ir anas pakabina visą thread'ą ir toks vaizdas, kad niekada 
nebaigia darbo.

Taigi klausimas. Kaip protingai debuginti, kame šaknys- kodėl kartais 
suveikia, o kartais nesuveikia (su vienai URI veikia, kitais ne)? Ar įmanoma 
tą patį metodo iškvietimą aplipinti kokiu nors "timeout'u", kad jei 
negrąžino nieko per kažkiek laiko- mestų exception'ą ar kaip nors kitaip 
grubiai / negrubiai, bet baigtų savo juodą darbą... Nes dabar prisigimdo 
tokių gijų ir verčia ant šono visą tomcat'ą :)

atsiprašau, jei ką nelabai aiškiai subūriau, bet pradžiugintų bet kokie 
pamąstymai ar pasiūlymai :)