Modified: incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java?view=diff&rev=566432&r1=566431&r2=566432 ============================================================================== --- incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java (original) +++ incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java Wed Aug 15 17:20:40 2007 @@ -18,8 +18,10 @@ */ package org.apache.tuscany.tools.wsdl2java.generate; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; +import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -32,8 +34,8 @@ import javax.xml.namespace.QName; +import org.apache.tuscany.sdo.generate.XSD2JavaGenerator; import org.apache.tuscany.sdo.helper.HelperContextImpl; -import org.apache.tuscany.sdo.helper.XSDHelperImpl; import org.apache.tuscany.sdo.util.DataObjectUtil; import org.eclipse.emf.codegen.ecore.genmodel.GenClass; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; @@ -56,6 +58,14 @@ import commonj.sdo.helper.XSDHelper; public class WSDL2JavaGenerator { + //Note: Dynamic SDO is defined as 0x4000 to avoid conflict with XSD2Java genOptions + static protected final int DYNAMIC_SDO = 0x1; + static protected final int GENERATE_SDO = 0x2; + static protected final int VERBOSE_MODE = 0x4; + static protected final String NO_GEN_PARM = "-noGenerate"; + static protected final String TARGET_DIR_PARM = "-targetDirectory"; + static protected final String JAVA_PACKAGE_PARM = "-javaPackage"; + static protected final String ALL_NAMESPACES_PARM = "-schemaNamespace all"; /** * Generate Java interfaces from WSDL Usage arguments: [ -targetDirectory @@ -79,6 +89,9 @@ String targetDirectory = null; String wsdlJavaPackage = null; String xsdJavaPackage = null; + String sdoGenArgs = null; + String sdoGenArgsString = null; + int genOptions = 0; int index = 0; for (; index < args.length && args[index].startsWith("-"); ++index) { @@ -88,6 +101,14 @@ targetDirectory = args[++index]; } else if (args[index].equalsIgnoreCase("-javaPackage")) { wsdlJavaPackage = args[++index]; + } else if (args[index].equalsIgnoreCase("-dynamicSDO")) { + genOptions |= DYNAMIC_SDO; + } else if (args[index].equalsIgnoreCase("-generateSDO")){ + genOptions |= GENERATE_SDO; + } else if (args[index].equalsIgnoreCase("-sdoGenArgs")){ + sdoGenArgs = args[++index]; + } else if (args[index].equalsIgnoreCase("-verbose")){ + genOptions |= VERBOSE_MODE; } // else if (...) else { @@ -95,35 +116,155 @@ return; } } - + if (sdoGenArgs!=null && (GENERATE_SDO & genOptions)== 0){ + genOptions |= GENERATE_SDO; + } + + if (targetDirectory == null) { + targetDirectory = "."; + } String wsdlFileName = args[index]; - if (wsdlFileName == null || targetDirectory == null) { + if (wsdlFileName == null || ((DYNAMIC_SDO & genOptions)!=0 && (GENERATE_SDO & genOptions)!= 0)) { printUsage(); return; } - - generateFromWSDL(wsdlFileName, portName!=null? new String[]{portName}:null, targetDirectory, wsdlJavaPackage, xsdJavaPackage, 0); - + if (sdoGenArgs !=null){ + try { + File inFile = new File(sdoGenArgs).getAbsoluteFile(); + FileReader inputFile = new FileReader(inFile); + BufferedReader bufRead = new BufferedReader(inputFile); + StringBuffer fileContents= new StringBuffer(); + String line; + while ((line = bufRead.readLine())!=null){ + fileContents.append(line + " "); + } + sdoGenArgsString = fileContents.toString(); + } catch (IOException e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + } else { + sdoGenArgsString = null; + } + + if ((DYNAMIC_SDO & genOptions) != 0){ + generateDynamicFromWSDL(wsdlFileName, portName!=null? new String[]{portName}:null, targetDirectory, wsdlJavaPackage, xsdJavaPackage, genOptions); + } else { + generateFromWSDL(wsdlFileName, portName!=null? new String[]{portName}:null, targetDirectory, wsdlJavaPackage, genOptions, sdoGenArgsString); + } + + } + + @SuppressWarnings("unchecked") + public static void generateFromWSDL(String wsdlFileName, String[] ports, String targetDirectory, String wsdlJavaPackage, int genOptions, String sdoGenArgsString) + { + try { + if (targetDirectory == null) { + targetDirectory = new File(wsdlFileName).getCanonicalFile().getParent(); + } else { + targetDirectory = new File(targetDirectory).getCanonicalPath(); + } + + // Populate the typeMapping table that will be given to the Axis2 WSDL2Java + Map<QName, SDODataBindingTypeMappingEntry> typeMapping = + new HashMap<QName, SDODataBindingTypeMappingEntry>(); + StringBuffer buildCommand = new StringBuffer(); + //build XSD command lines + //build generic command for simple case & dynamic SDO + buildCommand.append(ALL_NAMESPACES_PARM); + if (sdoGenArgsString == null){ + buildCommand.append(" " + TARGET_DIR_PARM + " " + targetDirectory); + if (wsdlJavaPackage != null && (genOptions & GENERATE_SDO)!=0){ + buildCommand.append(" " + JAVA_PACKAGE_PARM + " " + wsdlJavaPackage); + } + if ((genOptions & GENERATE_SDO)==0){ + buildCommand.append(" "); + buildCommand.append(NO_GEN_PARM); + } + } else { + buildCommand.append(" "); + buildCommand.append(sdoGenArgsString); + } + buildCommand.append(" "); + buildCommand.append(wsdlFileName); + String[] sdoGenCommand = buildCommand.toString().split("\\s+"); + + if ((genOptions & VERBOSE_MODE)!=0){ + System.out.println("Options passed to XSD2Java: "); + for (int i=0; i<sdoGenCommand.length; i++){ System.out.println("\"" + sdoGenCommand[i] + "\"");} + } + + XSD2JavaGenerator codeGen = new XSD2JavaGenerator(); + try { + codeGen.generateFromXMLSchema( sdoGenCommand ); + } catch (IllegalArgumentException e) { + System.out.println("Specified Invalid XSD2Java Arguments.\nFollow the XSD2Java usage, omitting the wsdl/xsd file argument."); + throw new IllegalArgumentException(e); + } + + List packages = codeGen.getGeneratedPackageInfo(); + + for (Iterator iter = packages.iterator(); iter.hasNext();) + { + XSD2JavaGenerator.GeneratedPackage packageInfo = (XSD2JavaGenerator.GeneratedPackage)iter.next(); + for (Iterator iterClass = packageInfo.getClasses().iterator(); iterClass.hasNext();) + { + XSD2JavaGenerator.GeneratedPackage.PackageClassInfo classInfo = (XSD2JavaGenerator.GeneratedPackage.PackageClassInfo)iterClass.next(); + SDODataBindingTypeMappingEntry typeMappingEntry; + if ((genOptions & DYNAMIC_SDO)==0){ + typeMappingEntry = new SDODataBindingTypeMappingEntry(classInfo.getClassName(), classInfo.getAnonymous(), classInfo.getProperties()); + } else { + // TO DO implement dynamic sdo case + typeMappingEntry = null; + System.out.println(); + } + QName qname = new QName(packageInfo.getNamespace(),classInfo.getName()); + typeMapping.put(qname, typeMappingEntry); + } + } + + JavaInterfaceGenerator codeGenerator = new JavaInterfaceGenerator(wsdlFileName, + ports, + targetDirectory, + wsdlJavaPackage, + typeMapping); + codeGenerator.generate(); + } catch (Exception e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } } @SuppressWarnings("unchecked") public static void generateFromWSDL(String wsdlFileName, String targetDirectory, String wsdlJavaPackage, String xsdJavaPackage, int genOptions){ - generateFromWSDL( wsdlFileName, null, targetDirectory, - wsdlJavaPackage, - xsdJavaPackage, genOptions); + String sdoGenArgsString = null; + if (xsdJavaPackage != null){ + sdoGenArgsString = JAVA_PACKAGE_PARM + " " + xsdJavaPackage; + } + generateFromWSDL( wsdlFileName, null, targetDirectory, wsdlJavaPackage, genOptions, sdoGenArgsString); } + public static void generateFromWSDL(String wsdlFileName, String[] ports, + String targetDirectory, String wsdlJavaPackage, + String xsdJavaPackage, int genOptions) { + String sdoGenArgsString = null; + if (xsdJavaPackage != null){ + sdoGenArgsString = JAVA_PACKAGE_PARM + " " + xsdJavaPackage; + } + generateFromWSDL( wsdlFileName, null, targetDirectory, wsdlJavaPackage, genOptions, sdoGenArgsString); + } @SuppressWarnings("unchecked") - public static void generateFromWSDL(String wsdlFileName, String[] ports, + public static void generateDynamicFromWSDL(String wsdlFileName, String[] ports, String targetDirectory, String wsdlJavaPackage, String xsdJavaPackage, int genOptions) { // Initialize the SDO runtime + DataObjectUtil.initRuntime(); EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry); HelperContext context = new HelperContextImpl(extendedMetaData, false); @@ -176,8 +317,9 @@ for (GenClass genClass : (List<GenClass>)currentGenPackage.getGenClasses()) { QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), extendedMetaData.getName(genClass.getEcoreClass())); - String interfaceName = currentGenPackage.getInterfacePackageName() + '.' - + genClass.getInterfaceName(); + String interfaceName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" : currentGenPackage + .getInterfacePackageName() + + '.' + genClass.getInterfaceName(); SDODataBindingTypeMappingEntry typeMappingEntry = new SDODataBindingTypeMappingEntry(interfaceName, false, null); typeMapping.put(qname, typeMappingEntry); @@ -197,7 +339,8 @@ GenClass genClass = genClasses.get(elementType); QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), extendedMetaData.getName(element)); - String interfaceName = genClass.getGenPackage().getInterfacePackageName() + String interfaceName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" : genClass + .getGenPackage().getInterfacePackageName() + '.' + genClass.getInterfaceName(); boolean anonymous = extendedMetaData.isAnonymous(eClass); @@ -207,7 +350,8 @@ EClassifier propertyType = feature.getEType(); if (propertyType instanceof EClass) { GenClass propertyGenClass = genClasses.get(propertyType); - String propertyClassName = propertyGenClass.getGenPackage().getInterfacePackageName() + String propertyClassName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" + : propertyGenClass.getGenPackage().getInterfacePackageName() + '.' + '.' + propertyGenClass.getInterfaceName(); propertyClassNames.add(propertyClassName); } else if (propertyType instanceof EClassifier) { @@ -243,10 +387,12 @@ typeMapping); codeGenerator.generate(); } catch (Exception e) { + e.printStackTrace(); throw new IllegalArgumentException(e); } } catch (IOException e) { + e.printStackTrace(); throw new IllegalArgumentException(e); } } @@ -327,6 +473,21 @@ } return safeQualifiedName.toString(); } + /* + * Converts myClassName to MyClassName + */ + public static String normalizeClassName(String className) { + + StringBuffer normalizedClassName = new StringBuffer(); + + String beginPart = className.substring(0,1); + String endPart = className.substring(1); + + normalizedClassName.append(beginPart.toUpperCase()); + normalizedClassName.append(endPart); + + return normalizedClassName.toString(); + } protected static void printDiagnostic(Diagnostic diagnostic, String indent) { System.out.print(indent); @@ -340,11 +501,14 @@ System.out.println("Usage arguments:"); System.out.println(" [ -targetDirectory <target-root-directory> ]"); System.out.println(" [ -javaPackage <java-package-name> ]"); + System.out.println(" [ -dynamicSDO | -generateSDO [ -sdoGenArgs <command-file-name> ]]"); + System.out.println(" [ -verbose ]"); System.out.println(" <wsdl-file>"); System.out.println(""); + System.out.println("Where <command-file-name> is a text file containing valid XSD2Java command\narguments (w/o the wsdl/xsd file name)"); System.out.println("For example:"); System.out.println(""); - System.out.println(" generate somedir/somefile.wsdl"); + System.out.println(" WSDL2JavaGenerator -targetDirectory myDir somedir/somefile.wsdl"); }
Modified: incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java?view=diff&rev=566432&r1=566431&r2=566432 ============================================================================== --- incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java (original) +++ incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java Wed Aug 15 17:20:40 2007 @@ -32,7 +32,8 @@ basedir ="."; - String[] args=new String[] { "-targetDirectory", basedir + "/target/wsdl2java-source", + String[] args=new String[] { + "-targetDirectory", basedir + "/target/wsdl2java-source", "-javaPackage", "org.apache.tuscany.tools.wsdl2java.generate.account", basedir + "/src/test/resources/AccountService.wsdl"}; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
