public synchronized ValidationMessage[] validate(String prefix, String uri,
            PageData page) {
        try {
            this.uri = uri;
            // initialize
            messageVector = new Vector();

            // save the prefix
            this.prefix = prefix;

            // parse parameters if necessary
            /*
             * try { if (config == null) { configure((String)
             * getInitParameters().get(EXP_ATT_PARAM)); } } catch
             * (NoSuchElementException ex) { // parsing error return
             * vmFromString(Resources.getMessage("TLV_PARAMETER_ERROR",
             * EXP_ATT_PARAM)); }
             */

            DefaultHandler h = new Handler();

            // parse the page
            SAXParserFactory f = SAXParserFactory.newInstance();
            f.setValidating(false);
            f.setNamespaceAware(true);
            SAXParser p = f.newSAXParser();
            p.parse(page.getInputStream(), h);

            if (messageVector.size() == 0) {
                return null;
            } else {
                return vmFromVector(messageVector);
            }
        } catch (SAXException ex) {
            return vmFromString(ex.toString());
        } catch (ParserConfigurationException ex) {
            return vmFromString(ex.toString());
        } catch (IOException ex) {
            return vmFromString(ex.toString());
        }
    }