/** * */ package org.jentrata.validation.xml; import java.io.File; import java.io.IOException; import java.util.Properties; import javax.xml.soap.AttachmentPart; import javax.xml.soap.SOAPException; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.jentrata.validation.ValidationException; import org.jentrata.validation.ValidationProcessor; import org.xml.sax.SAXException; /** * @author aaronwalker * */ public class SchemaValidator implements org.jentrata.validation.Validator { private static final String SCHEMA_LANGUAGE = "http://www.w3.org/2001/XMLSchema"; private SchemaFactory factory; private File schemaFile; private Schema xsdScheme; private Properties config; /* (non-Javadoc) * @see org.jentrata.validation.Validator#init(java.util.Properties) */ public void init(Properties config) { this.config = config; factory = SchemaFactory.newInstance(SCHEMA_LANGUAGE); schemaFile = new File(getSchemaLocation()); try { xsdScheme = factory.newSchema(schemaFile); } catch (SAXException e) { throw new RuntimeException(e); } } /* (non-Javadoc) * @see org.jentrata.validation.Validator#validate(javax.xml.soap.AttachmentPart, java.lang.String) */ public void validate(AttachmentPart payload) throws ValidationException { Validator validator = xsdScheme.newValidator(); Source source; try { source = new StreamSource(payload.getRawContent()); validator.validate(source); } catch (SOAPException e) { ValidationProcessor.core.log.error("unable to schema validate payload " + e); ValidationProcessor.core.log.debug("",e); } catch (SAXException e) { throw new ValidationException(e.getMessage(),e); } catch (IOException e) { ValidationProcessor.core.log.error("unable to schema validate payload " + e); ValidationProcessor.core.log.debug("",e); } } protected String getSchemaLocation() { return (String)config.get("schemaLocation"); } }