Author: jsdelfino
Date: Thu Apr 27 00:11:31 2006
New Revision: 397455

URL: http://svn.apache.org/viewcvs?rev=397455&view=rev
Log:
Fix for TUSCANY-111 - Extend and override the Axi2 
JavaEmitter.getInput/OuputElement methods to generate unwrapped java methods

Added:
    
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java
    
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java

Added: 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java?rev=397455&view=auto
==============================================================================
--- 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java
 (added)
+++ 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java
 Thu Apr 27 00:11:31 2006
@@ -0,0 +1,158 @@
+/**
+ *
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as 
applicable.
+ *
+ *  Licensed 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.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.util.FileWriter;
+import org.apache.axis2.wsdl.codegen.emitter.JavaEmitter;
+import org.apache.axis2.wsdl.codegen.writer.InterfaceWriter;
+import org.apache.axis2.wsdl.databinding.TypeMapper;
+import org.apache.wsdl.MessageReference;
+import org.apache.wsdl.WSDLExtensibilityAttribute;
+import org.apache.wsdl.WSDLOperation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+class JavaInterfaceEmitter extends JavaEmitter {
+    
+    private List getParameterElementList(Document doc, MessageReference 
message) {
+        List parameterElementList = new ArrayList();
+        
+        if (message != null) {
+
+            Object typeMappingObject = 
this.mapper.getTypeMappingObject(message.getElementQName());
+            List typeMappingList;
+            if (typeMappingObject instanceof List) {
+                typeMappingList = (List)typeMappingObject;
+            } else {
+                typeMappingList = new ArrayList();
+                typeMappingList.add(typeMappingObject);
+            }
+            
+            for (int i=0; i<typeMappingList.size(); i++) {
+                Element param = doc.createElement("param");
+                parameterElementList.add(param);
+                
+                String typeMapping = (String)typeMappingList.get(i);
+    
+                addAttribute(doc, "name", 
this.mapper.getParameterName(message.getElementQName()), param);
+                addAttribute(doc, "type", (typeMapping == null)
+                        ? ""
+                        : typeMapping, param);
+    
+                // add an extra attribute to say whether the type mapping is 
the default
+                if (TypeMapper.DEFAULT_CLASS_NAME.equals(typeMapping)) {
+                    addAttribute(doc, "default", "yes", param);
+                }
+    
+                addAttribute(doc, "value", null, param);
+    
+                // add this as a body parameter
+                addAttribute(doc, "location", "body", param);
+    
+                Iterator iter = 
message.getExtensibilityAttributes().iterator();
+    
+                while (iter.hasNext()) {
+                    WSDLExtensibilityAttribute att = 
(WSDLExtensibilityAttribute) iter.next();
+    
+                    addAttribute(doc, att.getKey().getLocalPart(), 
att.getValue().toString(), param);
+                }
+            }
+        }
+
+        return parameterElementList;
+    }
+    
+    private List getParameterElementList(Document doc, List parameters, String 
location) {
+        List parameterElementList = new ArrayList();
+
+        if ((parameters != null) && !parameters.isEmpty()) {
+            int count = parameters.size();
+
+            for (int i = 0; i < count; i++) {
+                Element param = doc.createElement("param");
+                QName name = (QName) parameters.get(i);
+
+                addAttribute(doc, "name", this.mapper.getParameterName(name), 
param);
+
+                String typeMapping = this.mapper.getTypeMappingName(name);
+                String typeMappingStr = (typeMapping == null)
+                        ? ""
+                        : typeMapping;
+
+                addAttribute(doc, "type", typeMappingStr, param);
+                addAttribute(doc, "location", location, param);
+                parameterElementList.add(param);
+            }
+        }
+
+        return parameterElementList;
+    }
+
+    protected Element getInputElement(Document doc, WSDLOperation operation, 
List headerParameterQNameList) {
+        return getElement(doc, "input", operation.getInputMessage(), 
headerParameterQNameList);
+    }
+    
+    protected Element getOutputElement(Document doc, WSDLOperation operation, 
List headerParameterQNameList) {
+        return getElement(doc, "output", operation.getOutputMessage(), 
headerParameterQNameList);
+    }
+
+    protected Element getElement(Document doc, String elementName, 
MessageReference message, List headerParameterQNameList) {
+        Element element = doc.createElement(elementName);
+
+        List parameterElementList = getParameterElementList(doc, message);
+        for (int i = 0; i < parameterElementList.size(); i++) {
+            element.appendChild((Element) parameterElementList.get(i));
+        }
+
+        List outputElementList = getParameterElementList(doc, 
headerParameterQNameList, "header");
+
+        for (int i = 0; i < outputElementList.size(); i++) {
+            element.appendChild((Element) outputElementList.get(i));
+        }
+
+        return element;
+    }
+
+    protected void writeInterface(boolean writeDatabinders) throws Exception {
+        Document interfaceModel = 
createDOMDocumentForInterface(writeDatabinders);
+        if (!configuration.getOutputLocation().exists()) {
+            configuration.getOutputLocation().mkdirs();
+        }
+        InterfaceWriter interfaceWriter = new 
InterfaceWriter(this.configuration
+            .getOutputLocation(), this.configuration.getOutputLanguage());
+
+        String packageName = 
interfaceModel.getDocumentElement().getAttribute("package");
+        String className = 
interfaceModel.getDocumentElement().getAttribute("name");
+
+        System.out.println(">>  Generating Java class " + packageName + "." + 
className);
+        File outputFile = 
FileWriter.createClassFile(this.configuration.getOutputLocation(),
+                                                     packageName, className, 
".java");
+        if (outputFile.exists()) {
+            outputFile.delete();
+        }
+
+        writeClass(interfaceModel, interfaceWriter);
+    }
+
+}

Propchange: 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceEmitter.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java?rev=397455&r1=397454&r2=397455&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java
 (original)
+++ 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/JavaInterfaceGenerator.java
 Thu Apr 27 00:11:31 2006
@@ -17,7 +17,6 @@
 package org.apache.tuscany.tools.wsdl2java.generate;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -26,22 +25,17 @@
 import javax.wsdl.WSDLException;
 import javax.xml.namespace.QName;
 
-import org.apache.axis2.i18n.Messages;
-import org.apache.axis2.util.FileWriter;
 import org.apache.axis2.wsdl.builder.WOMBuilderFactory;
 import org.apache.axis2.wsdl.codegen.CodeGenConfiguration;
 import org.apache.axis2.wsdl.codegen.CodeGenerationException;
-import org.apache.axis2.wsdl.codegen.emitter.JavaEmitter;
 import org.apache.axis2.wsdl.codegen.extension.CodeGenExtension;
 import org.apache.axis2.wsdl.codegen.extension.DefaultDatabindingExtension;
 import org.apache.axis2.wsdl.codegen.extension.PackageFinder;
 import org.apache.axis2.wsdl.codegen.extension.WSDLValidatorExtension;
-import org.apache.axis2.wsdl.codegen.writer.InterfaceWriter;
 import org.apache.axis2.wsdl.databinding.JavaTypeMapper;
 import org.apache.axis2.wsdl.i18n.CodegenMessages;
 import org.apache.tuscany.model.util.XMLNameUtil;
 import org.apache.wsdl.WSDLDescription;
-import org.w3c.dom.Document;
 
 public class JavaInterfaceGenerator {
 
@@ -49,7 +43,7 @@
     private CodeGenConfiguration codegenConfiguration;
 
     public JavaInterfaceGenerator(String uri, String outputLocation, String 
packageName,
-                                  Map<QName, String> typeMapping) throws 
CodeGenerationException {
+                                  Map<QName, Object> typeMapping) throws 
CodeGenerationException {
         WSDLDescription wom;
         try {
             wom = 
WOMBuilderFactory.getBuilder(org.apache.wsdl.WSDLConstants.WSDL_1_1)
@@ -63,8 +57,8 @@
         }
 
         JavaTypeMapper typeMapper = new JavaTypeMapper();
-        for (Map.Entry<QName, String> e : typeMapping.entrySet()) {
-            typeMapper.addTypeMappingName(e.getKey(), e.getValue());
+        for (Map.Entry<QName, Object> e : typeMapping.entrySet()) {
+            typeMapper.addTypeMappingObject(e.getKey(), e.getValue());
         }
 
         codegenConfiguration = new CodeGenConfiguration(wom, new HashMap());
@@ -103,31 +97,6 @@
         try {
             for (int i = 0; i < codegenExtensions.size(); i++) {
                 ((CodeGenExtension)codegenExtensions.get(i)).engage();
-            }
-
-            class JavaInterfaceEmitter extends JavaEmitter {
-
-                protected void writeInterface(boolean writeDatabinders) throws 
Exception {
-                    Document interfaceModel = 
createDOMDocumentForInterface(writeDatabinders);
-                    if (!configuration.getOutputLocation().exists()) {
-                        configuration.getOutputLocation().mkdirs();
-                    }
-                    InterfaceWriter interfaceWriter = new 
InterfaceWriter(this.configuration
-                        .getOutputLocation(), 
this.configuration.getOutputLanguage());
-
-                    String packageName = 
interfaceModel.getDocumentElement().getAttribute("package");
-                    String className = 
interfaceModel.getDocumentElement().getAttribute("name");
-
-                    System.out.println(">>  Generating Java class " + 
packageName + "." + className);
-                    File outputFile = 
FileWriter.createClassFile(this.configuration.getOutputLocation(),
-                                                                 packageName, 
className, ".java");
-                    if (outputFile.exists()) {
-                        outputFile.delete();
-                    }
-
-                    writeClass(interfaceModel, interfaceWriter);
-                }
-
             }
 
             JavaInterfaceEmitter emitter = new JavaInterfaceEmitter();

Modified: 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java?rev=397455&r1=397454&r2=397455&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java
 (original)
+++ 
incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java
 Thu Apr 27 00:11:31 2006
@@ -119,7 +119,7 @@
                 targetDirectory = new File(targetDirectory).getCanonicalPath();
             }
 
-            Map<QName, String> typeMapping = new HashMap<QName, String>();
+            Map<QName, Object> typeMapping = new HashMap<QName, Object>();
             if (!packageRegistry.values().isEmpty()) {
                 ResourceSet resourceSet = DataObjectUtil.createResourceSet();
 
@@ -157,22 +157,37 @@
                             EClassifier elementType = element.getEType();
                             if (extendedMetaData.isAnonymous(elementType)) {
                                 EClass eClass = (EClass)elementType;
-                                EStructuralFeature feature = 
(EStructuralFeature)eClass
-                                    .getEStructuralFeatures().get(0);
-                                elementType = feature.getEType();
-                            }
-                            if (elementType instanceof EClass) {
-                                GenClass genClass = 
genClasses.get(elementType);
                                 QName qname = new 
QName(extendedMetaData.getNamespace(currentEPackage),
-                                                        
extendedMetaData.getName(element));
-                                String interfaceName = 
genClass.getGenPackage().getInterfacePackageName()
-                                                       + '.' + 
genClass.getInterfaceName();
-                                typeMapping.put(qname, interfaceName);
-                            } else if (elementType instanceof EClassifier) {
-                                QName qname = new 
QName(extendedMetaData.getNamespace(currentEPackage),
-                                                        
extendedMetaData.getName(element));
-                                String interfaceName = 
elementType.getInstanceClass().getName();
-                                typeMapping.put(qname, interfaceName);
+                                        extendedMetaData.getName(element));
+                                List<String> interfaceNames=new 
ArrayList<String>();
+                                for (EStructuralFeature feature :
+                                    
(List<EStructuralFeature>)eClass.getEStructuralFeatures()) {
+                                    elementType = feature.getEType();
+                                    if (elementType instanceof EClass) {
+                                        GenClass genClass = 
genClasses.get(elementType);
+                                        String interfaceName = 
genClass.getGenPackage().getInterfacePackageName()
+                                                               + '.' + 
genClass.getInterfaceName();
+                                        interfaceNames.add(interfaceName);
+                                    } else if (elementType instanceof 
EClassifier) {
+                                        String interfaceName = 
elementType.getInstanceClass().getName();
+                                        interfaceNames.add(interfaceName);
+                                    }
+                                    typeMapping.put(qname, interfaceNames);
+                                }
+                            } else {
+                                if (elementType instanceof EClass) {
+                                    GenClass genClass = 
genClasses.get(elementType);
+                                    QName qname = new 
QName(extendedMetaData.getNamespace(currentEPackage),
+                                                            
extendedMetaData.getName(element));
+                                    String interfaceName = 
genClass.getGenPackage().getInterfacePackageName()
+                                                           + '.' + 
genClass.getInterfaceName();
+                                    typeMapping.put(qname, interfaceName);
+                                } else if (elementType instanceof EClassifier) 
{
+                                    QName qname = new 
QName(extendedMetaData.getNamespace(currentEPackage),
+                                                            
extendedMetaData.getName(element));
+                                    String interfaceName = 
elementType.getInstanceClass().getName();
+                                    typeMapping.put(qname, interfaceName);
+                                }
                             }
                         }
                     }


Reply via email to