diff --git a/pom.xml b/pom.xml index da38b15..19ec39b 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,20 @@ docjava + + + org.springframework.boot + spring-boot-maven-plugin + 3.1.2 + + + + repackage + + + + + diff --git a/src/main/java/ru/javaops/docjava/Commands.java b/src/main/java/ru/javaops/docjava/Commands.java index d7d639c..05d819b 100644 --- a/src/main/java/ru/javaops/docjava/Commands.java +++ b/src/main/java/ru/javaops/docjava/Commands.java @@ -12,12 +12,20 @@ @ShellComponent public class Commands { + @ShellMethod(key = "xsd", value = "Validate XML file against XSD (XML Schema)") public void xsdValidate(@ShellOption(value = {"input", "-i"}, help = "Input file") File inputFile, @ShellOption(value = {"schema", "-s"}, help = "XSD schema file") File xsdSchema) throws IOException, SAXException { SchemaUtil.validate(inputFile, xsdSchema); } + @ShellMethod(key = "say", value = "Say hello to user", group = "Math") + public String sayHello(@ShellOption(value = {"-n", "--name"}, defaultValue = "User") String name) { + System.out.println("Hello " + name); + return name; + } + + @ShellMethod(key = "jaxb", value = "Process XML file via JAXB") public void jaxbProcess( @ShellOption(value = {"input", "-i"}, help = "Input file") File inputFile, diff --git a/src/main/java/ru/javaops/docjava/xml/xsd/SchemaUtil.java b/src/main/java/ru/javaops/docjava/xml/xsd/SchemaUtil.java index 249dc60..a1b1408 100644 --- a/src/main/java/ru/javaops/docjava/xml/xsd/SchemaUtil.java +++ b/src/main/java/ru/javaops/docjava/xml/xsd/SchemaUtil.java @@ -9,10 +9,14 @@ public class SchemaUtil { + private SchemaUtil() { + } + public static void validate(File inputFile, File xsdSchema) throws IOException, SAXException { try (Reader reader = Files.newBufferedReader(inputFile.toPath())) { Schemas.validate(reader, Schemas.of(xsdSchema)); } System.out.println(inputFile.getAbsolutePath() + " is valid"); } + } diff --git a/src/main/java/ru/javaops/docjava/xml/xsd/Schemas.java b/src/main/java/ru/javaops/docjava/xml/xsd/Schemas.java index 8d7f403..cab7d97 100644 --- a/src/main/java/ru/javaops/docjava/xml/xsd/Schemas.java +++ b/src/main/java/ru/javaops/docjava/xml/xsd/Schemas.java @@ -14,7 +14,6 @@ public class Schemas { private static final SchemaFactory SCHEMA_FACTORY = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - // SchemaFactory is not thread-safe public static synchronized Schema of(File file) { try { return SCHEMA_FACTORY.newSchema(file); @@ -27,7 +26,9 @@ public static void validate(String str, Schema schema) throws IOException, SAXEx validate(new StringReader(str), schema); } + public static void validate(Reader reader, Schema schema) throws IOException, SAXException { schema.newValidator().validate(new StreamSource(reader)); } -} \ No newline at end of file + +} diff --git a/src/test/java/ru/javaops/docjava/xml/xsd/SchemaUtilTest.java b/src/test/java/ru/javaops/docjava/xml/xsd/SchemaUtilTest.java index fd59015..fe81038 100644 --- a/src/test/java/ru/javaops/docjava/xml/xsd/SchemaUtilTest.java +++ b/src/test/java/ru/javaops/docjava/xml/xsd/SchemaUtilTest.java @@ -2,24 +2,24 @@ import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; import java.io.File; import java.io.IOException; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.*; class SchemaUtilTest { - private static final File xmlSchema = new File("in/usersWithMeals.xsd"); + + private static final File xmlSchema = new File("in/userWithMeals.xsd"); @Test - void validateOK() throws IOException, SAXException { + void validateOk() throws IOException, SAXException { SchemaUtil.validate(new File("in/usersWithMeals.xml"), xmlSchema); } @Test - void testValidateNOK() throws IOException { - assertThrows(SAXParseException.class, + void testValidateNOK() { + assertThrows(SAXException.class, () -> SchemaUtil.validate(new File("in/badXmlFile.xml"), xmlSchema), "Except bad format exception"); } } \ No newline at end of file