You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by na...@apache.org on 2008/04/25 19:24:27 UTC

svn commit: r651656 - in /incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl: interface2wsdl/Interface2WSDLGenerator.java java2wsdl/Java2WSDLHelper.java

Author: nash
Date: Fri Apr 25 10:24:24 2008
New Revision: 651656

URL: http://svn.apache.org/viewvc?rev=651656&view=rev
Log:
Fix some bugs in WSDL generation

Modified:
    incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
    incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java?rev=651656&r1=651655&r2=651656&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java Fri Apr 25 10:24:24 2008
@@ -79,6 +79,8 @@
     private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";
     private static final String SCHEMA_NAME = "schema";
     private static final QName SCHEMA_QNAME = new QName(SCHEMA_NS, SCHEMA_NAME);
+    private static final String ANYTYPE_NAME = "anyType";
+    private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
 
     private WSDLFactory factory;
     private DataBindingExtensionPoint dataBindingExtensionPoint;
@@ -200,13 +202,23 @@
                 wrapper.setAttribute("name", entry.getKey().getLocalPart());
                 Element complexType = schemaDoc.createElementNS(SCHEMA_NS, "xs:complexType");
                 wrapper.appendChild(complexType);
-                for (ElementInfo element: entry.getValue()) {
-                    Element xsElement = schemaDoc.createElementNS(SCHEMA_NS, "xs:element"); 
-                    xsElement.setAttribute("minOccurs", "0");
-                    xsElement.setAttribute("name", element.getQName().getLocalPart());
-                    QName typeName = element.getType().getQName();
-                    xsElement.setAttribute("type", typeName.getLocalPart());
-                    complexType.appendChild(xsElement);
+                if (entry.getValue().size() > 0) {
+                    Element sequence = schemaDoc.createElementNS(SCHEMA_NS, "xs:sequence");
+                    complexType.appendChild(sequence);
+                    for (ElementInfo element: entry.getValue()) {
+                        Element xsElement = schemaDoc.createElementNS(SCHEMA_NS, "xs:element"); 
+                        if (element.isMany()) {
+                            xsElement.setAttribute("maxOccurs", "unbounded");
+                        }
+                        xsElement.setAttribute("minOccurs", "0");
+                        xsElement.setAttribute("name", element.getQName().getLocalPart());
+                        if (element.isNillable()) {
+                            xsElement.setAttribute("nillable", "true");
+                        }
+                        QName typeName = element.getType().getQName();
+                        xsElement.setAttribute("type", typeName.getLocalPart());
+                        sequence.appendChild(xsElement);
+                    }
                 }
             }
         }
@@ -350,33 +362,36 @@
                 Class<?>[] paramTypes = method.getParameterTypes();
                 for (int i = 0; i < paramTypes.length; i++) {
                     Object logical = operation.getInputType().getLogical().get(i).getLogical();
-                    TypeInfo typeInfo = getTypeInfo(paramTypes[i], logical);
-                    if (!typeInfo.isSimpleType()) {
-                        javaTypes.add(paramTypes[i]);
-                    }
-                    ElementInfo element = new ElementInfo(elements.get(i).getQName(), typeInfo);
-                    elements.set(i, element);
+                    elements.set(i, getElementInfo(paramTypes[i], logical, elements.get(i).getQName(), javaTypes));
                 }
             } else {
                 Class<?> returnType = method.getReturnType();
                 if (returnType != Void.TYPE) {
                     Object logical = operation.getOutputType().getLogical();
-                    TypeInfo typeInfo = getTypeInfo(returnType, logical);
-                    if (!typeInfo.isSimpleType()) {
-                        javaTypes.add(returnType);
-                    }
-                    ElementInfo element = new ElementInfo(elements.get(0).getQName(), typeInfo);
-                    elements.set(0, element);
+                    elements.set(0, getElementInfo(returnType, logical, elements.get(0).getQName(), javaTypes));
                 }
             }
         }
         return part;
     }
 
+    private ElementInfo getElementInfo(Class javaType, Object logical, QName name, ArrayList<Class> javaTypes) {
+        TypeInfo typeInfo = getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType, logical);
+        if (!typeInfo.isSimpleType()) {
+            javaTypes.add(javaType);
+        }
+        ElementInfo element = new ElementInfo(name, typeInfo);
+        element.setMany(javaType.isArray());
+        element.setNillable(!javaType.isPrimitive());
+        return element;
+    }
+
     private TypeInfo getTypeInfo(Class javaType, Object logical) {
         QName xmlType = JavaXMLMapper.getXMLType(javaType);
         if (xmlType != null) {
             return new TypeInfo(xmlType, true, null);
+        } else if (javaType.isInterface()) {
+            return new TypeInfo(ANYTYPE_QNAME, true, null);
         } else {
             if (logical instanceof XMLType) {
                 xmlType = ((XMLType)logical).getTypeName();

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java?rev=651656&r1=651655&r2=651656&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java Fri Apr 25 10:24:24 2008
@@ -51,6 +51,7 @@
 import javax.wsdl.extensions.schema.Schema;
 import javax.wsdl.xml.WSDLLocator;
 import javax.wsdl.xml.WSDLReader;
+import javax.wsdl.xml.WSDLWriter;
 import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 
@@ -148,15 +149,17 @@
             } catch (WSDLException e) {
                 throw new RuntimeException(e);
             }
- 
-            // temp for debugging
-            // try {
-            //     WSDLWriter writer =  javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
-            //     writer.writeWSDL(def, System.out);
-            // } catch (WSDLException e) {
-            //     throw new RuntimeException(e);
-            // }
         }
+
+        /*
+        // for debugging
+        try {
+            WSDLWriter writer =  javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
+            writer.writeWSDL(def, System.out);
+        } catch (WSDLException e) {
+            throw new RuntimeException(e);
+        }
+        */
 
         wsdlDefinition.setDefinition(def);
         wsdlInterface.setWsdlDefinition(wsdlDefinition);