You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/04/01 21:06:30 UTC

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

Author: rfeng
Date: Tue Apr  1 12:06:27 2008
New Revision: 643523

URL: http://svn.apache.org/viewvc?rev=643523&view=rev
Log:
Add more generation logic

Modified:
    incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml
    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/interface2wsdl/WSDLDefinitionGenerator.java
    incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml?rev=643523&r1=643522&r2=643523&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml Tue Apr  1 12:06:27 2008
@@ -1,21 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- * 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.    
+    * 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.    
 -->
 <project>
     <modelVersion>4.0.0</modelVersion>
@@ -46,34 +46,44 @@
             <version>2.0-incubating-SNAPSHOT</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-interface-java-jaxws</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+        </dependency>        
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-databinding</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.axis2</groupId>
             <artifactId>axis2-java2wsdl</artifactId>
             <version>1.3</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>commons-codec</groupId>
+                    <artifactId>commons-codec</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.axis2</groupId>
             <artifactId>axis2-adb</artifactId>
             <version>1.3</version>
         </dependency>
-        
+
         <dependency>
-            <groupId>junit</groupId>                                      
+            <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.2</version>
             <scope>test</scope>
         </dependency>
-        
+
         <dependency>
-           <groupId>commons-codec</groupId>
-           <artifactId>commons-codec</artifactId>
-           <version>1.3</version>
-           <exclusions>
-               <exclusion>
-                   <groupId>commons-codec</groupId>
-                   <artifactId>commons-codec</artifactId>
-               </exclusion>
-           </exclusions>
-        </dependency>        
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.3</version>
+        </dependency>
 
     </dependencies>
 

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=643523&r1=643522&r2=643523&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 Tue Apr  1 12:06:27 2008
@@ -28,15 +28,19 @@
 import javax.wsdl.Output;
 import javax.wsdl.Part;
 import javax.wsdl.PortType;
+import javax.wsdl.Types;
 import javax.wsdl.WSDLException;
 import javax.wsdl.factory.WSDLFactory;
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sca.databinding.DataBinding;
+import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
+import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
 import org.apache.ws.commons.schema.XmlSchema;
@@ -53,6 +57,7 @@
  */
 public class Interface2WSDLGenerator {
     private WSDLFactory factory;
+    private DataBindingExtensionPoint dataBindingExtensionPoint;
     private WSDLDefinitionGenerator definitionGenerator = new WSDLDefinitionGenerator();
 
     public Interface2WSDLGenerator() throws WSDLException {
@@ -60,9 +65,10 @@
         this.factory = WSDLFactory.newInstance();
     }
 
-    public Interface2WSDLGenerator(WSDLFactory factory) {
+    public Interface2WSDLGenerator(WSDLFactory factory, DataBindingExtensionPoint dataBindingExtensionPoint) {
         super();
         this.factory = factory;
+        this.dataBindingExtensionPoint = dataBindingExtensionPoint;
     }
 
     public Definition generate(Interface interfaze) throws WSDLException {
@@ -87,31 +93,49 @@
         PortType portType = definition.createPortType();
         portType.setQName(name);
         for (Operation op : interfaze.getOperations()) {
-            javax.wsdl.Operation operation = generate(definition, op);
+            javax.wsdl.Operation operation = generateOperation(definition, op);
             portType.addOperation(operation);
         }
         portType.setUndefined(false);
         definition.addPortType(portType);
         definitionGenerator.createBinding(definition, portType);
+
+        Types types = definitionGenerator.createTypes(definition);
+
         return definition;
     }
 
     protected QName getQName(Interface i) {
         // FIXME: We need to add the name information into the Interface model 
         Class<?> javaClass = ((JavaInterface)i).getJavaClass();
-        return new QName(JavaInterfaceUtil.getNamespace(javaClass), javaClass.getSimpleName());
+        return new QName(JavaInterfaceUtil.getNamespace(javaClass), javaClass.getSimpleName(), "tns");
     }
 
-    public javax.wsdl.Operation generate(Definition definition, Operation op) {
+    public javax.wsdl.Operation generateOperation(Definition definition, Operation op) {
         javax.wsdl.Operation operation = definition.createOperation();
         operation.setName(op.getName());
+        operation.setUndefined(false);
+
         Input input = definition.createInput();
         input.setName("input");
         Message inputMsg = definition.createMessage();
-        QName inputMsgName = new QName(definition.getQName().getNamespaceURI(), "inputMessage");
+        QName inputMsgName = new QName(definition.getQName().getNamespaceURI(), op.getName() + "_InputMessage");
         inputMsg.setQName(inputMsgName);
+        inputMsg.setUndefined(false);
+        definition.addMessage(inputMsg);
 
-        inputMsg.addPart(generate(definition, op.getInputType(), "parameters"));
+        // FIXME: By default, java interface is mapped to doc-lit-wrapper style WSDL
+        if (!op.isWrapperStyle()) {
+            // Generate doc-lit-wrapper style
+            inputMsg.addPart(generateWrapperPart(definition, op, true));
+        } else {
+            // Bare style
+            int i = 0;
+            for (DataType d : op.getInputType().getLogical()) {
+                inputMsg.addPart(generatePart(definition, d, "arg" + i));
+                i++;
+            }
+        }
         input.setMessage(inputMsg);
         operation.setInput(input);
 
@@ -119,10 +143,16 @@
             Output output = definition.createOutput();
             output.setName("output");
             Message outputMsg = definition.createMessage();
-            QName outputMsgName = new QName(definition.getQName().getNamespaceURI(), "outputMessage");
+            QName outputMsgName = new QName(definition.getQName().getNamespaceURI(), op.getName() + "_OutputMessage");
             outputMsg.setQName(outputMsgName);
+            outputMsg.setUndefined(false);
+            definition.addMessage(outputMsg);
 
-            outputMsg.addPart(generate(definition, op.getOutputType(), "return"));
+            if (!op.isWrapperStyle()) {
+                inputMsg.addPart(generateWrapperPart(definition, op, false));
+            } else {
+                inputMsg.addPart(generatePart(definition, op.getOutputType(), "return"));
+            }
             output.setMessage(outputMsg);
 
             operation.setOutput(output);
@@ -135,7 +165,7 @@
         return operation;
     }
 
-    public Part generate(Definition definition, DataType arg, String partName) {
+    public Part generatePart(Definition definition, DataType arg, String partName) {
         Part part = definition.createPart();
         part.setName(partName);
         if (arg != null && arg.getLogical() instanceof XMLType) {
@@ -148,12 +178,29 @@
         return part;
     }
 
+    public Part generateWrapperPart(Definition definition, Operation operation, boolean input) {
+        Part part = definition.createPart();
+        String partName = input ? operation.getName() : (operation.getName() + "Response");
+        part.setName(partName);
+        if (operation.getWrapper() != null) {
+            ElementInfo elementInfo =
+                input ? operation.getWrapper().getInputWrapperElement() : operation.getWrapper()
+                    .getOutputWrapperElement();
+            part.setElementName(elementInfo.getQName());
+        }
+        return part;
+    }
+
     public XmlSchemaType getXmlSchemaType(DataType type) {
         return null;
     }
 
     // FIXME: WE need to add databinding-specific Java2XSD generation
-    public Element generateXSD() {
+    public Element generateXSD(DataType dataType) {
+        DataBinding dataBinding = dataBindingExtensionPoint.getDataBinding(dataType.getDataBinding());
+        if (dataBinding != null) {
+            // return dataBinding.generateSchema(dataType);
+        }
         return null;
     }
 

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.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/WSDLDefinitionGenerator.java?rev=643523&r1=643522&r2=643523&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/WSDLDefinitionGenerator.java Tue Apr  1 12:06:27 2008
@@ -34,6 +34,7 @@
 import javax.wsdl.Port;
 import javax.wsdl.PortType;
 import javax.wsdl.Service;
+import javax.wsdl.Types;
 import javax.wsdl.WSDLException;
 import javax.wsdl.extensions.soap.SOAPBinding;
 import javax.wsdl.extensions.soap.SOAPBody;
@@ -64,6 +65,12 @@
         root = (Element)root.cloneNode(true);
         WSDLReader reader = factory.newWSDLReader();
         return reader.readWSDL(definition.getDocumentBaseURI(), root);
+    }
+    
+    public Types createTypes(Definition definition) {
+        Types types = definition.createTypes();
+        definition.setTypes(types);
+        return types;
     }
 
     public Binding createBinding(Definition definition, PortType portType) throws WSDLException {

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java?rev=643523&r1=643522&r2=643523&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java Tue Apr  1 12:06:27 2008
@@ -25,6 +25,7 @@
 import javax.wsdl.xml.WSDLWriter;
 
 import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
+import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;
 import org.junit.Test;
 
 /**
@@ -35,11 +36,12 @@
     @Test
     public void testGenerate() throws Exception {
         DefaultJavaInterfaceFactory iFactory = new DefaultJavaInterfaceFactory();
+        iFactory.addInterfaceVisitor(new JAXWSJavaInterfaceProcessor());
         org.apache.tuscany.sca.interfacedef.Interface iface = iFactory.createJavaInterface(TestJavaInterface.class);
         Interface2WSDLGenerator generator = new Interface2WSDLGenerator();
         Definition definition = generator.generate(iface);
         // System.out.println(definition);
-        
+
         WSDLWriter writer = generator.getFactory().newWSDLWriter();
         StringWriter sw = new StringWriter();
         writer.writeWSDL(definition, sw);



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org