/** * Sets the {@link NameConverter}. * * <p>This method is for plugins to call to set a custom {@link NameConverter}. * * @param nc The {@link NameConverter} to be installed. Must not be null. * @param owner Identifies the plugin that owns this {@link NameConverter}. When two {@link * Plugin}s try to call this method, this allows XJC to report it as a user-friendly error * message. * @throws BadCommandLineException If a conflit happens, this exception carries a user-friendly * error message, indicating a conflict. */ public void setNameConverter(NameConverter nc, Plugin owner) throws BadCommandLineException { // since this method is for plugins, make it bit more fool-proof than usual if (nc == null) throw new IllegalArgumentException(); if (nameConverter != null) { throw new BadCommandLineException( Messages.format( Messages.NAME_CONVERTER_CONFLICT, nameConverterOwner.getOptionName(), owner.getOptionName())); } this.nameConverterOwner = owner; this.nameConverter = nc; }
/** * Sets the {@link FieldRendererFactory}. * * <p>This method is for plugins to call to set a custom {@link FieldRendererFactory}. * * @param frf The {@link FieldRendererFactory} to be installed. Must not be null. * @param owner Identifies the plugin that owns this {@link FieldRendererFactory}. When two {@link * Plugin}s try to call this method, this allows XJC to report it as a user-friendly error * message. * @throws BadCommandLineException If a conflit happens, this exception carries a user-friendly * error message, indicating a conflict. */ public void setFieldRendererFactory(FieldRendererFactory frf, Plugin owner) throws BadCommandLineException { // since this method is for plugins, make it bit more fool-proof than usual if (frf == null) throw new IllegalArgumentException(); if (fieldRendererFactoryOwner != null) { throw new BadCommandLineException( Messages.format( Messages.FIELD_RENDERER_CONFLICT, fieldRendererFactoryOwner.getOptionName(), owner.getOptionName())); } this.fieldRendererFactoryOwner = owner; this.fieldRendererFactory = frf; }
/** * Parses an option <code>args[i]</code> and return the number of tokens consumed. * * @return 0 if the argument is not understood. Returning 0 will let the caller report an error. * @exception BadCommandLineException If the callee wants to provide a custom message for an * error. */ public int parseArgument(String[] args, int i) throws BadCommandLineException { if (args[i].equals("-classpath") || args[i].equals("-cp")) { String a = requireArgument(args[i], args, ++i); for (String p : a.split(File.pathSeparator)) { File file = new File(p); try { classpaths.add(file.toURL()); } catch (MalformedURLException e) { throw new BadCommandLineException( Messages.format(Messages.NOT_A_VALID_FILENAME, file), e); } } return 2; } if (args[i].equals("-d")) { targetDir = new File(requireArgument("-d", args, ++i)); if (!targetDir.exists()) throw new BadCommandLineException(Messages.format(Messages.NON_EXISTENT_DIR, targetDir)); return 2; } if (args[i].equals("-readOnly")) { readOnly = true; return 1; } if (args[i].equals("-p")) { defaultPackage = requireArgument("-p", args, ++i); if (defaultPackage.length() == 0) { // user specified default package // there won't be any package to annotate, so disable them // automatically as a usability feature packageLevelAnnotations = false; } return 2; } if (args[i].equals("-debug")) { debugMode = true; verbose = true; return 1; } if (args[i].equals("-nv")) { strictCheck = false; return 1; } if (args[i].equals("-npa")) { packageLevelAnnotations = false; return 1; } if (args[i].equals("-no-header")) { noFileHeader = true; return 1; } if (args[i].equals("-verbose")) { verbose = true; return 1; } if (args[i].equals("-quiet")) { quiet = true; return 1; } if (args[i].equals("-XexplicitAnnotation")) { runtime14 = true; return 1; } if (args[i].equals("-enableIntrospection")) { enableIntrospection = true; return 1; } if (args[i].equals("-disableXmlSecurity")) { disableXmlSecurity = true; return 1; } if (args[i].equals("-contentForWildcard")) { contentForWildcard = true; return 1; } if (args[i].equals("-XautoNameResolution")) { automaticNameConflictResolution = true; return 1; } if (args[i].equals("-b")) { addFile(requireArgument("-b", args, ++i), bindFiles, ".xjb"); return 2; } if (args[i].equals("-dtd")) { schemaLanguage = Language.DTD; return 1; } if (args[i].equals("-relaxng")) { schemaLanguage = Language.RELAXNG; return 1; } if (args[i].equals("-relaxng-compact")) { schemaLanguage = Language.RELAXNG_COMPACT; return 1; } if (args[i].equals("-xmlschema")) { schemaLanguage = Language.XMLSCHEMA; return 1; } if (args[i].equals("-wsdl")) { schemaLanguage = Language.WSDL; return 1; } if (args[i].equals("-extension")) { compatibilityMode = EXTENSION; return 1; } if (args[i].equals("-target")) { String token = requireArgument("-target", args, ++i); target = SpecVersion.parse(token); if (target == null) throw new BadCommandLineException(Messages.format(Messages.ILLEGAL_TARGET_VERSION, token)); return 2; } if (args[i].equals("-httpproxyfile")) { if (i == args.length - 1 || args[i + 1].startsWith("-")) { throw new BadCommandLineException(Messages.format(Messages.MISSING_PROXYFILE)); } File file = new File(args[++i]); if (!file.exists()) { throw new BadCommandLineException(Messages.format(Messages.NO_SUCH_FILE, file)); } try { BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); parseProxy(in.readLine()); in.close(); } catch (IOException e) { throw new BadCommandLineException( Messages.format(Messages.FAILED_TO_PARSE, file, e.getMessage()), e); } return 2; } if (args[i].equals("-httpproxy")) { if (i == args.length - 1 || args[i + 1].startsWith("-")) { throw new BadCommandLineException(Messages.format(Messages.MISSING_PROXY)); } parseProxy(args[++i]); return 2; } if (args[i].equals("-host")) { proxyHost = requireArgument("-host", args, ++i); return 2; } if (args[i].equals("-port")) { proxyPort = requireArgument("-port", args, ++i); return 2; } if (args[i].equals("-catalog")) { // use Sun's "XML Entity and URI Resolvers" by Norman Walsh // to resolve external entities. // http://www.sun.com/xml/developers/resolver/ File catalogFile = new File(requireArgument("-catalog", args, ++i)); try { addCatalog(catalogFile); } catch (IOException e) { throw new BadCommandLineException( Messages.format(Messages.FAILED_TO_PARSE, catalogFile, e.getMessage()), e); } return 2; } if (args[i].equals("-Xtest-class-name-allocator")) { classNameAllocator = new ClassNameAllocator() { public String assignClassName(String packageName, String className) { System.out.printf("assignClassName(%s,%s)\n", packageName, className); return className + "_Type"; } }; return 1; } if (args[i].equals("-encoding")) { encoding = requireArgument("-encoding", args, ++i); try { if (!Charset.isSupported(encoding)) { throw new BadCommandLineException( Messages.format(Messages.UNSUPPORTED_ENCODING, encoding)); } } catch (IllegalCharsetNameException icne) { throw new BadCommandLineException(Messages.format(Messages.UNSUPPORTED_ENCODING, encoding)); } return 2; } // see if this is one of the extensions for (Plugin plugin : getAllPlugins()) { try { if (('-' + plugin.getOptionName()).equals(args[i])) { activePlugins.add(plugin); plugin.onActivated(this); pluginURIs.addAll(plugin.getCustomizationURIs()); // give the plugin a chance to parse arguments to this option. // this is new in 2.1, and due to the backward compatibility reason, // if plugin didn't understand it, we still return 1 to indicate // that this option is consumed. int r = plugin.parseArgument(this, args, i); if (r != 0) return r; else return 1; } int r = plugin.parseArgument(this, args, i); if (r != 0) return r; } catch (IOException e) { throw new BadCommandLineException(e.getMessage(), e); } } return 0; // unrecognized }