Электронный магазин на Java и XML

         

Служебная библиотека документа XML - часть 3


Листинг 7.39. Метод loadXML осуществляет анализ документа XML (DOMIibrary.java)

private synchronized void loadXML(File xmlFile, String src ) { //File xmlFile = new File( src ) ; try { long timestamp = xmlFile.lastModified(); InputSource input = Resolver.createInputSource( xmlFile ); // ... the "false" flag says not to validate (faster) // XmlDocument is in the com.sun.xml.tree package Document doc = XmlDocument.createXmlDocument (input, false); domHash.put( src, doc ); trackerHash.put( src, new DomTracker( timestamp ) ); }catch(SAXParseException spe ){ StringBuffer sb = new StringBuffer( spe.toString() ); sb.append("\n Line number: " + spe.getLineNumber()); sb.append("\nColumn number: " + spe.getColumnNumber() ); sb.append("\n Public ID: " + spe.getPublicId() ); sb.append("\n System ID: " + spe.getSystemId() + "\n"); lastErr = sb.toString(); System.out.print( lastErr ); }catch( SAXException se ){ lastErr = se.toString(); System.out.println("loadXML threw " + lastErr ); domHash.put( src, lastErr ); se.printStackTrace( System.out ); }catch( IOException ie ){ lastErr = ie.toString(); System.out.println("loadXML threw " + lastErr + " trying to read " + src ); domHash.put( src, lastErr ); } } // end loadXML

Когда сервлетам требуется получить документ, они вызывают метод getDOM, показанный в листинге 7.40. Если при создании документа возникают какие-либо проблемы, то вместо ссылки на документ этот метод возвращает null. Каждый раз, когда в хэш-таблице обнаруживается требуемый документ, в ассоциированном объекте DomTracker обновляется значение времени последнего использования, которое заменяется текущим временем. Заметим, что в нескольких местах создаются выходные сообщения, которые записываются в объект System.out и служат для отладки. Мы советует закомментировать их после того, как система заработает.

Листинг 7.40. Метод getDOM (DOMIibrary.java)

// either return the doc or null if a problem public synchronized Document getDOM( String src ){ Object doc = domHash.get( src ); DomTracker dt = (DomTracker) trackerHash.get( src ); boolean newflag = false ; File f = null ; if( doc == null ){ System.out.println("DOMlibrary.getDOM new " + src ); f = new File( src ); loadXML( f, src ); // sets trackerHash doc = domHash.get( src ); dt = (DomTracker) trackerHash.get( src ); newflag = true ; System.out.println("DOMlibrary load OK"); } else { // found a document - is it up to date? f = new File( src ); if( dt.changed( f )){ System.out.println("DOMlibrary reloads " + src ); loadXML( f, src ); // sets trackerHash newflag = true ; doc = domHash.get( src ); dt = (DomTracker)trackerHash.get( src ); } } // if not a document, must be a string due to error if( ! (doc instanceof Document )){ System.out.println("DOMlibrary: " + doc ); // could try for re-read here } if( doc instanceof Document ) { if( ! newflag ){ dt = (DomTracker)trackerHash.get( src ); dt.setLastUse( System.currentTimeMillis()); } return (Document) doc ; } return null ; }




Содержание  Назад  Вперед