I. Nội dung chính.
- Handling Errors.
- Validator
II. Handling Errors.
a. Trường hợp parsers không có validator.
- Khi xảy ra lỗi thì parser sẽ xét xem lỗi đó có cần thiết để
parser phải ngừng việc quét dữ liệu không?
+ Nếu như có thì parser sẽ ném ra một ngoại lệ.
+ Còn nếu như không cần thiết phải dừng việc phân tích lại
thì Default Error Handler sẽ sinh ra một ngoại lệ.
Các bước xử lý sẽ như hình dưới:
b. Trường hợp sử dụng validator cho parser
- Các bước xử lý:
Đầu tiên một SAXParser sẽ được tạo
ra à tiếp theo đó sẽ được cài đặt chế độ
validation vào parser đó à
Tiếp đó là cài đặt một file XML Schema để làm nhiệm vụ validation à Tạo ra và đăng kí một
ErrorHandler cùng với đối tượng của interface SAXParser à Tiến hành phân tích tài liệu
XML để validate cái XML schema cùng với nó à
Và cuối cùng các lỗi sẽ được tạo ra bởi parser được đăng kí cùng ErrorHandler
và nhận được thông tin về lỗi từ đó.
Demo:
Đầu tiên ta tạo một project với
tên là Demo_Validation_Handler. Tiếp đó ta tạo một class với tên là
ValidationHandler cho nó extend DefaultHandler sau đó override 3 method là :
fatalError, error, warning như dưới đây:
package
demo_validation_handler;
import
org.xml.sax.SAXException;
import
org.xml.sax.SAXParseException;
import
org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Nguyen Minh An
*/
public
class ValidationHandler extends DefaultHandler {
@Override
public void fatalError(SAXParseException
saxpe) throws SAXException {
System.out.println("Fatal Error
at: " + saxpe.getLineNumber() + saxpe.getMessage());
}
@Override
public void error(SAXParseException saxpe)
throws SAXException {
System.out.println("Error at:
" + saxpe.getLineNumber() + saxpe.getMessage());
}
@Override
public void warning(SAXParseException
saxpe) throws SAXException {
System.out.println("Warning at:
" + saxpe.getLineNumber() + saxpe.getMessage());
}
}
Tiếp đó ta tạo file xml với tên tomcat-users.xml
và tạo ra nội dung như dưới đây:
<?xml version="1.0"
encoding="UTF-8"?>
<tomcat-users>
<role
rolename="tomcat"/>
<role
rolename="role1"/>
<user
username="tomcat" password="tomcat"
roles="tomcat"/>
<user
username="both" password="tomcat" roles="tomcat,role1"/>
<user
username="role1" password="tomcat"
roles="role1"/>
<user
password="admin" role="manager-script,admin"
username="admin">
</tomcat-users>
Như ta đã thấy thì thẻ <user> cuối cùng bị thiếu dấu "/" cho nên thẻ này không hợp lệ. Tiếp đó ta viết vào phương thức chứa hàm main như dưới:
public
static void main(String[] args) {
SAXParserFactory fac = SAXParserFactory.newInstance();
try {
SAXParser parser = fac.newSAXParser();
parser.parse("D:\\NetBean\\Demo_Validation_Handler\\src\\tomcat-users.xml",
new ValidationHandler());
}
catch (IOException ex) {
Logger.getLogger(Demo_Validation_Handler.class.getName()).log(Level.SEVERE,
null, ex);
}
catch (ParserConfigurationException | SAXException ex) {
ex.getMessage();
}
}
Các bạn có thể download source code tại đây