1 package org.objectweb.celtix.tools; 2 3 import java.io.File ; 4 import java.util.HashSet ; 5 import java.util.Iterator ; 6 import java.util.Properties ; 7 import java.util.Set ; 8 9 import org.objectweb.celtix.common.i18n.Message; 10 import org.objectweb.celtix.tools.common.ProcessorEnvironment; 11 import org.objectweb.celtix.tools.common.ToolConstants; 12 import org.objectweb.celtix.tools.common.ToolException; 13 import org.objectweb.celtix.tools.common.toolspec.ToolRunner; 14 import org.objectweb.celtix.tools.common.toolspec.ToolSpec; 15 import org.objectweb.celtix.tools.common.toolspec.parser.BadUsageException; 16 import org.objectweb.celtix.tools.common.toolspec.parser.CommandDocument; 17 import org.objectweb.celtix.tools.common.toolspec.parser.ErrorVisitor; 18 import org.objectweb.celtix.tools.processors.wsdl2.WSDLToJavaProcessor; 19 20 public class WSDLToJava extends AbstractCeltixToolContainer { 21 22 private static final String TOOL_NAME = "wsdl2java"; 23 private static String [] args; 24 25 public WSDLToJava(ToolSpec toolspec) throws Exception { 26 super(TOOL_NAME, toolspec); 27 } 28 29 private Set getArrayKeys() { 30 Set <String > set = new HashSet <String >(); 31 set.add(ToolConstants.CFG_BINDING); 32 set.add(ToolConstants.CFG_PACKAGENAME); 33 set.add(ToolConstants.CFG_NEXCLUDE); 34 return set; 35 } 36 37 public void execute(boolean exitOnFinish) { 38 WSDLToJavaProcessor processor = new WSDLToJavaProcessor(); 39 try { 40 super.execute(exitOnFinish); 41 if (!hasInfoOption()) { 42 ProcessorEnvironment env = new ProcessorEnvironment(); 43 env.setParameters(getParametersMap(getArrayKeys())); 44 if (env.get(ToolConstants.CFG_OUTPUTDIR) == null) { 45 env.put(ToolConstants.CFG_OUTPUTDIR, "."); 46 } 47 48 if (env.containsKey(ToolConstants.CFG_ANT)) { 49 setAntProperties(env); 50 setLibraryReferences(env); 51 } 52 53 if (isVerboseOn()) { 54 env.put(ToolConstants.CFG_VERBOSE, Boolean.TRUE); 55 } 56 env.put(ToolConstants.CFG_CMD_ARG, args); 57 58 validate(env); 59 loadDefaultNSPackageMapping(env); 60 setPackageAndNamespaces(env); 61 setExcludePackageAndNamespaces(env); 62 63 processor.setEnvironment(env); 64 processor.process(); 65 } 66 } catch (ToolException ex) { 67 System.err.println("Error : " + ex.getMessage()); 68 if (ex.getCause() instanceof BadUsageException) { 69 getInstance().printUsageException(TOOL_NAME, (BadUsageException)ex.getCause()); 70 } 71 System.err.println(); 72 if (isVerboseOn()) { 73 ex.printStackTrace(); 74 } 75 } catch (Exception ex) { 76 System.err.println("Error : " + ex.getMessage()); 77 System.err.println(); 78 if (isVerboseOn()) { 79 ex.printStackTrace(); 80 } 81 } 82 } 83 84 private void loadDefaultNSPackageMapping(ProcessorEnvironment env) { 85 if (env.getBooleanValue(ToolConstants.CFG_DEFAULT_NS, "true")) { 86 env.loadDefaultNS2Pck(); 87 } 88 if (env.getBooleanValue(ToolConstants.CFG_DEFAULT_EX, "true")) { 89 env.loadDefaultExcludes(); 90 } 91 } 92 93 94 private void setExcludePackageAndNamespaces(ProcessorEnvironment env) { 95 if (env.get(ToolConstants.CFG_NEXCLUDE) != null) { 96 String [] pns = (String [])env.get(ToolConstants.CFG_NEXCLUDE); 97 for (int j = 0; j < pns.length; j++) { 98 int pos = pns[j].indexOf("="); 99 String excludePackagename = pns[j]; 100 if (pos != -1) { 101 String ns = pns[j].substring(0, pos); 102 excludePackagename = pns[j].substring(pos + 1); 103 env.addExcludeNamespacePackageMap(ns, excludePackagename); 104 } else { 105 env.addExcludeNamespacePackageMap(pns[j], null); 106 } 107 } 108 } 109 } 110 111 private void setPackageAndNamespaces(ProcessorEnvironment env) { 112 if (env.get(ToolConstants.CFG_PACKAGENAME) != null) { 113 String [] pns = (String [])env.get(ToolConstants.CFG_PACKAGENAME); 114 for (int j = 0; j < pns.length; j++) { 115 int pos = pns[j].indexOf("="); 116 String packagename = pns[j]; 117 if (pos != -1) { 118 String ns = pns[j].substring(0, pos); 119 packagename = pns[j].substring(pos + 1); 120 env.addNamespacePackageMap(ns, packagename); 121 } else { 122 env.setPackageName(packagename); 123 } 124 } 125 } 126 } 127 128 private void validate(ProcessorEnvironment env) throws ToolException { 129 String outdir = (String )env.get(ToolConstants.CFG_OUTPUTDIR); 130 if (outdir != null) { 131 File dir = new File (outdir); 132 if (!dir.exists()) { 133 Message msg = new Message("DIRECTORY_NOT_EXIST", LOG, outdir); 134 throw new ToolException(msg); 135 } 136 if (!dir.isDirectory()) { 137 Message msg = new Message("NOT_A_DIRECTORY", LOG, outdir); 138 throw new ToolException(msg); 139 } 140 } 141 142 if (env.containsKey(ToolConstants.CFG_BINDING)) { 143 String [] bindings = (String [])env.get(ToolConstants.CFG_BINDING); 144 for (int i = 0; i < bindings.length; i++) { 145 File binding = new File (bindings[i]); 146 if (!binding.exists()) { 147 Message msg = new Message("FILE_NOT_EXIST", LOG, binding); 148 throw new ToolException(msg); 149 } else if (binding.isDirectory()) { 150 Message msg = new Message("NOT_A_FILE", LOG, binding); 151 throw new ToolException(msg); 152 } 153 } 154 } 155 156 if (!env.optionSet(ToolConstants.CFG_EXTRA_SOAPHEADER)) { 157 env.put(ToolConstants.CFG_EXTRA_SOAPHEADER, "false"); 158 } 159 160 if (env.optionSet(ToolConstants.CFG_COMPILE)) { 161 String clsdir = (String )env.get(ToolConstants.CFG_CLASSDIR); 162 if (clsdir != null) { 163 File dir = new File (clsdir); 164 if (!dir.exists()) { 165 Message msg = new Message("DIRECTORY_NOT_EXIST", LOG, clsdir); 166 throw new ToolException(msg); 167 } 168 } 169 } 170 } 171 172 protected void setAntProperties(ProcessorEnvironment env) { 173 String installDir = System.getProperty("install.dir"); 174 if (installDir != null) { 175 env.put(ToolConstants.CFG_INSTALL_DIR, installDir); 176 } else { 177 env.put(ToolConstants.CFG_INSTALL_DIR, "."); 178 } 179 } 180 181 protected void setLibraryReferences(ProcessorEnvironment env) { 182 Properties props = loadProperties("wsdltojavalib.properties"); 183 if (props != null) { 184 for (Iterator keys = props.keySet().iterator(); keys.hasNext();) { 185 String key = (String )keys.next(); 186 env.put(key, props.get(key)); 187 } 188 } 189 env.put(ToolConstants.CFG_ANT_PROP, props); 190 } 191 192 public static void main(String [] pargs) { 193 args = pargs; 194 195 try { 196 ToolRunner.runTool(WSDLToJava.class, 197 WSDLToJava.class.getResourceAsStream(ToolConstants.TOOLSPECS_BASE 198 + "wsdl2java.xml"), 199 false, 200 args); 201 } catch (BadUsageException ex) { 202 getInstance().printUsageException(TOOL_NAME, ex); 203 } catch (Exception ex) { 204 System.err.println("Error : " + ex.getMessage()); 205 System.err.println(); 206 ex.printStackTrace(); 207 } 208 } 209 210 public void checkParams(ErrorVisitor errors) throws ToolException { 211 CommandDocument doc = super.getCommandDocument(); 212 213 if (!doc.hasParameter("wsdlurl")) { 214 errors.add(new ErrorVisitor.UserError("WSDL/SCHEMA URL has to be specified")); 215 } 216 if (errors.getErrors().size() > 0) { 217 Message msg = new Message("PARAMETER_MISSING", LOG); 218 throw new ToolException(msg, new BadUsageException(getUsage(), errors)); 219 } 220 } 221 } 222 | Popular Tags |