/** * Creates a new instance of ValidatingUnmarshaller. */ public ValidatingUnmarshaller( Schema schema, XmlVisitor next ) { this.validator = schema.newValidatorHandler(); this.next = next; this.predictor = next.getPredictor(); // if the user bothers to use a validator, make validation errors fatal // so that it will abort unmarshalling. validator.setErrorHandler(new FatalAdapter(getContext())); }
public void startDocument(LocatorEx locator, NamespaceContext nsContext) throws SAXException { this.nsContext = nsContext; validator.setDocumentLocator(locator); validator.startDocument(); next.startDocument(locator,nsContext); }
public void text( CharSequence pcdata ) throws SAXException { int len = pcdata.length(); if(buf.length<len) { buf = new char[len]; } for( int i=0;i<len; i++ ) buf[i] = pcdata.charAt(i); // isn't this kinda slow? validator.characters(buf,0,len); if(predictor.expectText()) next.text(pcdata); }
public void startElement(TagName tagName) throws SAXException { if(nsContext != null) { String tagNamePrefix = tagName.getPrefix().intern(); if(tagNamePrefix != "") { validator.startPrefixMapping(tagNamePrefix, nsContext.getNamespaceURI(tagNamePrefix)); } } validator.startElement(tagName.uri,tagName.local,tagName.getQname(),tagName.atts); next.startElement(tagName); }
TypeInfoProvider tip = validatorHandler.getTypeInfoProvider(); if(tip==null) tip = noInfoProvider; this.typeInfoProvider = tip; validator.setContentHandler(sax2xni); this.setSide(xni2sax); validator.setErrorHandler(new ErrorHandlerProxy() { protected XMLErrorHandler getErrorHandler() { XMLErrorHandler handler = fErrorReporter.getErrorHandler(); validator.setResourceResolver(new LSResourceResolver() { public LSInput resolveResource(String type,String ns, String publicId, String systemId, String baseUri) { if(fEntityResolver==null) return null;
@Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (vHandler == null) { this.namespaceURI = uri; InputStream schemaStream = findSchemaFromNamespaceURI(uri); XMLSchemaFactory sf = new XMLSchemaFactory(); // Xerces Schema schema = sf.newSchema(new StreamSource(schemaStream)); this.vHandler = schema.newValidatorHandler(); configHandler = new XmlConfigHandler(vHandler.getTypeInfoProvider()); vHandler.setContentHandler(configHandler); vHandler.setErrorHandler(this); vHandler.setDocumentLocator(locator); vHandler.startDocument(); startPrefixMapping(startedPrefix, starterUri); vHandler.startElement(uri, localName, qName, atts); } else { vHandler.startElement(uri, localName, qName, atts); } }
handler.setDocumentLocator(new LocatorAdapter()); try { handler.setFeature("http://xml.org/sax/features/namespace-prefixes", true); } catch (SAXException e) { XMLStreamException xse = new XMLStreamException(e); handler.setErrorHandler(new ErrorHandler() { private String getMessage(SAXParseException e) { return "XMLSchema validation problem in: " + getArtifactName( e.getSystemId() ) + ", line: " + e.getLineNumber() + ", column: " + e.getColumnNumber() + "\n" + e.getMessage();
public ValidatingMarshalRecord(MarshalRecord marshalRecord, XMLMarshaller xmlMarshaller) { this.marshalRecord = marshalRecord; Schema schema = xmlMarshaller.getSchema(); ValidatorHandler validatorHandler = schema.newValidatorHandler(); validatorHandler.setErrorHandler(new ValidatingMarshalRecordErrorHandler(marshalRecord, xmlMarshaller.getErrorHandler())); if(xmlMarshaller.isFragment()) { try { validatorHandler.startDocument(); } catch (SAXException e) { } } validatingRecord = new ContentHandlerRecord(); validatingRecord.setMarshaller(xmlMarshaller); validatingRecord.setContentHandler(validatorHandler); validatingRecord.setEqualNamespaceResolvers(marshalRecord.hasEqualNamespaceResolvers()); }
private void validate(int event) throws SAXException { switch (event) { case START_DOCUMENT: handler.startDocument(); break; case START_ELEMENT: handleStartElement(); break; case PROCESSING_INSTRUCTION: handler.processingInstruction(super.getPITarget(), super.getPIData()); break; case CHARACTERS: case CDATA: case SPACE: case ENTITY_REFERENCE: handler.characters(super.getTextCharacters(), super.getTextStart(), super.getTextLength()); break; case END_ELEMENT: handleEndElement(); break; case END_DOCUMENT: handler.endDocument(); break; } }
@Override protected void setSAXConsumer(SAXConsumer xmlConsumer) { ValidatorHandler validatorHandler = this.schema.newValidatorHandler(); validatorHandler.setErrorHandler(new SchemaErrorHandler(this.logger, this.source.toExternalForm())); validatorHandler.setContentHandler(xmlConsumer); SAXConsumerAdapter saxConsumerAdapter = new SAXConsumerAdapter(); saxConsumerAdapter.setContentHandler(validatorHandler); super.setSAXConsumer(saxConsumerAdapter); }
@Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if (getContentHandler() == ch) { final String version = Objects.toString(atts.getValue("version"), data.firstKey().getVersion()); final Key schemaKey = new Key(version, uri); Exceptions.raiseUnless(data.containsKey(schemaKey), ValidationException::new, "Unknown validation schema %s", schemaKey); final Schema schema = data.get(schemaKey).get(); final ValidatorHandler vh = schema.newValidatorHandler(); vh.startDocument(); vh.setContentHandler(ch); super.setContentHandler(vh); } try { super.startElement(uri, localName, qName, atts); } catch (SAXParseException e) { this.e = e; } }
@Override public void startDocument() throws SAXException { if (vHandler == null) return; vHandler.startDocument(); }
/** * Handle an endElement event. * * @throws SAXException */ private void handleEndElement() throws SAXException { // fire endElement QName qname = super.getName(); handler.endElement(qname.getNamespaceURI(), qname.getLocalPart(), qname.toString()); // send endPrefixMapping events immediately after endElement event // we send them in the opposite order to that returned but this is not // actually required by SAX int nsCount = super.getNamespaceCount(); for (int i = nsCount - 1; i >= 0; i--) { String prefix = super.getNamespacePrefix(i); if (prefix == null) { // true for default namespace prefix = ""; } handler.endPrefixMapping(prefix); } }
ValidatorHandler vh = new ValidatorHandler(); vh.setContentHandler(originalContentHandler); parser.setContentHandler(vh);
private void chainValidatorsAndTypeInforProvidersAndDeclHandlers() throws SAXNotRecognizedException, SAXNotSupportedException { firstContentHandler = contentHandler; firstDeclHandler = (DeclHandler) featuresAndProperties.getProperty(ValidationConstants.PROPERTY_DECLARATION_HANDLER); firstTypeInfoProvider=null; ListIterator<Sax2DefaultHandlerWrapper> wrapperIterator = currentOrderedValidators.listIterator(currentOrderedValidators.size()); while(wrapperIterator.hasPrevious()){ Sax2DefaultHandlerWrapper wrapper=wrapperIterator.previous(); wrapper.asValidatorHandler.setContentHandler(firstContentHandler); firstContentHandler=wrapper; if (wrapper.asDeclHandler!=null){ if (wrapper.asDeclHandler instanceof ChainableDeclHandler){ ((ChainableDeclHandler)wrapper.asDeclHandler).setNextInChain(firstDeclHandler); firstDeclHandler=wrapper.asDeclHandler; } else{ firstDeclHandler = new TeeChainableDeclHandler(wrapper.asDeclHandler,firstDeclHandler); } } TypeInfoProvider wrappable=wrapper.asValidatorHandler.getTypeInfoProvider(); if (wrappable!=null){ firstTypeInfoProvider=new ChainableTypeInfoProvider(firstTypeInfoProvider,wrappable); } } }
public void endDocument() throws SAXException { this.nsContext = null; validator.endDocument(); next.endDocument(); }
public void endElement(TagName tagName ) throws SAXException { validator.endElement(tagName.uri,tagName.local,tagName.getQname()); next.endElement(tagName); }
public void endPrefixMapping(String prefix) throws SAXException { validator.endPrefixMapping(prefix); next.endPrefixMapping(prefix); }
public void startPrefixMapping(String prefix, String nsUri) throws SAXException { validator.startPrefixMapping(prefix,nsUri); next.startPrefixMapping(prefix,nsUri); }
@Override public void setDocumentLocator(Locator locator) { this.locator = locator; if (vHandler == null) return; vHandler.setDocumentLocator(locator); }