From 0a6c609a2c00473106c84b7e1d164fc252fed84b Mon Sep 17 00:00:00 2001 From: rfeng Date: Fri, 10 Jul 2009 01:06:00 +0000 Subject: Use SDO TypeHelper/XSDHelper to help the java name git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@792773 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/wsdl2java/sdo/SDODatabinding.java | 341 +++------------------ .../wsdl2java/sdo/SDODataBindingTestCase.java | 5 +- .../sdo/src/test/resources/HelloService.wsdl | 107 +++---- 3 files changed, 101 insertions(+), 352 deletions(-) (limited to 'branches/sca-java-1.x/tools/databinding') diff --git a/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java b/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java index 05946f2f27..465977194c 100644 --- a/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java +++ b/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java @@ -19,18 +19,12 @@ package org.apache.tuscany.tools.wsdl2java.sdo; -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.net.URI; import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; +import java.net.URL; import javax.xml.namespace.QName; @@ -39,40 +33,20 @@ import org.apache.cxf.tools.common.ToolContext; import org.apache.cxf.tools.common.ToolException; import org.apache.cxf.tools.common.model.DefaultValueWriter; import org.apache.cxf.tools.wsdlto.core.DataBindingProfile; +import org.apache.tuscany.sdo.api.SDOUtil; import org.apache.tuscany.sdo.generate.JavaGenerator; -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.GenFeature; -import org.eclipse.emf.codegen.ecore.genmodel.GenModel; -import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; -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 org.eclipse.xsd.XSDSchema; +import commonj.sdo.DataObject; +import commonj.sdo.Property; +import commonj.sdo.Type; import commonj.sdo.helper.HelperContext; +import commonj.sdo.helper.TypeHelper; import commonj.sdo.helper.XSDHelper; public class SDODatabinding extends JavaGenerator implements DataBindingProfile { - private EPackage.Registry packageRegistry; - private ExtendedMetaData extendedMetaData; - private String packageURI; - private Hashtable packageInfoTable; - - protected String schemaNamespace = null; - protected String namespaceInfo = null; - protected String generateBuiltIn = null; - protected static GeneratedPackages generatedPackages = null; - protected boolean allNamespaces = false; + private TypeHelper typeHelper; + private XSDHelper xsdHelper; public void generate(ToolContext context) throws ToolException { String srcd = (String)context.get(ToolConstants.CFG_OUTPUTDIR); @@ -103,33 +77,50 @@ public class SDODatabinding extends JavaGenerator implements DataBindingProfile public void initialize(ToolContext context) throws ToolException { String wsdl = (String)context.get(ToolConstants.CFG_WSDLLOCATION); xsdFileName = wsdl; - String catalog = (String)context.get(ToolConstants.CFG_CATALOG); - Object o = context.get(ToolConstants.CFG_BINDING); - String bindingFiles[]; - if (o instanceof String) { - bindingFiles = new String[] {o.toString()}; - } else { - bindingFiles = (String[])o; - } - - packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); - extendedMetaData = new BasicExtendedMetaData(packageRegistry); -// packageURI = getSchemaNamespace(xsdFileName); -// packageInfoTable = createPackageInfoTable(packageURI, schemaNamespace, javaPackage, prefix, null); + HelperContext helperContext = SDOUtil.createHelperContext(); + xsdHelper = helperContext.getXSDHelper(); + URL location; + try { + location = new URL(xsdFileName); + InputStream is = location.openStream(); + xsdHelper.define(is, xsdFileName); + } catch (IOException e) { + throw new ToolException(e); + } + this.typeHelper = helperContext.getTypeHelper(); } - public String getType(QName qName, boolean b) { - // im not sure of the usage of element. - String type = "commonj.sdo.DataObject"; // since dynamic sdo always refer to - //the same object type - - return type; + public String getType(QName qName, boolean element) { + Type type = null; + if (element) { + Property property = xsdHelper.getGlobalProperty(qName.getNamespaceURI(), qName.getLocalPart(), true); + if (property != null) { + type = property.getType(); + } + } + typeHelper.getType(qName.getNamespaceURI(), qName.getLocalPart()); + if (type != null && type.isDataType()) { + return type.getInstanceClass().getName(); + } + return DataObject.class.getName(); } - public String getWrappedElementType(QName qName, QName qName1) { - //TODO:implement the functionality - return null; + public String getWrappedElementType(QName wrapperElement, QName item) { + Type type = null; + Property property = + xsdHelper.getGlobalProperty(wrapperElement.getNamespaceURI(), wrapperElement.getLocalPart(), true); + if (property != null) { + type = property.getType(); + Property itemProp = type.getProperty(item.getLocalPart()); + if (itemProp != null) { + type = itemProp.getType(); + } + } + if (type != null && type.isDataType()) { + return type.getInstanceClass().getName(); + } + return DataObject.class.getName(); } public DefaultValueWriter createDefaultValueWriter(QName qName, boolean b) { @@ -142,248 +133,10 @@ public class SDODatabinding extends JavaGenerator implements DataBindingProfile return null; } - private void addSchema() { - - } - protected void run(String[] strings) { // We extended the JavaGenerator class in order to make use of its utility methods //but we are not going to implement standalone java generator. // So no functionality in this method. } - public static String getSchemaNamespace(String xsdFileName) { - ResourceSet resourceSet = DataObjectUtil.createResourceSet(); - File inputFile = new File(xsdFileName).getAbsoluteFile(); - Resource model = - resourceSet.getResource(org.eclipse.emf.common.util.URI.createURI(inputFile.toURI().toString()), true); - XSDSchema schema = (XSDSchema)model.getContents().get(0); - String targetNS = schema.getTargetNamespace(); - if (targetNS == null) { - targetNS = schema.getSchemaLocation(); - } - - return targetNS; - } - - protected static GenModel generateFromXMLSchema(String xsdFileName, - EPackage.Registry packageRegistry, - ExtendedMetaData extendedMetaData, - String targetDirectory, - Hashtable packageInfoTable, - int genOptions, - String regenerateBuiltIn, - boolean allNamespaces) { - GenModel genModel = null; - - HelperContext hc = new HelperContextImpl(extendedMetaData, false); - XSDHelper xsdHelper = hc.getXSDHelper(); - ((XSDHelperImpl)xsdHelper).setRedefineBuiltIn(regenerateBuiltIn); - - try { - File inputFile = new File(xsdFileName).getAbsoluteFile(); - InputStream inputStream = new FileInputStream(inputFile); - xsdHelper.define(inputStream, inputFile.toURI().toString()); - - if (targetDirectory == null) { - targetDirectory = new File(xsdFileName).getCanonicalFile().getParent(); - } else { - targetDirectory = new File(targetDirectory).getCanonicalPath(); - } - - if (!packageRegistry.values().isEmpty()) { - genModel = - generatePackages(packageRegistry.values(), - targetDirectory, - packageInfoTable, - genOptions, - allNamespaces); - - } else { - System.err.println("Input schema file " + xsdFileName + " defined no metadata."); - } - - } catch (IOException e) { - e.printStackTrace(); - } - return genModel; - } - - private static Hashtable createPackageInfoTable(String packageURI, - String schemaNamespace, - String javaPackage, - String prefix, - String namespaceInfo) { - Hashtable packageInfoTable = new Hashtable(); - - if (namespaceInfo != null) { - try { - FileReader inputFile = new FileReader(namespaceInfo); - BufferedReader bufRead = new BufferedReader(inputFile); - - String line = bufRead.readLine(); - while (line != null) { - if (line.length() > 0) { - String[] options = line.split(";"); - if (options.length > 1) { - if (options.length > 2) - packageInfoTable.put(options[0], new PackageInfo(options[1], options[2], options[0], - null)); - else - packageInfoTable.put(options[0], new PackageInfo(options[1], null, options[0], null)); - } else - packageInfoTable.put(options[0], new PackageInfo(null, null, options[0], null)); - } - line = bufRead.readLine(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } else { - if (schemaNamespace != null) - packageInfoTable.put(schemaNamespace, new PackageInfo(javaPackage, prefix, schemaNamespace, null)); - else if (packageURI != null) - packageInfoTable.put(packageURI, new PackageInfo(javaPackage, prefix, null, null)); - } - return packageInfoTable; - } - - protected class GeneratedPackages { - private List genPackages = null; - - GeneratedPackages(GenModel genModel, ExtendedMetaData extendedMetaData) { - List packages = genModel.getGenPackages(); - Hashtable genClasses = new Hashtable(); - for (Iterator iter = packages.iterator(); iter.hasNext();) { - // loop through the list, once to build up the eclass to genclass mapper - GenPackage genPackage = (GenPackage)iter.next(); - List classes = genPackage.getGenClasses(); - for (Iterator classIter = classes.iterator(); classIter.hasNext();) { - GenClass genClass = (GenClass)classIter.next(); - genClasses.put(genClass.getEcoreClass(), genClass); - } - } - genPackages = new ArrayList(); - for (Iterator iter = packages.iterator(); iter.hasNext();) { - // now process the pckage list - GenPackage genPackage = (GenPackage)iter.next(); - genPackages.add(new GeneratedPackage(genPackage, extendedMetaData, genClasses)); - } - } - - List getPackageList() { - return genPackages; - } - } - - public class GeneratedPackage { - private String namespace; - private Hashtable classes; - - public String getNamespace() { - return namespace; - } - - public List getClasses() { - return new ArrayList(classes.values()); - } - - GeneratedPackage(GenPackage genPackage, ExtendedMetaData extendedMetaData, Hashtable eclassGenClassMap) { - classes = new Hashtable(); - - EPackage ePackage = genPackage.getEcorePackage(); - namespace = extendedMetaData.getNamespace(ePackage); - - List genClasses = genPackage.getGenClasses(); - for (Iterator iterClass = genClasses.iterator(); iterClass.hasNext();) { - GenClass genClass = (GenClass)iterClass.next(); - if ("DocumentRoot".equals(genClass.getEcoreClass().getName())) { - List features = genClass.getGenFeatures(); - for (Iterator iterFeatures = features.iterator(); iterFeatures.hasNext();) { - GenFeature feature = (GenFeature)iterFeatures.next(); - addGlobalElement(feature.getEcoreFeature(), extendedMetaData, eclassGenClassMap); - } - } - } - - } - - private void addGlobalElement(EStructuralFeature eFeature, - ExtendedMetaData extendedMetaData, - Hashtable eclassGenClassMap) { - - String name = eFeature.getName(); - String classname = ""; - boolean anonymous = false; - List propertyClassNames = null; - - EClassifier eClassifier = eFeature.getEType(); - - if (eClassifier instanceof EClass) { - // complex type - EClass eClass = (EClass)eClassifier; - GenClass genEClass = (GenClass)eclassGenClassMap.get(eClassifier); - if (genEClass != null) { - classname = - genEClass.getGenPackage().getInterfacePackageName() + '.' + genEClass.getInterfaceName(); - anonymous = extendedMetaData.isAnonymous(eClass); - - // Build list of property names - propertyClassNames = new ArrayList(); - List properties = eClass.getEStructuralFeatures(); - for (Iterator iterProperties = properties.iterator(); iterProperties.hasNext();) { - EStructuralFeature property = (EStructuralFeature)iterProperties.next(); - EClassifier propertyType = property.getEType(); - if (propertyType instanceof EClass) { - GenClass propertyGenClass = (GenClass)eclassGenClassMap.get(propertyType); - if (propertyGenClass != null) { - String propertyClassName = - propertyGenClass.getGenPackage().getInterfacePackageName() + '.' - + propertyGenClass.getInterfaceName(); - propertyClassNames.add(propertyClassName); - } - } else if (propertyType instanceof EClassifier) { - String propertyClassName = propertyType.getInstanceClass().getName(); - propertyClassNames.add(propertyClassName); - } - } - } - } else { - // simple type - classname = eClassifier.getInstanceClass().getName(); - } - classes.put(name, new PackageClassInfo(name, classname, anonymous, propertyClassNames)); - } - - public class PackageClassInfo { - private String name; - private String className = null; - private boolean anonymous = false; - private List properties = null; - - PackageClassInfo(String name, String className, boolean anonymous, List properties) { - this.name = name; - this.className = className; - this.anonymous = anonymous; - this.properties = properties; - } - - public String getName() { - return name; - } - - public String getClassName() { - return className; - } - - public boolean getAnonymous() { - return anonymous; - } - - public List getProperties() { - return properties; - } - } - } - } diff --git a/branches/sca-java-1.x/tools/databinding/sdo/src/test/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODataBindingTestCase.java b/branches/sca-java-1.x/tools/databinding/sdo/src/test/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODataBindingTestCase.java index fe32577297..72d66a7ac9 100644 --- a/branches/sca-java-1.x/tools/databinding/sdo/src/test/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODataBindingTestCase.java +++ b/branches/sca-java-1.x/tools/databinding/sdo/src/test/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODataBindingTestCase.java @@ -19,6 +19,8 @@ package org.apache.tuscany.tools.wsdl2java.sdo; +import java.net.URL; + import org.apache.cxf.tools.wsdlto.WSDLToJava; import org.junit.Test; @@ -29,8 +31,9 @@ public class SDODataBindingTestCase { @Test public void testGenerate() { + URL url = getClass().getResource("/HelloService.wsdl"); String args[] = - new String[] {"-db", "sdo", "-d", "target/jaxws-source", "src/test/resources/HelloService.wsdl"}; + new String[] {"-db", "sdo", "-d", "target/jaxws-source", url.toString()}; WSDLToJava.main(args); } diff --git a/branches/sca-java-1.x/tools/databinding/sdo/src/test/resources/HelloService.wsdl b/branches/sca-java-1.x/tools/databinding/sdo/src/test/resources/HelloService.wsdl index a36d6d02b9..8127e02d34 100644 --- a/branches/sca-java-1.x/tools/databinding/sdo/src/test/resources/HelloService.wsdl +++ b/branches/sca-java-1.x/tools/databinding/sdo/src/test/resources/HelloService.wsdl @@ -1,5 +1,5 @@ - - - + - - - - - - + + + + + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + -- cgit v1.2.3