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 :)