public Struct validate(InputSource xml) throws PageException { CFMLEngine engine = CFMLEngineFactory.getInstance(); warnings = engine.getCreationUtil().createArray(); errors = engine.getCreationUtil().createArray(); fatals = engine.getCreationUtil().createArray(); try { XMLReader parser = new XMLUtilImpl().createXMLReader("org.apache.xerces.parsers.SAXParser"); parser.setContentHandler(this); parser.setErrorHandler(this); parser.setEntityResolver(this); parser.setFeature("http://xml.org/sax/features/validation", true); parser.setFeature("http://apache.org/xml/features/validation/schema", true); parser.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true); // if(!validateNamespace) if (!Util.isEmpty(strSchema)) parser.setProperty( "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", strSchema); parser.parse(xml); } catch (SAXException e) { } catch (IOException e) { throw engine.getExceptionUtil().createXMLException(e.getMessage()); } // result Struct result = engine.getCreationUtil().createStruct(); result.setEL("warnings", warnings); result.setEL("errors", errors); result.setEL("fatalerrors", fatals); result.setEL("status", engine.getCastUtil().toBoolean(!hasErrors)); release(); return result; }
private void log(SAXParseException spe, String type, Array array) { StringBuffer sb = new StringBuffer("[" + type + "] "); String id = spe.getSystemId(); if (!Util.isEmpty(id)) { int li = id.lastIndexOf('/'); if (li != -1) sb.append(id.substring(li + 1)); else sb.append(id); } sb.append(':'); sb.append(spe.getLineNumber()); sb.append(':'); sb.append(spe.getColumnNumber()); sb.append(": "); sb.append(spe.getMessage()); sb.append(" "); array.appendEL(sb.toString()); }