[ Pobierz całość w formacie PDF ]
.Procedury obsługi błędówOprócz interfejsu ContentHandler, SAX udostępnia również interfejs ErrorHandler, słu­żący do obsługi sytuacji awaryjnych zaistniałych w czasie przetwarzania.Klasa ta działa podobnie jak omówiona wcześniej procedura obsługi dokumentu, ale zdefiniowano w niej jedynie trzy wywołania wsteczne.Przy pomocy tych trzech metod SAX obsługuje i powiadamia o wszystkich możliwych błędach.Każda metoda otrzymuje informacje o błędzie lub ostrzeżeniu poprzez klasę SAXPar­se­Ex­ce­p­tion.Obiekt ten zawiera numer wiersza, w którym wystąpił błąd, identyfikator URI prze­twa­rza­nego dokumentu (dokument przetwarzany lub zewnętrzne odwołanie wewnątrz tego dokumentu) oraz zwykłe informacje o błędzie, takie jak komunikat i dane ze śledzenia stosu.Ponadto każda metoda może zgłosić SAXException.Na początku może się to wydawać nieco dziwne — pro­gram obsługi wyjątków zgłaszający wyjątek? Należy jednak pamiętać, że każda z procedur obsługi błędów otrzymuje wyjątki związane z przetwarzaniem.Może to być ostrzeżenie, które nie po­win­no przerwać procesu przetwarzania, lub błąd, który należy rozwiązać, aby to przetwarzanie mogło być kontynuowane.Jednak wywołanie takie może także wykonywać operacje wejścia-wyjścia lub inne, które mogą spowodować zgłoszenie wyjątku — i wyjątek ten należy przekazać aż „na samą górę”, do aplikacji.Służy do tego właśnie wyjątek SAXException.Załóżmy, że procedura obsługi błędów otrzymuje powiadomienia o błędzie i zapisuje je do pliku dziennika błędów.Metoda taka musi być w stanie albo dopisać informacje do pliku istniejącego, albo stworzyć nowy plik.Gdyby w czasie przetwarzania dokumentu XML wystąpiło ostrzeżenie, także „dowiadywałaby” się o nim ta metoda.Ostrzeżenie miałoby na celu wywołanie od­po­wie­dniej procedury i nie przerywałoby przetwarzania.Jednakże, jeśli procedura obsługi błędów nie byłaby w stanie zapisywać do pliku dziennika, musiałaby zakomunikować parserowi i aplikacji, że przetwarzanie ma zostać przerwane.Efekt taki można uzyskać poprzez przechwycenie wszystkich wyjątków wejścia-wyjścia i ponowne zgłoszenie ich aplikacji wywołującej, powodując przerwanie przetwarzania.Powyższy przykład wyjaśnia, dlaczego procedury obsługi błędów muszą mieć moż­liwość zgłaszania wyjątków (patrz przykład 3.3).Przykład 3.3.Procedura obsługi, która może zgłosić SAXExceptionpublic void warning(SAXParseException exception)throws SAXException {try {FileWriter fw = new FileWriter("error.log");BufferedWriter bw = new BufferedWriter(fw);bw.write("Ostrzeżenie: " + exception.getMessage() + "\n");bw.flush();bw.close();fw.close();} catch (Exception e) {throws new SAXException("Brak możliwości zapisu do pliku dziennika", e);}}Teraz można już zdefiniować szkielet procedury obsługi błędów i zarejestrować ją w parserze w taki sam sposób, jak w przypadku procedury obsługi zawartości.Najpierw trzeba zaimportować klasę SAXParseException i ErrorHandler:import java.io.IOException;import org.xml.sax.Attributes;import org.xml.sax.ContentHandler;import org.xml.sax.ErrorHandler;import org.xml.sax.Locator;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import org.xml.sax.XMLReader;Teraz w tym samym pliku z programem w Javie (znów na dole, po klasie MyContentHandler) należy zaimplementować interfejs ErrorHandler, zdefiniowany w ramach SAX-a.Podobnie jak przy omawianiu klasy ContentHandler, poniżej są przedstawione puste implementacje, które wkrótce zostaną wypełnione treścią:/*** <b><code>MyErrorHandler</code></b> implementuje interfejs SAX* <code>ErrorHandler</code> i definiuje zachowanie wywołań* wstecznych powiązanych z błędami w XML-u.*/class MyErrorHandler implements ErrorHandler {/*** <p>* Powiadomienie o ostrzeżeniu; żadne zasady XML nie zostały "złamane",* ale wydaje się, że czegoś brakuje lub coś jest wpisane niepoprawnie.* </p>** @param exception <code>SAXParseException</code> -- wyjątek, jaki nastąpił.* @throws <code>SAXException</code> gdy coś pójdzie nie tak.*/public void warning(SAXParseException exception)throws SAXException {}/*** <p>* Tutaj komunikujemy o błędzie, jeśli taki się pojawi; błąd oznacza, że* złamano regułę i zazwyczaj pojawia się w czasie sprawdzania składni;* przetwarzanie może jeszcze być kontynuowane [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • elanor-witch.opx.pl