Thứ Năm, 31 tháng 7, 2014

Validation using Handler Errors

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

1 nhận xét:

  1. Blackjack: The Best Way to Play Blackjack for Real Money
    How to 태백 출장샵 play blackjack online 태백 출장마사지 · First of all, if you're an avid player of all 대전광역 출장안마 types of video poker, that's fine. · If you don't like the game of 이천 출장마사지 roulette, 인천광역 출장마사지

    Trả lờiXóa