You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by aj...@apache.org on 2005/10/09 07:18:30 UTC

svn commit: r307368 - /webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java

Author: ajith
Date: Sat Oct  8 22:18:15 2005
New Revision: 307368

URL: http://svn.apache.org/viewcvs?rev=307368&view=rev
Log:
Completed the WOMWriter. However a thorough test case is missing and it's not justifiable to mark this as complete.

Modified:
    webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java

Modified: webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java?rev=307368&r1=307367&r2=307368&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java (original)
+++ webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java Sat Oct  8 22:18:15 2005
@@ -3,8 +3,7 @@
 import org.apache.axis2.wsdl.WSDLVersionWrapper;
 
 import org.apache.wsdl.*;
-import org.apache.wsdl.extensions.Schema;
-import org.apache.wsdl.extensions.SOAPAddress;
+import org.apache.wsdl.extensions.*;
 
 import javax.wsdl.xml.WSDLWriter;
 import javax.wsdl.factory.WSDLFactory;
@@ -37,6 +36,7 @@
     private String defaultWSDLPrefix="wsdl11";
     private String targetNamespacePrefix="tns";
     private static final String WSDL1_1_NAMESPACE_URI = "http://schemas.xmlsoap.org/wsdl/";
+    private static final String WSDL1_1_SOAP_NAMESPACE_URI = "http://schemas.xmlsoap.org/wsdl/soap/";
     private static final String DEFINITION_NAME = "definitions";
     private static final String IMPORT_NAME = "import";
     private static final String TYPES_NAME = "types";
@@ -48,6 +48,15 @@
     //this is our 'symbol table' for the time being. It's a simple
     //Qname <-> message object map
     private Map messageMap = new HashMap();
+    private static final String BINDING_OPERATION = "operation";
+    private static final String OPERATION_NAME = BINDING_OPERATION;
+    private static final String BINDING_INPUT = "input";
+    private static final String INPUT_NAME = BINDING_INPUT;
+    private static final String BINDING_OUTPUT = "output";
+    private static final String OUTPUT_NAME = BINDING_OUTPUT;
+    private static final String BINDING_NAME = "binding";
+
+    private String soapNsPrefix = null;
 
 
     public void setEncoding(String encoding) {
@@ -90,6 +99,8 @@
             //create a writer from the stream
             Writer writer = new OutputStreamWriter(out,encoding);
             writeStartDescripton(wsdlDescription,writer);
+            //find the SOAPNs
+            findSOAPNsPrefix(wsdlDescription);
             //write the imports
             writeImports(wsdlDescription,writer);
             //write  the types
@@ -101,7 +112,7 @@
             //write the binding
             writeBinding(wsdlDescription,writer);
             //write the service
-            //write
+            writeService(wsdlDescription,writer);
             //close definition
             writeEndDescripton(writer);
             writer.flush();
@@ -116,6 +127,70 @@
 
     /**
      *
+     * @param wsdlDescription
+     * @param writer
+     * @throws IOException
+     */
+    private void writeService(WSDLDescription wsdlDescription, Writer writer) throws IOException{
+        Map serviceMap = wsdlDescription.getServices();
+        if (serviceMap!=null && !serviceMap.isEmpty()){
+            Iterator serviceIterator = serviceMap.values().iterator();
+            WSDLService service;
+            while (serviceIterator.hasNext()) {
+                service =  (WSDLService)serviceIterator.next();
+                WriterUtil.writeStartElement("service",defaultWSDLPrefix,writer);
+                WriterUtil.writeAttribute("name",service.getName().getLocalPart(),writer);
+                WriterUtil.writeCloseStartElement(writer);
+                //wrtie the porttypes
+                Map endPointMap = service.getEndpoints();
+                if (endPointMap!=null && !endPointMap.isEmpty()){
+                    Iterator it = endPointMap.values().iterator();
+                    while (it.hasNext()) {
+                        writePorttype((WSDLEndpoint)it.next(),writer);
+                    }
+                }
+                WriterUtil.writeEndElement("service",defaultWSDLPrefix,writer);
+            }
+        }
+    }
+
+    /**
+     *
+     * @param endpoint
+     * @param outWriter
+     */
+    private void writePorttype(WSDLEndpoint endpoint,Writer outWriter) throws IOException{
+        WriterUtil.writeStartElement("port",defaultWSDLPrefix,outWriter);
+        WriterUtil.writeAttribute("name",endpoint.getName().getLocalPart(),outWriter);
+        QName name = endpoint.getBinding().getName();
+        WriterUtil.writeAttribute("binding",name.getPrefix()+":"+name.getLocalPart(),outWriter);
+        WriterUtil.writeCloseStartElement(outWriter);
+
+        handleExtensibiltyElements(endpoint.getExtensibilityElements(),outWriter);
+
+        WriterUtil.writeEndElement("port",outWriter);
+    }
+    /**
+     * Find the SOAPns prefix
+     * @param wsdlDescription
+     */
+    private void findSOAPNsPrefix(WSDLDescription wsdlDescription) {
+        Map map = wsdlDescription.getNamespaces();
+        Iterator nsIterator = map.values().iterator();
+        Iterator keyIterator = map.keySet().iterator();
+        String key;
+        while (nsIterator.hasNext()) {
+            key =  keyIterator.next().toString();
+            if (WSDL1_1_SOAP_NAMESPACE_URI.equals(nsIterator.next())){
+                this.soapNsPrefix = key;
+                break;
+            }
+        }
+
+    }
+
+    /**
+     *
      * @param desc
      * @param outWriter
      * @throws WriterException
@@ -315,7 +390,7 @@
         if (types!=null){
             WriterUtil.writeStartElement(TYPES_NAME,defaultWSDLPrefix,outWriter);
             WriterUtil.writeCloseStartElement(outWriter);
-            handlerExtensibiltyElements(types.getExtensibilityElements(),outWriter);
+            handleExtensibiltyElements(types.getExtensibilityElements(),outWriter);
             WriterUtil.writeEndElement(TYPES_NAME,defaultWSDLPrefix,outWriter);
         }
     }
@@ -361,7 +436,7 @@
             WSDLOperation operation;
             while (opIterator.hasNext()) {
                 operation = (WSDLOperation)opIterator.next();
-                WriterUtil.writeStartElement("operation",defaultWSDLPrefix,outWriter);
+                WriterUtil.writeStartElement(OPERATION_NAME,defaultWSDLPrefix,outWriter);
                 WriterUtil.writeAttribute("name",operation.getName()==null?"":operation.getName().getLocalPart(),outWriter);
                 WriterUtil.writeCloseStartElement(outWriter);
 
@@ -370,7 +445,7 @@
                 MessageReference inputMessage = operation.getInputMessage();
                 if (inputMessage!=null){
                     message  =(WSDL11Message) messageMap.get(inputMessage.getElement());
-                    WriterUtil.writeStartElement("input",defaultWSDLPrefix,outWriter);
+                    WriterUtil.writeStartElement(INPUT_NAME,defaultWSDLPrefix,outWriter);
                     WriterUtil.writeAttribute("message",targetNamespacePrefix+":"+message.getMessageName(),outWriter);
                     WriterUtil.writeCompactEndElement(outWriter);
                 }
@@ -379,14 +454,14 @@
                 MessageReference outputMessage = operation.getOutputMessage();
                 if (outputMessage!=null) {
                     message  =(WSDL11Message) messageMap.get(outputMessage.getElement());
-                    WriterUtil.writeStartElement("output",defaultWSDLPrefix,outWriter);
+                    WriterUtil.writeStartElement(OUTPUT_NAME,defaultWSDLPrefix,outWriter);
                     WriterUtil.writeAttribute("message",targetNamespacePrefix+":"+message.getMessageName(),outWriter);
                     WriterUtil.writeCompactEndElement(outWriter);
                 }
 
                 //todo handle the faults here
 
-                WriterUtil.writeEndElement("operation",defaultWSDLPrefix,outWriter);
+                WriterUtil.writeEndElement(OPERATION_NAME,defaultWSDLPrefix,outWriter);
 
             }
         }
@@ -407,12 +482,25 @@
             WSDLBinding binding;
             while (iterator.hasNext()) {
                 binding =  (WSDLBinding)iterator.next();
-                WriterUtil.writeStartElement("binding", defaultWSDLPrefix,outWriter);
+                WriterUtil.writeStartElement(BINDING_NAME, defaultWSDLPrefix,outWriter);
                 WriterUtil.writeAttribute("name",binding.getName().getLocalPart(),outWriter);
                 WriterUtil.writeAttribute("type",targetNamespacePrefix +":"+ binding.getBoundInterface().getName().getLocalPart(),outWriter);
                 WriterUtil.writeCloseStartElement(outWriter);
+                //write the extensibility elements
+                handleExtensibiltyElements(binding.getExtensibilityElements(),outWriter);
+                //write the operations
 
-                WriterUtil.writeEndElement("binding", defaultWSDLPrefix,outWriter);
+                Map bindingOps = binding.getBindingOperations();
+                if (bindingOps!=null && !bindingOps.isEmpty()){
+                    Iterator bindingOpsIterator = bindingOps.values().iterator();
+                    while (bindingOpsIterator.hasNext()) {
+                        writebindingOperation((WSDLBindingOperation)bindingOpsIterator.next(),outWriter);
+                    }
+                }
+
+
+
+                WriterUtil.writeEndElement(BINDING_NAME, defaultWSDLPrefix,outWriter);
 
 
             }
@@ -420,24 +508,96 @@
 
     }
 
-    protected void handlerExtensibiltyElements(List extElementList,Writer outWriter) throws IOException{
+
+    protected void writebindingOperation(WSDLBindingOperation bindingOp,Writer outWriter) throws IOException{
+        WriterUtil.writeStartElement(BINDING_OPERATION,defaultWSDLPrefix,outWriter);
+        WriterUtil.writeAttribute("name",bindingOp.getName().getLocalPart(),outWriter);
+        WriterUtil.writeCloseStartElement(outWriter);
+        handleExtensibiltyElements(bindingOp.getExtensibilityElements(),outWriter);
+        //write the input
+        WSDLBindingMessageReference input = bindingOp.getInput();
+        if (input!=null){
+            WriterUtil.writeStartElement(BINDING_INPUT,defaultWSDLPrefix,outWriter);
+            WriterUtil.writeCompactEndElement(outWriter);
+            handleExtensibiltyElements(input.getExtensibilityElements(),outWriter);
+            WriterUtil.writeEndElement(BINDING_INPUT,defaultWSDLPrefix,outWriter);
+        }
+
+        WSDLBindingMessageReference output = bindingOp.getInput();
+        if (input!=null){
+            WriterUtil.writeStartElement(BINDING_OUTPUT,defaultWSDLPrefix,outWriter);
+            WriterUtil.writeCompactEndElement(outWriter);
+            handleExtensibiltyElements(output.getExtensibilityElements(),outWriter);
+            WriterUtil.writeEndElement(BINDING_OUTPUT,defaultWSDLPrefix,outWriter);
+        }
+        WriterUtil.writeEndElement(BINDING_OPERATION,defaultWSDLPrefix,outWriter);
+    }
+
+    protected void handleExtensibiltyElements(List extElementList,Writer outWriter) throws IOException{
         int extensibilityElementCount = extElementList.size();
         for (int i = 0; i < extensibilityElementCount; i++) {
             writeExtensibiltyElement((WSDLExtensibilityElement)extElementList.get(i),outWriter);
         }
 
     }
+
+    /**
+     *
+     * @param extElement
+     * @param outWriter
+     * @throws IOException
+     */
     protected void writeExtensibiltyElement(WSDLExtensibilityElement extElement,Writer outWriter) throws IOException{
         if (extElement instanceof Schema){
             outWriter.write(((Schema)extElement).getElement().toString());
         }else if(extElement instanceof SOAPAddress ){
-            //todo fill this
-        } else{
+            writeSOAPAddressExtensibilityElement((SOAPAddress)extElement,outWriter);
+        }else if(extElement instanceof SOAPBinding ){
+            writeSOAPBindingExtensibilityElement((SOAPBinding)extElement,outWriter);
+        }else if(extElement instanceof SOAPHeader ){
+            writeSOAPHeaderExtensibilityElement((SOAPHeader)extElement,outWriter);
+        } else if(extElement instanceof SOAPOperation ){
+            writeSOAPOpextensibilityElement((SOAPOperation)extElement,outWriter);
+        }else if(extElement instanceof SOAPBody ){
+            writeSOAPBodyExtensibilityElement((SOAPBody)extElement,outWriter);
+        }else{
             WriterUtil.writeComment(" Unknown extensibility element" + extElement.toString(),outWriter);
         }
 
+    }
+
+    private void writeSOAPAddressExtensibilityElement(SOAPAddress address,Writer outWriter) throws IOException{
+         WriterUtil.writeStartElement("address",this.soapNsPrefix,outWriter);
+        WriterUtil.writeAttribute("location",address.getLocationURI(),outWriter);
+      //  WriterUtil.writeAttribute("style",soapBinding.getStyle(),outWriter);
+        WriterUtil.writeCompactEndElement(outWriter);
+    }
+
+    protected void writeSOAPBindingExtensibilityElement(SOAPBinding soapBinding,Writer outWriter)throws IOException{
+        WriterUtil.writeStartElement("binding",this.soapNsPrefix,outWriter);
+        WriterUtil.writeAttribute("transport",soapBinding.getTransportURI(),outWriter);
+        WriterUtil.writeAttribute("style",soapBinding.getStyle(),outWriter);
+        WriterUtil.writeCompactEndElement(outWriter);
+    }
+
+    protected void writeSOAPBodyExtensibilityElement(SOAPBody soapBody,Writer outWriter)throws IOException{
+        WriterUtil.writeStartElement("body",this.soapNsPrefix,outWriter);
+        WriterUtil.writeAttribute("use",soapBody.getUse(),outWriter);
+        WriterUtil.writeCompactEndElement(outWriter);
+    }
+
+    protected void writeSOAPHeaderExtensibilityElement(SOAPHeader soapHeader,Writer outWriter)throws IOException{
+        WriterUtil.writeStartElement("header",this.soapNsPrefix,outWriter);
+        WriterUtil.writeAttribute("use",soapHeader.getUse(),outWriter);
+        WriterUtil.writeCompactEndElement(outWriter);
+    }
 
 
+    protected void writeSOAPOpextensibilityElement(SOAPOperation soapop,Writer outWriter)throws IOException{
+        WriterUtil.writeStartElement(BINDING_OPERATION,this.soapNsPrefix,outWriter);
+        WriterUtil.writeAttribute("name",soapop.getType().getLocalPart(),outWriter);
+        WriterUtil.writeAttribute("soapaction",soapop.getSoapAction(),outWriter);
+        WriterUtil.writeCompactEndElement(outWriter);
     }
 
     /**



Re: [Axis2] svn commit: r307368 - /webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java

Posted by Eran Chinthaka <ch...@opensource.lk>.
I used the Object model found in wsdl2java for giving the ?wsdl 
generation. Basically I extracted information from the service.aar and 
filled the javax.wsdl.* objects.
But since you have completed the WOM writer stuff, Can I directly 
populate WOM stuff for ?wsdl generation ?

-- Chinthaka
ajith@apache.org wrote:

>Author: ajith
>Date: Sat Oct  8 22:18:15 2005
>New Revision: 307368
>
>URL: http://svn.apache.org/viewcvs?rev=307368&view=rev
>Log:
>Completed the WOMWriter. However a thorough test case is missing and it's not justifiable to mark this as complete.
>
>Modified:
>    webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java
>
>Modified: webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java
>URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java?rev=307368&r1=307367&r2=307368&view=diff
>==============================================================================
>--- webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java (original)
>+++ webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/writer/WOMtoWSDL11Writer.java Sat Oct  8 22:18:15 2005
>@@ -3,8 +3,7 @@
> import org.apache.axis2.wsdl.WSDLVersionWrapper;
> 
> import org.apache.wsdl.*;
>-import org.apache.wsdl.extensions.Schema;
>-import org.apache.wsdl.extensions.SOAPAddress;
>+import org.apache.wsdl.extensions.*;
> 
> import javax.wsdl.xml.WSDLWriter;
> import javax.wsdl.factory.WSDLFactory;
>@@ -37,6 +36,7 @@
>     private String defaultWSDLPrefix="wsdl11";
>     private String targetNamespacePrefix="tns";
>     private static final String WSDL1_1_NAMESPACE_URI = "http://schemas.xmlsoap.org/wsdl/";
>+    private static final String WSDL1_1_SOAP_NAMESPACE_URI = "http://schemas.xmlsoap.org/wsdl/soap/";
>     private static final String DEFINITION_NAME = "definitions";
>     private static final String IMPORT_NAME = "import";
>     private static final String TYPES_NAME = "types";
>@@ -48,6 +48,15 @@
>     //this is our 'symbol table' for the time being. It's a simple
>     //Qname <-> message object map
>     private Map messageMap = new HashMap();
>+    private static final String BINDING_OPERATION = "operation";
>+    private static final String OPERATION_NAME = BINDING_OPERATION;
>+    private static final String BINDING_INPUT = "input";
>+    private static final String INPUT_NAME = BINDING_INPUT;
>+    private static final String BINDING_OUTPUT = "output";
>+    private static final String OUTPUT_NAME = BINDING_OUTPUT;
>+    private static final String BINDING_NAME = "binding";
>+
>+    private String soapNsPrefix = null;
> 
> 
>     public void setEncoding(String encoding) {
>@@ -90,6 +99,8 @@
>             //create a writer from the stream
>             Writer writer = new OutputStreamWriter(out,encoding);
>             writeStartDescripton(wsdlDescription,writer);
>+            //find the SOAPNs
>+            findSOAPNsPrefix(wsdlDescription);
>             //write the imports
>             writeImports(wsdlDescription,writer);
>             //write  the types
>@@ -101,7 +112,7 @@
>             //write the binding
>             writeBinding(wsdlDescription,writer);
>             //write the service
>-            //write
>+            writeService(wsdlDescription,writer);
>             //close definition
>             writeEndDescripton(writer);
>             writer.flush();
>@@ -116,6 +127,70 @@
> 
>     /**
>      *
>+     * @param wsdlDescription
>+     * @param writer
>+     * @throws IOException
>+     */
>+    private void writeService(WSDLDescription wsdlDescription, Writer writer) throws IOException{
>+        Map serviceMap = wsdlDescription.getServices();
>+        if (serviceMap!=null && !serviceMap.isEmpty()){
>+            Iterator serviceIterator = serviceMap.values().iterator();
>+            WSDLService service;
>+            while (serviceIterator.hasNext()) {
>+                service =  (WSDLService)serviceIterator.next();
>+                WriterUtil.writeStartElement("service",defaultWSDLPrefix,writer);
>+                WriterUtil.writeAttribute("name",service.getName().getLocalPart(),writer);
>+                WriterUtil.writeCloseStartElement(writer);
>+                //wrtie the porttypes
>+                Map endPointMap = service.getEndpoints();
>+                if (endPointMap!=null && !endPointMap.isEmpty()){
>+                    Iterator it = endPointMap.values().iterator();
>+                    while (it.hasNext()) {
>+                        writePorttype((WSDLEndpoint)it.next(),writer);
>+                    }
>+                }
>+                WriterUtil.writeEndElement("service",defaultWSDLPrefix,writer);
>+            }
>+        }
>+    }
>+
>+    /**
>+     *
>+     * @param endpoint
>+     * @param outWriter
>+     */
>+    private void writePorttype(WSDLEndpoint endpoint,Writer outWriter) throws IOException{
>+        WriterUtil.writeStartElement("port",defaultWSDLPrefix,outWriter);
>+        WriterUtil.writeAttribute("name",endpoint.getName().getLocalPart(),outWriter);
>+        QName name = endpoint.getBinding().getName();
>+        WriterUtil.writeAttribute("binding",name.getPrefix()+":"+name.getLocalPart(),outWriter);
>+        WriterUtil.writeCloseStartElement(outWriter);
>+
>+        handleExtensibiltyElements(endpoint.getExtensibilityElements(),outWriter);
>+
>+        WriterUtil.writeEndElement("port",outWriter);
>+    }
>+    /**
>+     * Find the SOAPns prefix
>+     * @param wsdlDescription
>+     */
>+    private void findSOAPNsPrefix(WSDLDescription wsdlDescription) {
>+        Map map = wsdlDescription.getNamespaces();
>+        Iterator nsIterator = map.values().iterator();
>+        Iterator keyIterator = map.keySet().iterator();
>+        String key;
>+        while (nsIterator.hasNext()) {
>+            key =  keyIterator.next().toString();
>+            if (WSDL1_1_SOAP_NAMESPACE_URI.equals(nsIterator.next())){
>+                this.soapNsPrefix = key;
>+                break;
>+            }
>+        }
>+
>+    }
>+
>+    /**
>+     *
>      * @param desc
>      * @param outWriter
>      * @throws WriterException
>@@ -315,7 +390,7 @@
>         if (types!=null){
>             WriterUtil.writeStartElement(TYPES_NAME,defaultWSDLPrefix,outWriter);
>             WriterUtil.writeCloseStartElement(outWriter);
>-            handlerExtensibiltyElements(types.getExtensibilityElements(),outWriter);
>+            handleExtensibiltyElements(types.getExtensibilityElements(),outWriter);
>             WriterUtil.writeEndElement(TYPES_NAME,defaultWSDLPrefix,outWriter);
>         }
>     }
>@@ -361,7 +436,7 @@
>             WSDLOperation operation;
>             while (opIterator.hasNext()) {
>                 operation = (WSDLOperation)opIterator.next();
>-                WriterUtil.writeStartElement("operation",defaultWSDLPrefix,outWriter);
>+                WriterUtil.writeStartElement(OPERATION_NAME,defaultWSDLPrefix,outWriter);
>                 WriterUtil.writeAttribute("name",operation.getName()==null?"":operation.getName().getLocalPart(),outWriter);
>                 WriterUtil.writeCloseStartElement(outWriter);
> 
>@@ -370,7 +445,7 @@
>                 MessageReference inputMessage = operation.getInputMessage();
>                 if (inputMessage!=null){
>                     message  =(WSDL11Message) messageMap.get(inputMessage.getElement());
>-                    WriterUtil.writeStartElement("input",defaultWSDLPrefix,outWriter);
>+                    WriterUtil.writeStartElement(INPUT_NAME,defaultWSDLPrefix,outWriter);
>                     WriterUtil.writeAttribute("message",targetNamespacePrefix+":"+message.getMessageName(),outWriter);
>                     WriterUtil.writeCompactEndElement(outWriter);
>                 }
>@@ -379,14 +454,14 @@
>                 MessageReference outputMessage = operation.getOutputMessage();
>                 if (outputMessage!=null) {
>                     message  =(WSDL11Message) messageMap.get(outputMessage.getElement());
>-                    WriterUtil.writeStartElement("output",defaultWSDLPrefix,outWriter);
>+                    WriterUtil.writeStartElement(OUTPUT_NAME,defaultWSDLPrefix,outWriter);
>                     WriterUtil.writeAttribute("message",targetNamespacePrefix+":"+message.getMessageName(),outWriter);
>                     WriterUtil.writeCompactEndElement(outWriter);
>                 }
> 
>                 //todo handle the faults here
> 
>-                WriterUtil.writeEndElement("operation",defaultWSDLPrefix,outWriter);
>+                WriterUtil.writeEndElement(OPERATION_NAME,defaultWSDLPrefix,outWriter);
> 
>             }
>         }
>@@ -407,12 +482,25 @@
>             WSDLBinding binding;
>             while (iterator.hasNext()) {
>                 binding =  (WSDLBinding)iterator.next();
>-                WriterUtil.writeStartElement("binding", defaultWSDLPrefix,outWriter);
>+                WriterUtil.writeStartElement(BINDING_NAME, defaultWSDLPrefix,outWriter);
>                 WriterUtil.writeAttribute("name",binding.getName().getLocalPart(),outWriter);
>                 WriterUtil.writeAttribute("type",targetNamespacePrefix +":"+ binding.getBoundInterface().getName().getLocalPart(),outWriter);
>                 WriterUtil.writeCloseStartElement(outWriter);
>+                //write the extensibility elements
>+                handleExtensibiltyElements(binding.getExtensibilityElements(),outWriter);
>+                //write the operations
> 
>-                WriterUtil.writeEndElement("binding", defaultWSDLPrefix,outWriter);
>+                Map bindingOps = binding.getBindingOperations();
>+                if (bindingOps!=null && !bindingOps.isEmpty()){
>+                    Iterator bindingOpsIterator = bindingOps.values().iterator();
>+                    while (bindingOpsIterator.hasNext()) {
>+                        writebindingOperation((WSDLBindingOperation)bindingOpsIterator.next(),outWriter);
>+                    }
>+                }
>+
>+
>+
>+                WriterUtil.writeEndElement(BINDING_NAME, defaultWSDLPrefix,outWriter);
> 
> 
>             }
>@@ -420,24 +508,96 @@
> 
>     }
> 
>-    protected void handlerExtensibiltyElements(List extElementList,Writer outWriter) throws IOException{
>+
>+    protected void writebindingOperation(WSDLBindingOperation bindingOp,Writer outWriter) throws IOException{
>+        WriterUtil.writeStartElement(BINDING_OPERATION,defaultWSDLPrefix,outWriter);
>+        WriterUtil.writeAttribute("name",bindingOp.getName().getLocalPart(),outWriter);
>+        WriterUtil.writeCloseStartElement(outWriter);
>+        handleExtensibiltyElements(bindingOp.getExtensibilityElements(),outWriter);
>+        //write the input
>+        WSDLBindingMessageReference input = bindingOp.getInput();
>+        if (input!=null){
>+            WriterUtil.writeStartElement(BINDING_INPUT,defaultWSDLPrefix,outWriter);
>+            WriterUtil.writeCompactEndElement(outWriter);
>+            handleExtensibiltyElements(input.getExtensibilityElements(),outWriter);
>+            WriterUtil.writeEndElement(BINDING_INPUT,defaultWSDLPrefix,outWriter);
>+        }
>+
>+        WSDLBindingMessageReference output = bindingOp.getInput();
>+        if (input!=null){
>+            WriterUtil.writeStartElement(BINDING_OUTPUT,defaultWSDLPrefix,outWriter);
>+            WriterUtil.writeCompactEndElement(outWriter);
>+            handleExtensibiltyElements(output.getExtensibilityElements(),outWriter);
>+            WriterUtil.writeEndElement(BINDING_OUTPUT,defaultWSDLPrefix,outWriter);
>+        }
>+        WriterUtil.writeEndElement(BINDING_OPERATION,defaultWSDLPrefix,outWriter);
>+    }
>+
>+    protected void handleExtensibiltyElements(List extElementList,Writer outWriter) throws IOException{
>         int extensibilityElementCount = extElementList.size();
>         for (int i = 0; i < extensibilityElementCount; i++) {
>             writeExtensibiltyElement((WSDLExtensibilityElement)extElementList.get(i),outWriter);
>         }
> 
>     }
>+
>+    /**
>+     *
>+     * @param extElement
>+     * @param outWriter
>+     * @throws IOException
>+     */
>     protected void writeExtensibiltyElement(WSDLExtensibilityElement extElement,Writer outWriter) throws IOException{
>         if (extElement instanceof Schema){
>             outWriter.write(((Schema)extElement).getElement().toString());
>         }else if(extElement instanceof SOAPAddress ){
>-            //todo fill this
>-        } else{
>+            writeSOAPAddressExtensibilityElement((SOAPAddress)extElement,outWriter);
>+        }else if(extElement instanceof SOAPBinding ){
>+            writeSOAPBindingExtensibilityElement((SOAPBinding)extElement,outWriter);
>+        }else if(extElement instanceof SOAPHeader ){
>+            writeSOAPHeaderExtensibilityElement((SOAPHeader)extElement,outWriter);
>+        } else if(extElement instanceof SOAPOperation ){
>+            writeSOAPOpextensibilityElement((SOAPOperation)extElement,outWriter);
>+        }else if(extElement instanceof SOAPBody ){
>+            writeSOAPBodyExtensibilityElement((SOAPBody)extElement,outWriter);
>+        }else{
>             WriterUtil.writeComment(" Unknown extensibility element" + extElement.toString(),outWriter);
>         }
> 
>+    }
>+
>+    private void writeSOAPAddressExtensibilityElement(SOAPAddress address,Writer outWriter) throws IOException{
>+         WriterUtil.writeStartElement("address",this.soapNsPrefix,outWriter);
>+        WriterUtil.writeAttribute("location",address.getLocationURI(),outWriter);
>+      //  WriterUtil.writeAttribute("style",soapBinding.getStyle(),outWriter);
>+        WriterUtil.writeCompactEndElement(outWriter);
>+    }
>+
>+    protected void writeSOAPBindingExtensibilityElement(SOAPBinding soapBinding,Writer outWriter)throws IOException{
>+        WriterUtil.writeStartElement("binding",this.soapNsPrefix,outWriter);
>+        WriterUtil.writeAttribute("transport",soapBinding.getTransportURI(),outWriter);
>+        WriterUtil.writeAttribute("style",soapBinding.getStyle(),outWriter);
>+        WriterUtil.writeCompactEndElement(outWriter);
>+    }
>+
>+    protected void writeSOAPBodyExtensibilityElement(SOAPBody soapBody,Writer outWriter)throws IOException{
>+        WriterUtil.writeStartElement("body",this.soapNsPrefix,outWriter);
>+        WriterUtil.writeAttribute("use",soapBody.getUse(),outWriter);
>+        WriterUtil.writeCompactEndElement(outWriter);
>+    }
>+
>+    protected void writeSOAPHeaderExtensibilityElement(SOAPHeader soapHeader,Writer outWriter)throws IOException{
>+        WriterUtil.writeStartElement("header",this.soapNsPrefix,outWriter);
>+        WriterUtil.writeAttribute("use",soapHeader.getUse(),outWriter);
>+        WriterUtil.writeCompactEndElement(outWriter);
>+    }
> 
> 
>+    protected void writeSOAPOpextensibilityElement(SOAPOperation soapop,Writer outWriter)throws IOException{
>+        WriterUtil.writeStartElement(BINDING_OPERATION,this.soapNsPrefix,outWriter);
>+        WriterUtil.writeAttribute("name",soapop.getType().getLocalPart(),outWriter);
>+        WriterUtil.writeAttribute("soapaction",soapop.getSoapAction(),outWriter);
>+        WriterUtil.writeCompactEndElement(outWriter);
>     }
> 
>     /**
>
>
>
>
>  
>