use of com.helger.schematron.sch.SchematronResourceSCH in project ph-schematron by phax.
the class SchematronValidationMojo method execute.
public void execute() throws MojoExecutionException, MojoFailureException {
StaticLoggerBinder.getSingleton().setMavenLog(getLog());
if (m_aSchematronFile == null)
throw new MojoExecutionException("No Schematron file specified!");
if (m_aSchematronFile.exists() && !m_aSchematronFile.isFile())
throw new MojoExecutionException("The specified Schematron file " + m_aSchematronFile + " is not a file!");
if (m_sSchematronProcessingEngine == null)
throw new MojoExecutionException("An invalid Schematron processing instance is specified! Only one of the following values is allowed: " + StringHelper.getImplodedMapped(", ", ESchematronMode.values(), x -> "'" + x.getID() + "'"));
if (m_aXmlDirectory == null && m_aXmlErrorDirectory == null)
throw new MojoExecutionException("No XML directory specified - positive or negative directory must be present!");
if (m_aXmlDirectory != null) {
if (m_aXmlDirectory.exists() && !m_aXmlDirectory.isDirectory())
throw new MojoExecutionException("The specified XML directory " + m_aXmlDirectory + " is not a directory!");
if (ArrayHelper.isEmpty(m_aXmlIncludes))
throw new MojoExecutionException("No XML include pattern specified!");
if (m_aSvrlDirectory != null) {
if (!m_aSvrlDirectory.exists() && !m_aSvrlDirectory.mkdirs())
throw new MojoExecutionException("Failed to create the SVRL directory " + m_aSvrlDirectory);
}
}
if (m_aXmlErrorDirectory != null) {
if (m_aXmlErrorDirectory.exists() && !m_aXmlErrorDirectory.isDirectory())
throw new MojoExecutionException("The specified erroneous XML directory " + m_aXmlErrorDirectory + " is not a directory!");
if (ArrayHelper.isEmpty(m_aXmlErrorIncludes))
throw new MojoExecutionException("No erroneous XML include pattern specified!");
if (m_aSvrlErrorDirectory != null) {
if (!m_aSvrlErrorDirectory.exists() && !m_aSvrlErrorDirectory.mkdirs())
throw new MojoExecutionException("Failed to create the erroneous SVRL directory " + m_aSvrlErrorDirectory);
}
}
// 1. Parse Schematron file
ISchematronResource aSch;
IErrorList aSCHErrors;
switch(ESchematronMode.getFromIDOrNull(m_sSchematronProcessingEngine)) {
case PURE:
{
// pure
final CollectingPSErrorHandler aErrorHdl = new CollectingPSErrorHandler();
final SchematronResourcePure aRealSCH = new SchematronResourcePure(new FileSystemResource(m_aSchematronFile));
aRealSCH.setPhase(m_sPhaseName);
aRealSCH.setLenient(m_bLenient);
// language code is ignored
// custom parameters are ignored
aRealSCH.setErrorHandler(aErrorHdl);
aRealSCH.validateCompletely();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getAllErrors();
break;
}
case SCHEMATRON:
{
// SCH
final CollectingTransformErrorListener aErrorHdl = new CollectingTransformErrorListener();
final SchematronResourceSCH aRealSCH = new SchematronResourceSCH(new FileSystemResource(m_aSchematronFile));
aRealSCH.setPhase(m_sPhaseName);
aRealSCH.setLanguageCode(m_sLanguageCode);
aRealSCH.setForceCacheResult(m_bForceCacheResult);
aRealSCH.parameters().setAll(m_aCustomParameters);
aRealSCH.setErrorListener(aErrorHdl);
aRealSCH.isValidSchematron();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getErrorList();
break;
}
case SCHXSLT_XSLT2:
{
// SchXslt
final CollectingTransformErrorListener aErrorHdl = new CollectingTransformErrorListener();
final SchematronResourceSchXslt_XSLT2 aRealSCH = new SchematronResourceSchXslt_XSLT2(new FileSystemResource(m_aSchematronFile));
aRealSCH.setPhase(m_sPhaseName);
aRealSCH.setLanguageCode(m_sLanguageCode);
aRealSCH.setForceCacheResult(m_bForceCacheResult);
aRealSCH.parameters().setAll(m_aCustomParameters);
aRealSCH.setErrorListener(aErrorHdl);
aRealSCH.isValidSchematron();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getErrorList();
break;
}
case XSLT:
{
// SCH
final CollectingTransformErrorListener aErrorHdl = new CollectingTransformErrorListener();
final SchematronResourceXSLT aRealSCH = new SchematronResourceXSLT(new FileSystemResource(m_aSchematronFile));
// phase is ignored
// language code is ignored
aRealSCH.parameters().setAll(m_aCustomParameters);
aRealSCH.setErrorListener(aErrorHdl);
aRealSCH.isValidSchematron();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getErrorList();
break;
}
default:
throw new MojoExecutionException("No handler for processing engine '" + m_sSchematronProcessingEngine + "'");
}
if (aSCHErrors != null) {
// Error validating the Schematrons!!
boolean bAnyError = false;
for (final IError aError : aSCHErrors) {
if (aError.getErrorLevel().isGE(EErrorLevel.ERROR))
bAnyError = true;
PluginErrorListener.logIError(buildContext, m_aSchematronFile, aError);
}
if (bAnyError)
throw new MojoExecutionException("The provided Schematron file contains errors. See log for details.");
}
getLog().info("Successfully parsed Schematron file '" + m_aSchematronFile.getPath() + "'");
// 2. for all XML files that match the pattern
final ICommonsList<String> aErrorMessages = new CommonsArrayList<>();
if (m_aXmlDirectory != null) {
// Expect success
_performValidation(aSch, m_aXmlDirectory, m_aXmlIncludes, m_aXmlExcludes, m_aSvrlDirectory, true, aErrorMessages);
}
if (m_aXmlErrorDirectory != null) {
// Expect error
_performValidation(aSch, m_aXmlErrorDirectory, m_aXmlErrorIncludes, m_aXmlErrorExcludes, m_aSvrlErrorDirectory, false, aErrorMessages);
}
if (!m_bFailFast && aErrorMessages.isNotEmpty()) {
// Build collecting error message
aErrorMessages.add(0, aErrorMessages.size() + " errors found:");
final String sCollectedErrorMessages = StringHelper.getImploded("\n ", aErrorMessages);
throw new MojoFailureException(sCollectedErrorMessages);
}
}
use of com.helger.schematron.sch.SchematronResourceSCH in project ph-schematron by phax.
the class Schematron method execute.
@Override
public void execute() throws BuildException {
boolean bCanRun = false;
if (m_aSchematronFile == null)
_errorOrFail("No Schematron file specified!");
else if (m_aSchematronFile.exists() && !m_aSchematronFile.isFile())
_errorOrFail("The specified Schematron file " + m_aSchematronFile + " is not a file!");
else if (m_eSchematronProcessingEngine == null)
_errorOrFail("An invalid Schematron processing instance is specified! Only one of the following values is allowed: " + StringHelper.getImplodedMapped(", ", ESchematronMode.values(), x -> "'" + x.getID() + "'"));
else if (m_aResCollections.isEmpty())
_errorOrFail("No XML resources to be validated specified! Add e.g. a <fileset> element.");
else if (m_aSvrlDirectory != null && !m_aSvrlDirectory.exists() && !m_aSvrlDirectory.mkdirs())
_errorOrFail("Failed to create the SVRL directory " + m_aSvrlDirectory);
else
bCanRun = true;
if (bCanRun) {
// Set error level
if (m_aErrorRoles.isNotEmpty()) {
// Set global default error level determinator
SVRLHelper.setErrorLevelDeterminator(new DefaultSVRLErrorLevelDeterminator() {
@Override
@Nonnull
public IErrorLevel getErrorLevelFromString(@Nullable final String sFlag) {
if (sFlag != null) {
// Check custom error roles; #66
for (final Schematron.ErrorRole aCustomRole : m_aErrorRoles) if (aCustomRole.equalsIgnoreCase(sFlag))
return EErrorLevel.ERROR;
}
// Fall back to default
return super.getErrorLevelFromString(sFlag);
}
});
}
// 1. Parse Schematron file
final Locale aDisplayLocale = Locale.US;
ISchematronResource aSch = null;
IErrorList aSCHErrors = null;
switch(m_eSchematronProcessingEngine) {
case PURE:
{
// pure
final CollectingPSErrorHandler aErrorHdl = new CollectingPSErrorHandler();
final SchematronResourcePure aRealSCH = new SchematronResourcePure(new FileSystemResource(m_aSchematronFile));
aRealSCH.setPhase(m_sPhaseName);
aRealSCH.setErrorHandler(aErrorHdl);
aRealSCH.setEntityResolver(getEntityResolver());
aRealSCH.validateCompletely();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getAllErrors();
break;
}
case SCHEMATRON:
{
// SCH
final IStringMap aParams = new StringMap();
m_aParameters.forEach(x -> x.addToMap(aParams));
if (aParams.isNotEmpty())
_info("Using the following custom parameters: " + aParams);
final CollectingTransformErrorListener aErrorHdl = new CollectingTransformErrorListener();
final SchematronResourceSCH aRealSCH = new SchematronResourceSCH(new FileSystemResource(m_aSchematronFile));
aRealSCH.setPhase(m_sPhaseName);
aRealSCH.setLanguageCode(m_sLanguageCode);
aRealSCH.setForceCacheResult(m_bForceCacheResult);
aRealSCH.setErrorListener(aErrorHdl);
aRealSCH.setURIResolver(getURIResolver());
aRealSCH.setEntityResolver(getEntityResolver());
aRealSCH.parameters().setAll(aParams);
aRealSCH.isValidSchematron();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getErrorList();
break;
}
case SCHXSLT_XSLT2:
{
// SchXslt
final IStringMap aParams = new StringMap();
m_aParameters.forEach(x -> x.addToMap(aParams));
if (aParams.isNotEmpty())
_info("Using the following custom parameters: " + aParams);
final CollectingTransformErrorListener aErrorHdl = new CollectingTransformErrorListener();
final SchematronResourceSchXslt_XSLT2 aRealSCH = new SchematronResourceSchXslt_XSLT2(new FileSystemResource(m_aSchematronFile));
aRealSCH.setPhase(m_sPhaseName);
aRealSCH.setLanguageCode(m_sLanguageCode);
aRealSCH.setForceCacheResult(m_bForceCacheResult);
aRealSCH.setErrorListener(aErrorHdl);
aRealSCH.setURIResolver(getURIResolver());
aRealSCH.setEntityResolver(getEntityResolver());
aRealSCH.parameters().setAll(aParams);
aRealSCH.isValidSchematron();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getErrorList();
break;
}
case XSLT:
{
// XSLT
final IStringMap aParams = new StringMap();
m_aParameters.forEach(x -> x.addToMap(aParams));
if (aParams.isNotEmpty())
_info("Using the following custom parameters: " + aParams);
final CollectingTransformErrorListener aErrorHdl = new CollectingTransformErrorListener();
final SchematronResourceXSLT aRealSCH = new SchematronResourceXSLT(new FileSystemResource(m_aSchematronFile));
// phase and language are ignored because this was decided when the
// XSLT was created
aRealSCH.setErrorListener(aErrorHdl);
aRealSCH.setURIResolver(getURIResolver());
aRealSCH.setEntityResolver(getEntityResolver());
aRealSCH.parameters().setAll(aParams);
aRealSCH.isValidSchematron();
aSch = aRealSCH;
aSCHErrors = aErrorHdl.getErrorList();
break;
}
default:
_errorOrFail("No handler for processing engine '" + m_eSchematronProcessingEngine + "'");
break;
}
boolean bAnyParsingError = false;
if (aSCHErrors != null)
// Error validating the Schematrons!!
for (final IError aError : aSCHErrors) if (aError.getErrorLevel().isGE(EErrorLevel.ERROR)) {
_error("Error in Schematron: " + aError.getAsString(aDisplayLocale));
bAnyParsingError = true;
} else if (aError.getErrorLevel().isGE(EErrorLevel.WARN))
_warn("Warning in Schematron: " + aError.getAsString(aDisplayLocale));
else
_info("Information in Schematron: " + aError.getAsString(aDisplayLocale));
if (bAnyParsingError)
_errorOrFail("The provided Schematron file contains errors. See log for details.");
else {
// Schematron is okay
_info("Successfully parsed Schematron file '" + m_aSchematronFile.getPath() + "'");
// Start validation
_performValidation(aSch, m_aResCollections, m_aSvrlDirectory, m_bExpectSuccess);
}
}
}
use of com.helger.schematron.sch.SchematronResourceSCH in project ph-schematron by phax.
the class Issue008Test method validateAndProduceSVRL.
public static void validateAndProduceSVRL(@Nonnull final File aSchematron, final File aXML) throws Exception {
final SchematronResourceSCH aSCH = SchematronResourceSCH.fromFile(aSchematron);
// Assign custom parameters
aSCH.parameters().put("xyz", "mobile");
aSCH.parameters().put("expected", "");
if (false)
System.out.println(XMLWriter.getNodeAsString(aSCH.getXSLTProvider().getXSLTDocument()));
// Perform validation
final SchematronOutputType aSVRL = aSCH.applySchematronValidationToSVRL(new FileSystemResource(aXML));
assertNotNull(aSVRL);
if (false)
System.out.println(new SVRLMarshaller().getAsString(aSVRL));
}
use of com.helger.schematron.sch.SchematronResourceSCH in project ph-schematron by phax.
the class Issue101Test method _validateAndProduceSVRL.
private static void _validateAndProduceSVRL(@Nonnull final File aSchematron, @Nonnull final File aXML) throws Exception {
SchematronDebug.setSaveIntermediateXSLTFiles(true);
final SchematronResourceSCH aSCH = SchematronResourceSCH.fromFile(aSchematron);
aSCH.setAllowForeignElements(true);
// Perform validation
final SchematronOutputType aSVRL = aSCH.applySchematronValidationToSVRL(new FileSystemResource(aXML));
assertNotNull(aSVRL);
LOGGER.info("SVRL:\n" + new SVRLMarshaller().getAsString(aSVRL));
assertEquals(2, SVRLHelper.getAllFailedAssertionsAndSuccessfulReports(aSVRL).size());
}
use of com.helger.schematron.sch.SchematronResourceSCH in project ph-schematron by phax.
the class IssueGlobalLetTest method validateAndProduceSVRL.
public static void validateAndProduceSVRL(final File schematron, final File xml) throws Exception {
final IReadableResource aSchematron = new FileSystemResource(schematron.getAbsoluteFile());
final IReadableResource anXMLSource = new FileSystemResource(xml.getAbsoluteFile());
final AbstractSchematronResource pure = new SchematronResourceSCH(aSchematron);
final SchematronOutputType aSVRL = pure.applySchematronValidationToSVRL(anXMLSource);
assertNotNull(aSVRL);
if (false)
LOGGER.info(new SVRLMarshaller().setFormattedOutput(true).getAsString(aSVRL));
}
Aggregations