diff options
Diffstat (limited to 'sca-java-1.x/tags/1.5.1-RC4/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java')
-rw-r--r-- | sca-java-1.x/tags/1.5.1-RC4/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java | 529 |
1 files changed, 0 insertions, 529 deletions
diff --git a/sca-java-1.x/tags/1.5.1-RC4/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java b/sca-java-1.x/tags/1.5.1-RC4/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java deleted file mode 100644 index f6d1f3a64a..0000000000 --- a/sca-java-1.x/tags/1.5.1-RC4/tools/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java +++ /dev/null @@ -1,529 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -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; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.Vector; - -import javax.xml.namespace.QName; - -import org.apache.tuscany.sdo.generate.XSD2JavaGenerator; -import org.apache.tuscany.sdo.helper.HelperContextImpl; -import org.apache.tuscany.sdo.util.DataObjectUtil; -import org.eclipse.emf.codegen.ecore.genmodel.GenClass; -import org.eclipse.emf.codegen.ecore.genmodel.GenModel; -import org.eclipse.emf.codegen.ecore.genmodel.GenModelFactory; -import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; -import org.eclipse.emf.codegen.util.CodeGenUtil; -import org.eclipse.emf.common.util.Diagnostic; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EClassifier; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.ecore.util.BasicExtendedMetaData; -import org.eclipse.emf.ecore.util.ExtendedMetaData; - -import commonj.sdo.helper.HelperContext; -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 - * <target-root-directory> ] [ -javaPackage <java-package-name> ] - * <wsdl-file> For example: generate somedir/somefile.wsdl Basic options: - * -targetDirectory Generates the Java source code in the specified - * directory. By default, the code is generated in the same directory as the - * input WSDL file. -javaPackage Overrides the Java package for the - * generated classes. By default the package name is derived from the - * targetNamespace of the WSDL definition being generated. For example, if - * the targetNamespace is "http://www.example.com/simple", the default - * package will be "com.example.simple". - */ - public static void main(String args[]) { - if (args.length == 0) { - printUsage(); - return; - } - - String portName = null; - 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) { - if (args[index].equalsIgnoreCase("-port")) { - portName = args[++index]; - } else if (args[index].equalsIgnoreCase("-targetDirectory")) { - 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 { - printUsage(); - return; - } - } - if (sdoGenArgs!=null && (GENERATE_SDO & genOptions)== 0){ - genOptions |= GENERATE_SDO; - } - - if (targetDirectory == null) { - targetDirectory = "."; - } - String wsdlFileName = args[index]; - if (wsdlFileName == null || ((DYNAMIC_SDO & genOptions)!=0 && (GENERATE_SDO & genOptions)!= 0)) { - printUsage(); - return; - } - 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); - } - - //TUSCANY-1642 - We shouldn't split the wsdlFileName as it my contain a filename with spaces - Vector sdoCommand = new Vector(java.util.Arrays.asList(buildCommand.toString().split("\\s+"))); - sdoCommand.add(wsdlFileName); - - String[] sdoGenCommand = new String[sdoCommand.size()]; - sdoCommand.toArray(sdoGenCommand); - - 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()); - - //FIXME Workaround for JIRA TUSCANY-1673 - // Do not overwrite a typemapping entry describing a element typed by an anonymous - // complex type with a typemapping entry describing a complex type named like the - // element - SDODataBindingTypeMappingEntry existingTypeMapping = typeMapping.get(qname); - if (existingTypeMapping == null || !existingTypeMapping.isAnonymous()) { - 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){ - 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 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); - XSDHelper xsdHelper = context.getXSDHelper(); - - try { - - // Load the WSDL file - File inputFile = new File(wsdlFileName).getAbsoluteFile(); - InputStream inputStream = new FileInputStream(inputFile); - - // Define SDO metadata - xsdHelper.define(inputStream, inputFile.toURI().toString()); - - 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>(); - if (!packageRegistry.values().isEmpty()) { - ResourceSet resourceSet = DataObjectUtil.createResourceSet(); - - // Populate list of GenPackages and a map of GenClasses keyed by EClass - List<GenPackage> genPackages = new ArrayList<GenPackage>(); - Map<EClass, GenClass> genClasses = new HashMap<EClass, GenClass>(); - for (Iterator iter = packageRegistry.values().iterator(); iter.hasNext();) { - EPackage currentEPackage = (EPackage)iter.next(); - String currentBasePackage = extractBasePackageName(currentEPackage, xsdJavaPackage); - String currentPrefix = CodeGenUtil.capName(currentEPackage.getName()); - - GenPackage currentGenPackage = createGenPackage(currentEPackage, currentBasePackage, - currentPrefix, genOptions, resourceSet); - genPackages.add(currentGenPackage); - for (GenClass genClass : (List<GenClass>)currentGenPackage.getGenClasses()) { - genClasses.put(genClass.getEcoreClass(), genClass); - } - - } - - // Process all the SDO packages - // Populate the QName -> interfaceName typeMapping table - for (GenPackage currentGenPackage : genPackages) { - EPackage currentEPackage = currentGenPackage.getEcorePackage(); - - // Populate the type mappings for all the complex types - for (GenClass genClass : (List<GenClass>)currentGenPackage.getGenClasses()) { - QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), - extendedMetaData.getName(genClass.getEcoreClass())); - 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); - } - - // Process all the global XSD elements - EClass documentRoot = extendedMetaData.getDocumentRoot(currentEPackage); - if (documentRoot != null) { - for (EStructuralFeature element : (List<EStructuralFeature>)extendedMetaData - .getElements(documentRoot)) { - EClassifier elementType = element.getEType(); - - // Handle a complex type - if (elementType instanceof EClass) { - EClass eClass = (EClass)elementType; - - GenClass genClass = genClasses.get(elementType); - QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), - extendedMetaData.getName(element)); - String interfaceName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" : genClass - .getGenPackage().getInterfacePackageName() - + '.' + genClass.getInterfaceName(); - boolean anonymous = extendedMetaData.isAnonymous(eClass); - - // Build list of property class names - List<String> propertyClassNames=new ArrayList<String>(); - for (EStructuralFeature feature : (List<EStructuralFeature>)eClass.getEStructuralFeatures()) { - EClassifier propertyType = feature.getEType(); - if (propertyType instanceof EClass) { - GenClass propertyGenClass = genClasses.get(propertyType); - String propertyClassName = (DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" - : propertyGenClass.getGenPackage().getInterfacePackageName() + '.' - + '.' + propertyGenClass.getInterfaceName(); - propertyClassNames.add(propertyClassName); - } else if (propertyType instanceof EClassifier) { - String propertyClassName = propertyType.getInstanceClass().getName(); - propertyClassNames.add(propertyClassName); - } - } - - SDODataBindingTypeMappingEntry typeMappingEntry = - new SDODataBindingTypeMappingEntry(interfaceName, anonymous, propertyClassNames); - typeMapping.put(qname, typeMappingEntry); - - } else { - - // Handle a simple type - QName qname = new QName(extendedMetaData.getNamespace(currentEPackage), - extendedMetaData.getName(element)); - String className = elementType.getInstanceClass().getName(); - SDODataBindingTypeMappingEntry typeMappingEntry = - new SDODataBindingTypeMappingEntry(className, false, null); - typeMapping.put(qname, typeMappingEntry); - } - } - } - } - } - - try { - JavaInterfaceGenerator codeGenerator = new JavaInterfaceGenerator(wsdlFileName, - ports, - targetDirectory, - wsdlJavaPackage, - typeMapping); - codeGenerator.generate(); - } catch (Exception e) { - e.printStackTrace(); - throw new IllegalArgumentException(e); - } - - } catch (IOException e) { - e.printStackTrace(); - throw new IllegalArgumentException(e); - } - } - - @SuppressWarnings("unchecked") - public static GenPackage createGenPackage(EPackage ePackage, String basePackage, String prefix, - int genOptions, ResourceSet resourceSet) { - GenModel genModel = ecore2GenModel(ePackage, basePackage, prefix, genOptions); - - URI ecoreURI = URI.createURI("file:///" + ePackage.getName() + ".ecore"); - URI genModelURI = ecoreURI.trimFileExtension().appendFileExtension("genmodel"); - - Resource ecoreResource = resourceSet.createResource(ecoreURI); - ecoreResource.getContents().add(ePackage); - - Resource genModelResource = resourceSet.createResource(genModelURI); - genModelResource.getContents().add(genModel); - - return (GenPackage)genModel.getGenPackages().get(0); - } - - public static GenModel ecore2GenModel(EPackage ePackage, String basePackage, - String prefix, int genOptions) { - GenModel genModel = GenModelFactory.eINSTANCE.createGenModel(); - genModel.initialize(Collections.singleton(ePackage)); - - genModel.setRootExtendsInterface(""); - genModel.setRootImplementsInterface("commonj.sdo.DataObject"); - genModel.setRootExtendsClass("org.apache.tuscany.sdo.impl.DataObjectImpl"); - genModel.setFeatureMapWrapperInterface("commonj.sdo.Sequence"); - genModel.setFeatureMapWrapperInternalInterface("org.apache.tuscany.sdo.util.BasicSequence"); - genModel.setFeatureMapWrapperClass("org.apache.tuscany.sdo.util.BasicSequence"); - genModel.setSuppressEMFTypes(true); - genModel.setSuppressEMFMetaData(true); - genModel.setSuppressEMFModelTags(true); - genModel.setCanGenerate(true); - // FIXME workaround java.lang.NoClassDefFoundError: - // org/eclipse/jdt/core/jdom/IDOMNode with 02162006 build - genModel.setFacadeHelperClass("Hack"); - genModel.setForceOverwrite(true); - - GenPackage genPackage = (GenPackage)genModel.getGenPackages().get(0); - - if (basePackage != null) { - genPackage.setBasePackage(basePackage); - } - if (prefix != null) { - genPackage.setPrefix(prefix); - } - - return genModel; - } - - public static String extractBasePackageName(EPackage ePackage, String javaPackage) { - String qualifiedName = javaPackage != null ? javaPackage : ePackage.getName(); - String name = /* CodeGenUtil. */shortName(qualifiedName); - String baseName = qualifiedName.substring(0, qualifiedName.length() - name.length()); - if (javaPackage != null || !name.equals(qualifiedName)) { - ePackage.setName(name); - } - return baseName != null ? /* CodeGenUtil. */safeQualifiedName(baseName) : null; - } - - public static String shortName(String qualifiedName) { - int index = qualifiedName.lastIndexOf("."); - return index != -1 ? qualifiedName.substring(index + 1) : qualifiedName; - } - - public static String safeQualifiedName(String qualifiedName) { - StringBuffer safeQualifiedName = new StringBuffer(); - for (StringTokenizer stringTokenizer = new StringTokenizer(qualifiedName, "."); - stringTokenizer.hasMoreTokens();) { - String name = stringTokenizer.nextToken(); - safeQualifiedName.append(CodeGenUtil.safeName(name)); - if (stringTokenizer.hasMoreTokens()) { - safeQualifiedName.append('.'); - } - } - 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); - System.out.println(diagnostic.getMessage()); - for (Iterator i = diagnostic.getChildren().iterator(); i.hasNext();) { - printDiagnostic((Diagnostic)i.next(), indent + " "); - } - } - - protected static void printUsage() { - 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(" WSDL2JavaGenerator -targetDirectory myDir somedir/somefile.wsdl"); - } - - -} |