/** * Creates Java Source code (Object model) for the given XML Schema * @param schema the XML schema to generate the Java sources for * @param packageName the package for the generated source files **/ public void generateSource(Schema schema, String packageName) { SGStateInfo sInfo = new SGStateInfo(); sInfo.packageName = packageName; if(sInfo.packageName==null) sInfo.packageName=SourceGenerator.getJavaPackage(schema.getTargetNamespace()); sInfo.setPromptForOverwrite(warnOnOverwrite); sInfo.setVerbose(verbose); createClasses(schema, sInfo); } //-- generateSource
private void createClasses(ElementDecl elementDecl, SGStateInfo sInfo) { //-- when mapping schema types, only interested in producing classes //-- for elements with anonymous complex types if (SourceGenerator.mappingSchemaType2Java()) if (elementDecl.isReference() || (elementDecl.getType()!=null && elementDecl.getType().getName()!=null)) return; if (sInfo.verbose()) { System.out.print("Creating classes for element: "); System.out.println(elementDecl.getName()); } //-- create classes for sub-elements if necessary XMLType xmlType = elementDecl.getType(); //-- No type definition if (xmlType == null) { System.out.print("Type not found for element: "); System.out.println(elementDecl.getName()); return; } //-- ComplexType else if (xmlType.isComplexType()) { JClass[] classes = sourceFactory.createSourceCode(elementDecl, sInfo); processComplexType((ComplexType)xmlType, sInfo); for (int i = 0; i < classes.length; i++) processJClass(classes[i], sInfo); } //-- SimpleType else { processSimpleType((SimpleType)xmlType, sInfo); } } //-- createClasses
/** * main class used for command line invocation * @param args the String[] consisting of the command line arguments **/ public static void main(String[] args) { CommandLineOptions allOptions = new CommandLineOptions(); //-- filename flag allOptions.addFlag("i", "filename", "Sets the input filename"); //-- package name flag allOptions.addFlag("package", "package-name", "Sets the package name", true); //-- destination directory String desc = "Sets the destination output directory"; allOptions.addFlag("dest", "dest-dir", desc, true); //-- line break flag desc = "Sets the line separator style for the desired platform"; allOptions.addFlag("line-separator", "( unix | mac | win)", desc, true); //-- Force flag desc = "Suppresses non fatal warnings, such as overwriting files."; allOptions.addFlag("f", "", desc, true); //-- Help flag desc = "Displays this help screen."; allOptions.addFlag("h", "", desc, true); //-- verbose flag desc = "Prints out additional messages when creaing source"; allOptions.addFlag("verbose", "", desc, true); //-- no descriptors flag desc = "Disables the generation of the Class descriptors"; allOptions.addFlag("nodesc", "", desc, true); //-- source generator types name flag desc = "Sets the source generator types name (SGTypeFactory)"; allOptions.addFlag("types", "types", desc, true); //-- XXX maintained temporarily allOptions.addFlag("type-factory", "classname", "", true); //-- no marshalling framework methods desc = "Disables the generation of the methods specific to the XML marshalling framework"; allOptions.addFlag("nomarshall","",desc,true); //-- implements org.exolab.castor.tests.CastroTestable? desc = "Implements some specific methods to allow the generated classes to be used with Castor Testing Framework"; allOptions.addFlag("testable","",desc,true); //-- Process the specified command line options Properties options = allOptions.getOptions(args); //-- check for help option if (options.getProperty("h") != null) { PrintWriter pw = new PrintWriter(System.out, true); allOptions.printHelp(pw); pw.flush(); return; } String schemaFilename = options.getProperty("i"); String packageName = options.getProperty("package"); String lineSepStyle = options.getProperty("line-separator"); boolean force = (options.getProperty("f") != null); String typeFactory = options.getProperty("types"); boolean verbose = (options.getProperty("verbose") != null); if (schemaFilename == null) { System.out.println(appName); allOptions.printUsage(new PrintWriter(System.out)); return; } // -- XXX maintained temporarily if (typeFactory == null) typeFactory = options.getProperty("type-factory"); String lineSep = System.getProperty("line.separator"); if (lineSepStyle != null) { if ("win".equals(lineSepStyle)) { System.out.println(" - using Windows style line separation."); lineSep = "\r\n"; } else if ("unix".equals(lineSepStyle)) { System.out.println(" - using UNIX style line separation."); lineSep = "\n"; } else if ("mac".equals(lineSepStyle)) { System.out.println(" - using Macintosh style line separation."); lineSep = "\r"; } else { System.out.print("- invalid option for line-separator: "); System.out.println(lineSepStyle); System.out.println("-- using default line separator for this platform"); } } SourceGenerator sgen = null; if (typeFactory != null) { typeFactory = Configuration.getProperty("org.exolab.castor.builder.type." + typeFactory.toLowerCase(),typeFactory); try { sgen = new SourceGenerator((FieldInfoFactory)Class.forName(typeFactory).newInstance()); } catch(Exception x) { System.out.print("- invalid option for types: "); System.out.println(typeFactory); System.out.println(x); System.out.println("-- using default source generator types"); sgen = new SourceGenerator(); // default } } else { sgen = new SourceGenerator(); // default } sgen.setDestDir(options.getProperty("dest")); sgen.setLineSeparator(lineSep); sgen.setSuppressNonFatalWarnings(force); sgen.setVerbose(verbose); if (force) System.out.println("-- Suppressing non fatal warnings."); if (options.getProperty("nodesc") != null) { sgen.setDescriptorCreation(false); System.out.print("-- "); System.out.println(DISABLE_DESCRIPTORS_MSG); } if (options.getProperty("nomarshall") != null) { sgen.setCreateMarshalMethods(false); System.out.print("-- "); System.out.println(DISABLE_MARSHALL_MSG); } if (options.getProperty("testable") != null) { sgen.setTestable(true); System.out.print("-- "); System.out.println(CASTOR_TESTABLE_MSG); } try { sgen.generateSource(schemaFilename, packageName); } catch(java.io.FileNotFoundException fne) { System.out.println("unable to open XML schema file"); return; } } //-- main