mirror of
https://github.com/fr13Dev/generatingXSD
synced 2024-12-22 11:03:13 +00:00
moved to mvn
This commit is contained in:
parent
00c4bda5f5
commit
323119449e
124
src/main/java/dev/fr13/XsdSchema.java
Normal file
124
src/main/java/dev/fr13/XsdSchema.java
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
package dev.fr13;
|
||||||
|
|
||||||
|
import org.apache.commons.cli.*;
|
||||||
|
import org.apache.xmlbeans.XmlException;
|
||||||
|
import org.apache.xmlbeans.XmlObject;
|
||||||
|
import org.apache.xmlbeans.impl.inst2xsd.Inst2Xsd;
|
||||||
|
import org.apache.xmlbeans.impl.inst2xsd.Inst2XsdOptions;
|
||||||
|
import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
|
||||||
|
public class XsdSchema {
|
||||||
|
|
||||||
|
private final File SOURCE_FILE;
|
||||||
|
private final File OUTPUT_FILE;
|
||||||
|
private final String NAME_SPACE;
|
||||||
|
private final int SCHEMA_DESIGN;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException, XmlException {
|
||||||
|
|
||||||
|
XsdSchema xsdSchema = new XsdSchema(args);
|
||||||
|
xsdSchema.checkSourceFile();
|
||||||
|
|
||||||
|
XmlObject xmlObject = XmlObject.Factory.parse(xsdSchema.SOURCE_FILE);
|
||||||
|
SchemaDocument schema = xsdSchema.getSchema(xmlObject);
|
||||||
|
if (schema != null)
|
||||||
|
schema.save(xsdSchema.OUTPUT_FILE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private SchemaDocument getSchema(XmlObject xmlObject) {
|
||||||
|
|
||||||
|
Inst2XsdOptions inst2XsdOptions = new Inst2XsdOptions();
|
||||||
|
inst2XsdOptions.setDesign(SCHEMA_DESIGN);
|
||||||
|
|
||||||
|
XmlObject [] xmlObjects = new XmlObject[1];
|
||||||
|
xmlObjects[0] = xmlObject;
|
||||||
|
|
||||||
|
SchemaDocument [] schemaDocuments = Inst2Xsd.inst2xsd(xmlObjects, inst2XsdOptions);
|
||||||
|
if (schemaDocuments != null && schemaDocuments.length > 0) {
|
||||||
|
schemaDocuments[0].getSchema().setTargetNamespace(NAME_SPACE);
|
||||||
|
return schemaDocuments[0];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private XsdSchema(String[] args) {
|
||||||
|
|
||||||
|
Options options = new Options();
|
||||||
|
|
||||||
|
Option inputOption = new Option("i", "input", true, "input xml file path");
|
||||||
|
inputOption.setRequired(true);
|
||||||
|
options.addOption(inputOption);
|
||||||
|
|
||||||
|
Option outputOption = new Option("o", "output", true, "output xsd file path");
|
||||||
|
options.addOption(outputOption);
|
||||||
|
|
||||||
|
Option nameSpaceOption = new Option("n", "name-space", true, "target name space");
|
||||||
|
options.addOption(nameSpaceOption);
|
||||||
|
|
||||||
|
Option schemaOption = new Option("s", "schema-design", true,
|
||||||
|
"schema design: 1-Russian Doll, 2-Salami slice, 3-Venetian blind");
|
||||||
|
options.addOption(schemaOption);
|
||||||
|
|
||||||
|
CommandLineParser commandLineParser = new DefaultParser();
|
||||||
|
HelpFormatter helpFormatter = new HelpFormatter();
|
||||||
|
CommandLine cmd = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
cmd = commandLineParser.parse(options, args);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
System.out.println(e.getMessage());
|
||||||
|
helpFormatter.printHelp("This tool creates xsd file from xml.", options);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
SOURCE_FILE = new File(cmd.getOptionValue("input"));
|
||||||
|
|
||||||
|
String outputFile = cmd.getOptionValue("output");
|
||||||
|
if (outputFile == null) {
|
||||||
|
this.OUTPUT_FILE = new File(SOURCE_FILE.getParent() + File.separatorChar + "schema.xsd");
|
||||||
|
} else {
|
||||||
|
this.OUTPUT_FILE = new File(outputFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
String ns = cmd.getOptionValue("name-space");
|
||||||
|
NAME_SPACE = ns != null ? ns : "http://v8.default.com";
|
||||||
|
|
||||||
|
String schema = cmd.getOptionValue("schema-design");
|
||||||
|
if (schema == null) {
|
||||||
|
this.SCHEMA_DESIGN = 3;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch (schema) {
|
||||||
|
case "1":
|
||||||
|
this.SCHEMA_DESIGN = Inst2XsdOptions.DESIGN_RUSSIAN_DOLL;
|
||||||
|
break;
|
||||||
|
case "2":
|
||||||
|
this.SCHEMA_DESIGN = Inst2XsdOptions.DESIGN_SALAMI_SLICE;
|
||||||
|
break;
|
||||||
|
case "3":
|
||||||
|
this.SCHEMA_DESIGN = Inst2XsdOptions.DESIGN_VENETIAN_BLIND;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown value for design type.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkSourceFile() throws FileNotFoundException {
|
||||||
|
|
||||||
|
Path path = Paths.get(SOURCE_FILE.toURI());
|
||||||
|
if (Files.notExists(path)) {
|
||||||
|
throw new FileNotFoundException("no such file " + SOURCE_FILE.getPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user