You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2006/10/06 06:07:52 UTC

svn commit: r453486 [3/4] - in /webservices/axis2/trunk/java/modules: codegen/src/org/apache/axis2/wsdl/codegen/emitter/ codegen/src/org/apache/axis2/wsdl/template/java/ kernel/src/org/apache/axis2/description/ kernel/src/org/apache/axis2/wsdl/

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService2OM.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService2OM.java?view=diff&rev=453486&r1=453485&r2=453486
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService2OM.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService2OM.java Thu Oct  5 21:07:51 2006
@@ -1,1078 +1,1068 @@
-package org.apache.axis2.description;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.engine.AxisConfiguration;
-import org.apache.axis2.namespace.Constants;
-import org.apache.axis2.util.ExternalPolicySerializer;
-import org.apache.axis2.util.PolicyUtil;
-import org.apache.axis2.wsdl.SOAPHeaderMessage;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.neethi.Policy;
-import org.apache.neethi.PolicyComponent;
-import org.apache.neethi.PolicyReference;
-import org.apache.neethi.PolicyRegistry;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.java2wsdl.Java2WSDLConstants;
-
-/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * 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.
- *
- *
- */
-
-public class AxisService2OM implements Java2WSDLConstants {
-
-    private AxisService axisService;
-
-    private String[] urls;
-
-    private String targetNamespace;
-
-    private OMElement definition;
-
-    private OMNamespace soap;
-
-    private OMNamespace soap12;
-
-    private OMNamespace http;
-
-    private OMNamespace mime;
-
-    private OMNamespace tns;
-
-    private OMNamespace wsdl;
-
-    private String style;
-
-    private String use;
-
-    private String servicePath;
-
-    private boolean generateHttp = false;
-
-    private HashMap policiesInDefinitions;
-
-    private ExternalPolicySerializer serializer;
-
-    private HashMap messagesMap;
-
-    public AxisService2OM(AxisService service, String[] serviceURL,
-                          String style, String use, String servicePath) {
-        this.axisService = service;
-        urls = serviceURL;
-        if (style == null) {
-            this.style = DOCUMENT;
-        } else {
-            this.style = style;
-        }
-        if (use == null) {
-            this.use = LITERAL;
-        } else {
-            this.use = use;
-        }
-        this.servicePath = servicePath;
-        this.targetNamespace = service.getTargetNamespace();
-
-        serializer = new ExternalPolicySerializer();
-        // CHECKME check whether service.getAxisConfiguration() return null ???
-
-        AxisConfiguration configuration = service.getAxisConfiguration();
-        if (configuration != null) {
-            serializer.setAssertionsToFilter(configuration
-                    .getLocalPolicyAssertions());
-        }
-
-    }
-
-    public OMElement generateOM() throws Exception {
-        OMFactory fac = OMAbstractFactory.getOMFactory();
-        wsdl = fac.createOMNamespace(WSDL_NAMESPACE,
-                                     DEFAULT_WSDL_NAMESPACE_PREFIX);
-        OMElement ele = fac.createOMElement("definitions", wsdl);
-        setDefinitionElement(ele);
-
-        policiesInDefinitions = new HashMap();
-
-        Map nameSpaceMap = axisService.getNameSpacesMap();
-        Iterator keys = nameSpaceMap.keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if ("".equals(key)) {
-                ele.declareDefaultNamespace((String) nameSpaceMap.get(key));
-            } else {
-                ele.declareNamespace((String) nameSpaceMap.get(key), key);
-            }
-        }
-        soap = ele.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX);
-        soap12 = ele.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
-        http = ele.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX);
-        mime = ele.declareNamespace(MIME_NAMESPACE, MIME_PREFIX);
-        String prefix = getPrefix(axisService.getTargetNamespace());
-        if (prefix == null || "".equals(prefix)) {
-            prefix = DEFAULT_TARGET_NAMESPACE_PREFIX;
-        }
-        axisService.getNameSpacesMap().put(prefix,
-                                           axisService.getTargetNamespace());
-        tns = ele.declareNamespace(axisService.getTargetNamespace(), prefix);
-
-        // adding documentation element
-        // <documentation>&lt;b&gt;NEW!&lt;/b&gt; This method accepts an ISBN
-        // string and returns &lt;b&gt;Amazon.co.uk&lt;/b&gt; Sales Rank for
-        // that book.</documentation>
-        String servicedescription = axisService.getServiceDescription();
-        if (servicedescription != null && !"".equals(servicedescription)) {
-            OMElement documenentattion = fac.createOMElement("documentation",
-                                                             wsdl);
-            documenentattion.setText(servicedescription);
-            ele.addChild(documenentattion);
-        }
-
-        ele.addAttribute("targetNamespace", axisService.getTargetNamespace(),
-                         null);
-        OMElement wsdlTypes = fac.createOMElement("types", wsdl);
-        ele.addChild(wsdlTypes);
-
-        // populate the schema mappings
-        axisService.populateSchemaMappings();
-
-        ArrayList schemas = axisService.getSchema();
-        for (int i = 0; i < schemas.size(); i++) {
-            StringWriter writer = new StringWriter();
-
-            // XmlSchema schema = (XmlSchema) schemas.get(i);
-            XmlSchema schema = axisService.getSchema(i);
-
-            String targetNamespace = schema.getTargetNamespace();
-            if (!Constants.NS_URI_XML.equals(targetNamespace)) {
-                schema.write(writer);
-                String schemaString = writer.toString();
-                if (!"".equals(schemaString)) {
-                    XMLStreamReader xmlReader = StAXUtils
-                            .createXMLStreamReader(new StringReader(
-                                    schemaString));
-
-                    StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac,
-                                                                    xmlReader);
-                    wsdlTypes.addChild(staxOMBuilder.getDocumentElement());
-                }
-            }
-        }
-        generateMessages(fac, ele);
-        generatePortType(fac, ele);
-        generateSOAP11Binding(fac, ele);
-        generateSOAP12Binding(fac, ele);
-        // generateHttp
-        if (axisService.getParent() != null) {
-            AxisDescription axisdesc = axisService.getParent().getParent();
-            Parameter parameter = axisdesc.getParameter("enableHTTP");
-            if (parameter != null) {
-                Object value = parameter.getValue();
-                if ("true".equals(value.toString())) {
-                    generateHttp = true;
-                    generatePostBinding(fac, ele);
-                }
-            }
-        }
-        generateService(fac, ele);
-        addPoliciesToDefinitionElement(policiesInDefinitions.values()
-                .iterator(), definition);
-
-        return ele;
-    }
-
-    private void generateMessages(OMFactory fac, OMElement defintions) {
-        HashSet faultMessageNames = new HashSet();
-        messagesMap = new HashMap();
-
-        Iterator operations = axisService.getOperations();
-        while (operations.hasNext()) {
-            AxisOperation axisOperation = (AxisOperation) operations.next();
-            if (axisOperation.isControlOperation()) {
-                continue;
-            }
-            String MEP = axisOperation.getMessageExchangePattern();
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage inaxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if (inaxisMessage != null) {
-                    writeMessage(inaxisMessage, fac, defintions);
-                    generateHeaderMessages(inaxisMessage, fac, defintions);
-                }
-            }
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage outAxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                if (outAxisMessage != null) {
-                    writeMessage(outAxisMessage, fac, defintions);
-                    generateHeaderMessages(outAxisMessage, fac, defintions);
-                }
-            }
-
-            // generate fault Messages
-            ArrayList faultyMessages = axisOperation.getFaultMessages();
-            if (faultyMessages != null) {
-                for (int i = 0; i < faultyMessages.size(); i++) {
-                    AxisMessage axisMessage = (AxisMessage) faultyMessages
-                            .get(i);
-                    String name = axisMessage.getName();
-                    if (faultMessageNames.add(name)) {
-                        writeMessage(axisMessage, fac, defintions);
-                        generateHeaderMessages(axisMessage, fac, defintions);
-                    }
-                }
-            }
-        }
-    }
-
-    private void generateHeaderMessages(AxisMessage axismessage, OMFactory fac,
-                                        OMElement defintions) {
-        ArrayList extList = axismessage.getSoapHeaders();
-        for (int i = 0; i < extList.size(); i++) {
-            SOAPHeaderMessage header = (SOAPHeaderMessage) extList.get(i);
-            OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME,
-                                                           wsdl);
-            messageElement.addAttribute(ATTRIBUTE_NAME, header.getMessage()
-                    .getLocalPart(), null);
-            defintions.addChild(messageElement);
-            OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME,
-                                                        wsdl);
-            messageElement.addChild(messagePart);
-            messagePart.addAttribute(ATTRIBUTE_NAME, header.part(), null);
-            if (header.getElement() == null) {
-                throw new RuntimeException(ELEMENT_ATTRIBUTE_NAME
-                                           + " is null for " + header.getMessage());
-            }
-            messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, getPrefix(header
-                    .getElement().getNamespaceURI())
-                                                             + ":" + header.getElement().getLocalPart(), null);
-        }
-    }
-
-    private void writeMessage(AxisMessage axismessage, OMFactory fac,
-                              OMElement defintions) {
-        if (messagesMap.get(axismessage.getName()) == null) {
-            messagesMap.put(axismessage.getName(), axismessage);
-            QName schemaElementName = axismessage.getElementQName();
-            OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME,
-                                                           wsdl);
-            messageElement.addAttribute(ATTRIBUTE_NAME, axismessage.getName(),
-                                        null);
-            defintions.addChild(messageElement);
-            if (schemaElementName != null) {
-                OMElement messagePart = fac.createOMElement(
-                        PART_ATTRIBUTE_NAME, wsdl);
-                messageElement.addChild(messagePart);
-                messagePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
-                messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
-                                         getPrefix(schemaElementName.getNamespaceURI()) + ":"
-                                         + schemaElementName.getLocalPart(), null);
-            }
-        }
-
-    }
-
-    /**
-     * Generate the porttypes
-     */
-    private void generatePortType(OMFactory fac, OMElement defintions)
-            throws Exception {
-        OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl);
-        defintions.addChild(portType);
-
-        portType.addAttribute(ATTRIBUTE_NAME, axisService.getName()
-                                              + PORT_TYPE_SUFFIX, null);
-
-        addPolicyAsExtAttribute(PolicyInclude.PORT_TYPE_POLICY, axisService
-                .getPolicyInclude(), portType, fac);
-        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) operations.next();
-            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
-                continue;
-            }
-            String operationName = axisOperation.getName().getLocalPart();
-            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
-                                                      wsdl);
-            portType.addChild(operation);
-            operation.addAttribute(ATTRIBUTE_NAME, operationName, null);
-            addPolicyAsExtElement(PolicyInclude.OPERATION_POLICY, axisOperation
-                    .getPolicyInclude(), operation, fac);
-
-            String MEP = axisOperation.getMessageExchangePattern();
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage inaxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if (inaxisMessage != null) {
-                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
-                                                          wsdl);
-                    input.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
-                                                           + ":" + inaxisMessage.getName(), null);
-                    addPolicyAsExtElement(PolicyInclude.INPUT_POLICY,
-                                          inaxisMessage.getPolicyInclude(), input, fac);
-                    addWSAWActionAttribute(input, axisOperation
-                            .getInputAction());
-                    operation.addChild(input);
-                }
-            }
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage outAxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                if (outAxisMessage != null) {
-                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
-                                                           wsdl);
-                    output.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
-                                                            + ":" + outAxisMessage.getName(), null);
-                    addPolicyAsExtElement(PolicyInclude.OUTPUT_POLICY,
-                                          outAxisMessage.getPolicyInclude(), output, fac);
-                    addWSAWActionAttribute(output, axisOperation
-                            .getOutputAction());
-                    operation.addChild(output);
-                }
-            }
-
-            // generate fault Messages
-            ArrayList faultyMessages = axisOperation.getFaultMessages();
-            if (faultyMessages != null) {
-                for (int i = 0; i < faultyMessages.size(); i++) {
-                    AxisMessage faultyMessge = (AxisMessage) faultyMessages
-                            .get(i);
-                    OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
-                                                          wsdl);
-                    fault.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
-                                                           + ":" + faultyMessge.getName(), null);
-                    fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
-                                       null);
-                    addWSAWActionAttribute(fault, axisOperation
-                            .getFaultAction(faultyMessge.getName()));
-                    // TODO add policies for fault messages
-                    operation.addChild(fault);
-                }
-            }
-
-        }
-    }
-
-    /**
-     * Generate the service
-     */
-    public void generateService(OMFactory fac, OMElement defintions)
-            throws Exception {
-        OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl);
-        defintions.addChild(service);
-        service.addAttribute(ATTRIBUTE_NAME, axisService.getName(), null);
-        generateSOAP11Port(fac, service);
-        generateSOAP12Port(fac, service);
-
-        addPolicyAsExtElement(PolicyInclude.SERVICE_POLICY, axisService
-                .getPolicyInclude(), service, fac);
-
-        if (generateHttp) {
-            generateHTTPPort(fac, service);
-        }
-
-    }
-
-    private void generateSOAP11Port(OMFactory fac, OMElement service)
-            throws Exception {
-        for (int i = 0; i < urls.length; i++) {
-            String urlString = urls[i];
-            String protocol = urlString == null ? null : new URI(urlString)
-                    .getScheme();
-            if (urlString == null) {
-                urlString = "REPLACE_WITH_ACTUAL_URL";
-            }
-            OMElement port = fac.createOMElement(PORT, wsdl);
-            service.addChild(port);
-            String name = axisService.getName() + SOAP11PORT
-                          + ((protocol == null) ? "" : "_" + protocol);
-            if (i > 0) {
-                name += i;
-            }
-            port.addAttribute(ATTRIBUTE_NAME, name, null);
-            port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
-                                                  + axisService.getName() + BINDING_NAME_SUFFIX, null);
-            addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
-                                soap);
-
-            addPolicyAsExtElement(PolicyInclude.PORT_POLICY, axisService
-                    .getPolicyInclude(), port, fac);
-        }
-
-    }
-
-    private void generateHTTPPort(OMFactory fac, OMElement service)
-            throws Exception {
-        for (int i = 0; i < urls.length; i++) {
-            String urlString = urls[i];
-            if (urlString != null && urlString.startsWith("http")) {
-                OMElement port = fac.createOMElement(PORT, wsdl);
-                service.addChild(port);
-                String name = axisService.getName() + HTTP_PORT;
-                if (i > 0) {
-                    name += i;
-                }
-                port.addAttribute(ATTRIBUTE_NAME, name, null);
-                port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
-                                                      + axisService.getName() + HTTP_BINDING, null);
-                OMElement extElement = fac.createOMElement("address", http);
-                port.addChild(extElement);
-                urlString = urlString.replaceAll(servicePath, "rest");
-                extElement.addAttribute("location", urlString, null);
-            }
-        }
-    }
-
-    private void generateSOAP12Port(OMFactory fac, OMElement service)
-            throws Exception {
-        for (int i = 0; i < urls.length; i++) {
-            String urlString = urls[i];
-            String protocol = urlString == null ? null : new URI(urlString)
-                    .getScheme();
-            if (urlString == null) {
-                urlString = "REPLACE_WITH_ACTUAL_URL";
-            }
-            OMElement port = fac.createOMElement(PORT, wsdl);
-            service.addChild(port);
-            String name = axisService.getName() + SOAP12PORT
-                          + ((protocol == null) ? "" : "_" + protocol);
-            if (i > 0) {
-                name += i;
-            }
-            port.addAttribute(ATTRIBUTE_NAME, name, null);
-            port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
-                                                  + axisService.getName() + SOAP12BINDING_NAME_SUFFIX, null);
-            addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
-                                soap12);
-
-            addPolicyAsExtElement(PolicyInclude.PORT_POLICY, axisService
-                    .getPolicyInclude(), port, fac);
-        }
-    }
-
-    /**
-     * Generate the bindings
-     */
-    private void generateSOAP11Binding(OMFactory fac, OMElement defintions)
-            throws Exception {
-        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
-        defintions.addChild(binding);
-        binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
-                                             + BINDING_NAME_SUFFIX, null);
-        binding.addAttribute("type", tns.getPrefix() + ":"
-                                     + axisService.getName() + PORT_TYPE_SUFFIX, null);
-
-        addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService
-                .getPolicyInclude(), binding, fac);
-        addPolicyAsExtElement(PolicyInclude.BINDING_POLICY, axisService
-                .getPolicyInclude(), binding, fac);
-
-        // Adding ext elements
-        addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
-                            TRANSPORT_URI, STYLE, style, soap);
-
-        // Add WS-Addressing UsingAddressing element if appropriate
-        // SHOULD be on the binding element per the specification
-        if (axisService.getWSAddressingFlag().equals(
-                AddressingConstants.ADDRESSING_OPTIONAL)) {
-            OMNamespace wsawNamespace = fac.createOMNamespace(
-                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
-            addExtensionElement(fac, binding,
-                                AddressingConstants.USING_ADDRESSING,
-                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
-                                wsawNamespace);
-        } else if (axisService.getWSAddressingFlag().equals(
-                AddressingConstants.ADDRESSING_REQUIRED)) {
-            OMNamespace wsawNamespace = fac.createOMNamespace(
-                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
-            addExtensionElement(fac, binding,
-                                AddressingConstants.USING_ADDRESSING,
-                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
-                                wsawNamespace);
-        }
-
-        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) operations.next();
-            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
-                continue;
-            }
-            String operationName = axisOperation.getName().getLocalPart();
-            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
-                                                      wsdl);
-            binding.addChild(operation);
-            String soapAction = axisOperation.getInputAction();
-            if (soapAction == null) {
-                soapAction = "";
-            }
-            addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
-                                SOAP_ACTION, soapAction, STYLE, style, soap);
-
-            addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY,
-                                  axisOperation.getPolicyInclude(), operation, fac);
-            addPolicyAsExtElement(PolicyInclude.AXIS_OPERATION_POLICY,
-                                  axisOperation.getPolicyInclude(), operation, fac);
-
-            String MEP = axisOperation.getMessageExchangePattern();
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage inaxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if (inaxisMessage != null) {
-                    operation.addAttribute(ATTRIBUTE_NAME, operationName, null);
-                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
-                                                          wsdl);
-                    addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
-                                        null, targetNamespace, soap);
-                    addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY,
-                                          inaxisMessage.getPolicyInclude(), input, fac);
-                    operation.addChild(input);
-                    writeSoapHeaders(inaxisMessage, fac, input, soap);
-                }
-            }
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage outAxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                if (outAxisMessage != null) {
-                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
-                                                           wsdl);
-                    addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
-                                        null, targetNamespace, soap);
-                    addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY,
-                                          outAxisMessage.getPolicyInclude(), output, fac);
-                    operation.addChild(output);
-                    writeSoapHeaders(outAxisMessage, fac, output, soap);
-                }
-            }
-
-            // generate fault Messages
-            ArrayList faultyMessages = axisOperation.getFaultMessages();
-            if (faultyMessages != null) {
-                for (int i = 0; i < faultyMessages.size(); i++) {
-                    AxisMessage faultyMessge = (AxisMessage) faultyMessages
-                            .get(i);
-                    OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
-                                                          wsdl);
-                    addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
-                                        null, targetNamespace, soap);
-                    fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
-                                       null);
-                    // TODO adding policies for fault messages
-                    operation.addChild(fault);
-                    writeSoapHeaders(faultyMessge, fac, fault, soap);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * Generate the bindings
-     */
-    private void generateSOAP12Binding(OMFactory fac, OMElement defintions)
-            throws Exception {
-        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
-        defintions.addChild(binding);
-        binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
-                                             + SOAP12BINDING_NAME_SUFFIX, null);
-        binding.addAttribute("type", tns.getPrefix() + ":"
-                                     + axisService.getName() + PORT_TYPE_SUFFIX, null);
-
-        addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService
-                .getPolicyInclude(), binding, fac);
-        addPolicyAsExtElement(PolicyInclude.BINDING_POLICY, axisService
-                .getPolicyInclude(), binding, fac);
-
-        // Adding ext elements
-        addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
-                            TRANSPORT_URI, STYLE, style, soap12);
-
-        // Add WS-Addressing UsingAddressing element if appropriate
-        // SHOULD be on the binding element per the specification
-        if (axisService.getWSAddressingFlag().equals(
-                AddressingConstants.ADDRESSING_OPTIONAL)) {
-            OMNamespace wsawNamespace = fac.createOMNamespace(
-                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
-            addExtensionElement(fac, binding,
-                                AddressingConstants.USING_ADDRESSING,
-                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
-                                wsawNamespace);
-        } else if (axisService.getWSAddressingFlag().equals(
-                AddressingConstants.ADDRESSING_REQUIRED)) {
-            OMNamespace wsawNamespace = fac.createOMNamespace(
-                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
-            addExtensionElement(fac, binding,
-                                AddressingConstants.USING_ADDRESSING,
-                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
-                                wsawNamespace);
-        }
-
-        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) operations.next();
-            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
-                continue;
-            }
-            String opeartionName = axisOperation.getName().getLocalPart();
-            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
-                                                      wsdl);
-            binding.addChild(operation);
-            String soapAction = axisOperation.getInputAction();
-            if (soapAction == null) {
-                soapAction = "";
-            }
-            addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
-                                SOAP_ACTION, soapAction, STYLE, style, soap12);
-
-            addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY,
-                                  axisOperation.getPolicyInclude(), operation, fac);
-            addPolicyAsExtElement(PolicyInclude.AXIS_OPERATION_POLICY,
-                                  axisOperation.getPolicyInclude(), operation, fac);
-
-            String MEP = axisOperation.getMessageExchangePattern();
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage inaxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if (inaxisMessage != null) {
-                    operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
-                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
-                                                          wsdl);
-                    addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
-                                        null, targetNamespace, soap12);
-                    addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY,
-                                          inaxisMessage.getPolicyInclude(), input, fac);
-                    operation.addChild(input);
-                    writeSoapHeaders(inaxisMessage, fac, input, soap12);
-                }
-            }
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage outAxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                if (outAxisMessage != null) {
-                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
-                                                           wsdl);
-                    addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
-                                        null, targetNamespace, soap12);
-                    addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY,
-                                          outAxisMessage.getPolicyInclude(), output, fac);
-                    operation.addChild(output);
-                    writeSoapHeaders(outAxisMessage, fac, output, soap12);
-                }
-            }
-
-            // generate fault Messages
-            ArrayList faultyMessages = axisOperation.getFaultMessages();
-            if (faultyMessages != null) {
-                for (int i = 0; i < faultyMessages.size(); i++) {
-                    AxisMessage faultyMessge = (AxisMessage) faultyMessages
-                            .get(i);
-                    OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
-                                                          wsdl);
-                    addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
-                                        null, targetNamespace, soap12);
-                    fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
-                                       null);
-                    // add policies for fault messages
-                    operation.addChild(fault);
-                    writeSoapHeaders(faultyMessge, fac, fault, soap12);
-                }
-            }
-        }
-    }
-
-    private void generatePostBinding(OMFactory fac, OMElement defintions)
-            throws Exception {
-        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
-        defintions.addChild(binding);
-        binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
-                                             + HTTP_BINDING, null);
-        binding.addAttribute("type", tns.getPrefix() + ":"
-                                     + axisService.getName() + PORT_TYPE_SUFFIX, null);
-
-        // Adding ext elements
-        OMElement httpBinding = fac.createOMElement("binding", http);
-        binding.addChild(httpBinding);
-        httpBinding.addAttribute("verb", "POST", null);
-
-
-        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
-            AxisOperation axisOperation = (AxisOperation) operations.next();
-            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
-                continue;
-            }
-            String opeartionName = axisOperation.getName().getLocalPart();
-            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
-                                                      wsdl);
-            binding.addChild(operation);
-
-            OMElement httpOperation = fac.createOMElement("operation", http);
-            operation.addChild(httpOperation);
-            httpOperation.addAttribute("location", axisOperation.getName()
-                    .getLocalPart(), null);
-
-            String MEP = axisOperation.getMessageExchangePattern();
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage inaxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if (inaxisMessage != null) {
-                    operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
-                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
-                                                          wsdl);
-                    OMElement inputelement = fac.createOMElement("content",
-                                                                 mime);
-                    input.addChild(inputelement);
-                    inputelement.addAttribute("type", "text/xml", null);
-                    operation.addChild(input);
-                }
-            }
-
-            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
-                    .equals(MEP)
-                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
-                    .equals(MEP)) {
-                AxisMessage outAxisMessage = axisOperation
-                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                if (outAxisMessage != null) {
-                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
-                                                           wsdl);
-                    OMElement outElement = fac.createOMElement("content", mime);
-                    outElement.addChild(outElement);
-                    outElement.addAttribute("type", "text/xml", null);
-                    output.addChild(outElement);
-                    operation.addChild(output);
-                }
-            }
-        }
-    }
-
-    private void writeSoapHeaders(AxisMessage inaxisMessage, OMFactory fac,
-                                  OMElement input, OMNamespace soapNameSpace) throws Exception {
-        ArrayList extElementList;
-        extElementList = inaxisMessage.getSoapHeaders();
-        if (extElementList != null) {
-            Iterator elements = extElementList.iterator();
-            while (elements.hasNext()) {
-                SOAPHeaderMessage soapheader = (SOAPHeaderMessage) elements
-                        .next();
-                addSOAPHeader(fac, input, soapheader, soapNameSpace);
-            }
-        }
-    }
-
-    private void addExtensionElemnet(OMFactory fac, OMElement element,
-                                     String name, String att1Name, String att1Value, String att2Name,
-                                     String att2Value, OMNamespace soapNameSpace) {
-        OMElement soapbinding = fac.createOMElement(name, soapNameSpace);
-        element.addChild(soapbinding);
-        soapbinding.addAttribute(att1Name, att1Value, null);
-        if (att2Name != null) {
-            soapbinding.addAttribute(att2Name, att2Value, null);
-        }
-    }
-
-    private void addExtensionElement(OMFactory fac, OMElement element,
-                                     String name, String att1Name, String att1Value,
-                                     OMNamespace soapNameSpace) {
-        OMElement extElement = fac.createOMElement(name, soapNameSpace);
-        element.addChild(extElement);
-        extElement.addAttribute(att1Name, att1Value, null);
-    }
-
-    private void setDefinitionElement(OMElement defintion) {
-        this.definition = defintion;
-    }
-
-    private void addSOAPHeader(OMFactory fac, OMElement element,
-                               SOAPHeaderMessage header, OMNamespace soapNameSpace) {
-        OMElement extElement = fac.createOMElement("header", soapNameSpace);
-        element.addChild(extElement);
-        String use = header.getUse();
-        if (use != null) {
-            extElement.addAttribute("use", use, null);
-        }
-        if (header.part() != null) {
-            extElement.addAttribute("part", header.part(), null);
-        }
-        if (header.getMessage() != null) {
-            extElement.addAttribute("message", getPrefix(targetNamespace) + ":"
-                                               + header.getMessage().getLocalPart(), null);
-        }
-    }
-
-    private String getPrefix(String targetNameSpace) {
-        Map map = axisService.getNameSpacesMap();
-        Iterator keys = map.keySet().iterator();
-        while (keys.hasNext()) {
-            String key = (String) keys.next();
-            if (map.get(key).equals(targetNameSpace)) {
-                return key;
-            }
-        }
-        return null;
-    }
-
-    private void addWSAWActionAttribute(OMElement element, String action) {
-        if (action == null || action.length() == 0) {
-            return;
-        }
-        OMNamespace namespace = element.declareNamespace(
-                AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
-        element.addAttribute("Action", action, namespace);
-    }
-
-    private void addPolicyAsExtElement(int type, PolicyInclude policyInclude,
-                                       OMElement element, OMFactory factory) throws Exception {
-        ArrayList elementList = policyInclude.getPolicyElements(type);
-
-        for (Iterator iterator = elementList.iterator(); iterator.hasNext();) {
-            Object policyElement = iterator.next();
-
-            if (policyElement instanceof Policy) {
-                element.addChild(PolicyUtil.getPolicyComponentAsOMElement(
-                        (PolicyComponent) policyElement, serializer));
-
-            } else if (policyElement instanceof PolicyReference) {
-                element
-                        .addChild(PolicyUtil
-                                .getPolicyComponentAsOMElement((PolicyComponent) policyElement));
-
-                PolicyRegistry reg = policyInclude.getPolicyRegistry();
-                String key = ((PolicyReference) policyElement).getURI();
-
-                if (key.startsWith("#")) {
-                    key = key.substring(key.indexOf("#") + 1);
-                }
-
-                Policy p = reg.lookup(key);
-
-                if (p == null) {
-                    throw new Exception("Policy not found for uri : " + key);
-                }
-
-                addPolicyToDefinitionElement(key, p);
-            }
-        }
-    }
-
-    private void addPolicyAsExtAttribute(int type, PolicyInclude policyInclude,
-                                         OMElement element, OMFactory factory) throws Exception {
-
-        ArrayList elementList = policyInclude.getPolicyElements(type);
-        ArrayList policyURIs = new ArrayList();
-
-        for (Iterator iterator = elementList.iterator(); iterator.hasNext();) {
-            Object policyElement = iterator.next();
-            String key;
-
-            if (policyElement instanceof Policy) {
-                Policy p = (Policy) policyElement;
-
-                if (p.getId() != null) {
-                    key = "#" + p.getId();
-                } else if (p.getName() != null) {
-                    key = p.getName();
-                } else {
-                    throw new RuntimeException(
-                            "Can't add the Policy as an extensibility attribute since it doesn't have a id or a name attribute");
-                }
-
-                policyURIs.add(key);
-                addPolicyToDefinitionElement(key, p);
-
-            } else {
-                String uri = ((PolicyReference) policyElement).getURI();
-                PolicyRegistry registry = policyInclude.getPolicyRegistry();
-
-                if (uri.startsWith("#")) {
-                    key = uri.substring(uri.indexOf('#') + 1);
-                } else {
-                    key = uri;
-                }
-
-                Policy p = registry.lookup(key);
-
-                if (p == null) {
-                    throw new RuntimeException("Cannot resolve " + uri
-                                               + " to a Policy");
-                }
-                addPolicyToDefinitionElement(key, p);
-            }
-        }
-
-        if (!policyURIs.isEmpty()) {
-            String value = null;
-
-            /*
-             * We need to create a String that is like 'uri1 uri2 .." to set as
-             * the value of the wsp:PolicyURIs attribute.
-             */
-            for (Iterator iterator = policyURIs.iterator(); iterator.hasNext();) {
-                String uri = (String) iterator.next();
-                value = (value == null) ? uri : " " + uri;
-            }
-
-            OMNamespace ns = factory.createOMNamespace(
-                    org.apache.neethi.Constants.URI_POLICY_NS,
-                    org.apache.neethi.Constants.ATTR_WSP);
-            OMAttribute URIs = factory.createOMAttribute("PolicyURIs", ns,
-                                                         value);
-            element.addAttribute(URIs);
-        }
-    }
-
-    private void addPoliciesToDefinitionElement(Iterator iterator,
-                                                OMElement definitionElement) throws Exception {
-        Policy policy;
-        OMElement policyElement;
-        OMNode firstChild;
-
-        for (; iterator.hasNext();) {
-            policy = (Policy) iterator.next();
-            policyElement = PolicyUtil.getPolicyComponentAsOMElement(policy,
-                                                                     serializer);
-
-            firstChild = definition.getFirstOMChild();
-
-            if (firstChild != null) {
-                firstChild.insertSiblingBefore(policyElement);
-            } else {
-                definitionElement.addChild(policyElement);
-            }
-        }
-    }
-
-    private void addPolicyToDefinitionElement(String key, Policy policy) {
-        policiesInDefinitions.put(key, policy);
-    }
-}
+package org.apache.axis2.description;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.namespace.Constants;
+import org.apache.axis2.util.ExternalPolicySerializer;
+import org.apache.axis2.util.PolicyUtil;
+import org.apache.axis2.wsdl.SOAPHeaderMessage;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.neethi.Policy;
+import org.apache.neethi.PolicyComponent;
+import org.apache.neethi.PolicyReference;
+import org.apache.neethi.PolicyRegistry;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.java2wsdl.Java2WSDLConstants;
+
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ *
+ *
+ */
+
+public class AxisService2OM implements Java2WSDLConstants {
+
+    private AxisService axisService;
+
+    private String[] urls;
+
+    private String targetNamespace;
+
+    private OMElement definition;
+
+    private OMNamespace soap;
+
+    private OMNamespace soap12;
+
+    private OMNamespace http;
+
+    private OMNamespace mime;
+
+    private OMNamespace tns;
+
+    private OMNamespace wsdl;
+
+    private String style;
+
+    private String use;
+
+    private String servicePath;
+
+    private boolean generateHttp = false;
+
+    private HashMap policiesInDefinitions;
+
+    private ExternalPolicySerializer serializer;
+
+    private HashMap messagesMap;
+
+    public AxisService2OM(AxisService service, String[] serviceURL,
+                          String style, String use, String servicePath) {
+        this.axisService = service;
+        urls = serviceURL;
+        if (style == null) {
+            this.style = DOCUMENT;
+        } else {
+            this.style = style;
+        }
+        if (use == null) {
+            this.use = LITERAL;
+        } else {
+            this.use = use;
+        }
+        this.servicePath = servicePath;
+        this.targetNamespace = service.getTargetNamespace();
+
+        serializer = new ExternalPolicySerializer();
+        // CHECKME check whether service.getAxisConfiguration() return null ???
+
+        AxisConfiguration configuration = service.getAxisConfiguration();
+        if (configuration != null) {
+            serializer.setAssertionsToFilter(configuration
+                    .getLocalPolicyAssertions());
+        }
+
+    }
+
+    public OMElement generateOM() throws Exception {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        wsdl = fac.createOMNamespace(WSDL_NAMESPACE,
+                                     DEFAULT_WSDL_NAMESPACE_PREFIX);
+        OMElement ele = fac.createOMElement("definitions", wsdl);
+        setDefinitionElement(ele);
+
+        policiesInDefinitions = new HashMap();
+
+        Map nameSpaceMap = axisService.getNameSpacesMap();
+        Iterator keys = nameSpaceMap.keySet().iterator();
+        while (keys.hasNext()) {
+            String key = (String) keys.next();
+            if ("".equals(key)) {
+                ele.declareDefaultNamespace((String) nameSpaceMap.get(key));
+            } else {
+                ele.declareNamespace((String) nameSpaceMap.get(key), key);
+            }
+        }
+        soap = ele.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX);
+        soap12 = ele.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
+        http = ele.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX);
+        mime = ele.declareNamespace(MIME_NAMESPACE, MIME_PREFIX);
+        String prefix = getPrefix(axisService.getTargetNamespace());
+        if (prefix == null || "".equals(prefix)) {
+            prefix = DEFAULT_TARGET_NAMESPACE_PREFIX;
+        }
+        axisService.getNameSpacesMap().put(prefix,
+                                           axisService.getTargetNamespace());
+        tns = ele.declareNamespace(axisService.getTargetNamespace(), prefix);
+
+        // adding documentation element
+        // <documentation>&lt;b&gt;NEW!&lt;/b&gt; This method accepts an ISBN
+        // string and returns &lt;b&gt;Amazon.co.uk&lt;/b&gt; Sales Rank for
+        // that book.</documentation>
+        String servicedescription = axisService.getServiceDescription();
+        if (servicedescription != null && !"".equals(servicedescription)) {
+            OMElement documenentattion = fac.createOMElement("documentation",
+                                                             wsdl);
+            documenentattion.setText(servicedescription);
+            ele.addChild(documenentattion);
+        }
+
+        ele.addAttribute("targetNamespace", axisService.getTargetNamespace(),
+                         null);
+        OMElement wsdlTypes = fac.createOMElement("types", wsdl);
+        ele.addChild(wsdlTypes);
+
+        // populate the schema mappings
+        axisService.populateSchemaMappings();
+
+        ArrayList schemas = axisService.getSchema();
+        for (int i = 0; i < schemas.size(); i++) {
+            StringWriter writer = new StringWriter();
+
+            // XmlSchema schema = (XmlSchema) schemas.get(i);
+            XmlSchema schema = axisService.getSchema(i);
+
+            String targetNamespace = schema.getTargetNamespace();
+            if (!Constants.NS_URI_XML.equals(targetNamespace)) {
+                schema.write(writer);
+                String schemaString = writer.toString();
+                if (!"".equals(schemaString)) {
+                    XMLStreamReader xmlReader = StAXUtils
+                            .createXMLStreamReader(new StringReader(
+                                    schemaString));
+
+                    StAXOMBuilder staxOMBuilder = new StAXOMBuilder(fac,
+                                                                    xmlReader);
+                    wsdlTypes.addChild(staxOMBuilder.getDocumentElement());
+                }
+            }
+        }
+        generateMessages(fac, ele);
+        generatePortType(fac, ele);
+        generateSOAP11Binding(fac, ele);
+        generateSOAP12Binding(fac, ele);
+        // generateHttp
+        if (axisService.getParent() != null) {
+            AxisDescription axisdesc = axisService.getParent().getParent();
+            Parameter parameter = axisdesc.getParameter("enableHTTP");
+            if (parameter != null) {
+                Object value = parameter.getValue();
+                if ("true".equals(value.toString())) {
+                    generateHttp = true;
+                    generatePostBinding(fac, ele);
+                }
+            }
+        }
+        generateService(fac, ele);
+        addPoliciesToDefinitionElement(policiesInDefinitions.values()
+                .iterator(), definition);
+
+        return ele;
+    }
+
+    private void generateMessages(OMFactory fac, OMElement defintions) {
+        HashSet faultMessageNames = new HashSet();
+        messagesMap = new HashMap();
+
+        Iterator operations = axisService.getOperations();
+        while (operations.hasNext()) {
+            AxisOperation axisOperation = (AxisOperation) operations.next();
+            if (axisOperation.isControlOperation()) {
+                continue;
+            }
+            String MEP = axisOperation.getMessageExchangePattern();
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage inaxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                if (inaxisMessage != null) {
+                    writeMessage(inaxisMessage, fac, defintions);
+                    generateHeaderMessages(inaxisMessage, fac, defintions);
+                }
+            }
+
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage outAxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+                if (outAxisMessage != null) {
+                    writeMessage(outAxisMessage, fac, defintions);
+                    generateHeaderMessages(outAxisMessage, fac, defintions);
+                }
+            }
+
+            // generate fault Messages
+            ArrayList faultyMessages = axisOperation.getFaultMessages();
+            if (faultyMessages != null) {
+                for (int i = 0; i < faultyMessages.size(); i++) {
+                    AxisMessage axisMessage = (AxisMessage) faultyMessages
+                            .get(i);
+                    String name = axisMessage.getName();
+                    if (faultMessageNames.add(name)) {
+                        writeMessage(axisMessage, fac, defintions);
+                        generateHeaderMessages(axisMessage, fac, defintions);
+                    }
+                }
+            }
+        }
+    }
+
+    private void generateHeaderMessages(AxisMessage axismessage, OMFactory fac,
+                                        OMElement defintions) {
+        ArrayList extList = axismessage.getSoapHeaders();
+        for (int i = 0; i < extList.size(); i++) {
+            SOAPHeaderMessage header = (SOAPHeaderMessage) extList.get(i);
+            OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME,
+                                                           wsdl);
+            messageElement.addAttribute(ATTRIBUTE_NAME, header.getMessage()
+                    .getLocalPart(), null);
+            defintions.addChild(messageElement);
+            OMElement messagePart = fac.createOMElement(PART_ATTRIBUTE_NAME,
+                                                        wsdl);
+            messageElement.addChild(messagePart);
+            messagePart.addAttribute(ATTRIBUTE_NAME, header.part(), null);
+            if (header.getElement() == null) {
+                throw new RuntimeException(ELEMENT_ATTRIBUTE_NAME
+                                           + " is null for " + header.getMessage());
+            }
+            messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME, getPrefix(header
+                    .getElement().getNamespaceURI())
+                                                             + ":" + header.getElement().getLocalPart(), null);
+        }
+    }
+
+    private void writeMessage(AxisMessage axismessage, OMFactory fac,
+                              OMElement defintions) {
+        if (messagesMap.get(axismessage.getName()) == null) {
+            messagesMap.put(axismessage.getName(), axismessage);
+            QName schemaElementName = axismessage.getElementQName();
+            OMElement messageElement = fac.createOMElement(MESSAGE_LOCAL_NAME,
+                                                           wsdl);
+            messageElement.addAttribute(ATTRIBUTE_NAME, axismessage.getName(),
+                                        null);
+            defintions.addChild(messageElement);
+            if (schemaElementName != null) {
+                OMElement messagePart = fac.createOMElement(
+                        PART_ATTRIBUTE_NAME, wsdl);
+                messageElement.addChild(messagePart);
+                messagePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
+                messagePart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
+                                         getPrefix(schemaElementName.getNamespaceURI()) + ":"
+                                         + schemaElementName.getLocalPart(), null);
+            }
+        }
+
+    }
+
+    /**
+     * Generate the porttypes
+     */
+    private void generatePortType(OMFactory fac, OMElement defintions)
+            throws Exception {
+        OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl);
+        defintions.addChild(portType);
+
+        portType.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+                                              + PORT_TYPE_SUFFIX, null);
+
+        addPolicyAsExtAttribute(PolicyInclude.PORT_TYPE_POLICY, axisService
+                .getPolicyInclude(), portType, fac);
+        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
+            AxisOperation axisOperation = (AxisOperation) operations.next();
+            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
+                continue;
+            }
+            String operationName = axisOperation.getName().getLocalPart();
+            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+                                                      wsdl);
+            portType.addChild(operation);
+            operation.addAttribute(ATTRIBUTE_NAME, operationName, null);
+            addPolicyAsExtElement(PolicyInclude.OPERATION_POLICY, axisOperation
+                    .getPolicyInclude(), operation, fac);
+
+            String MEP = axisOperation.getMessageExchangePattern();
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage inaxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                if (inaxisMessage != null) {
+                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+                                                          wsdl);
+                    input.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+                                                           + ":" + inaxisMessage.getName(), null);
+                    addPolicyAsExtElement(PolicyInclude.INPUT_POLICY,
+                                          inaxisMessage.getPolicyInclude(), input, fac);
+                    addWSAWActionAttribute(input, axisOperation
+                            .getInputAction());
+                    operation.addChild(input);
+                }
+            }
+
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage outAxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+                if (outAxisMessage != null) {
+                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+                                                           wsdl);
+                    output.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+                                                            + ":" + outAxisMessage.getName(), null);
+                    addPolicyAsExtElement(PolicyInclude.OUTPUT_POLICY,
+                                          outAxisMessage.getPolicyInclude(), output, fac);
+                    addWSAWActionAttribute(output, axisOperation
+                            .getOutputAction());
+                    operation.addChild(output);
+                }
+            }
+
+            // generate fault Messages
+            ArrayList faultyMessages = axisOperation.getFaultMessages();
+            if (faultyMessages != null) {
+                for (int i = 0; i < faultyMessages.size(); i++) {
+                    AxisMessage faultyMessge = (AxisMessage) faultyMessages
+                            .get(i);
+                    OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
+                                                          wsdl);
+                    fault.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+                                                           + ":" + faultyMessge.getName(), null);
+                    fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
+                                       null);
+                    addWSAWActionAttribute(fault, axisOperation
+                            .getFaultAction(faultyMessge.getName()));
+                    // TODO add policies for fault messages
+                    operation.addChild(fault);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * Generate the service
+     */
+    public void generateService(OMFactory fac, OMElement defintions)
+            throws Exception {
+        OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl);
+        defintions.addChild(service);
+        service.addAttribute(ATTRIBUTE_NAME, axisService.getName(), null);
+        generateSOAP11Port(fac, service);
+        generateSOAP12Port(fac, service);
+
+        addPolicyAsExtElement(PolicyInclude.SERVICE_POLICY, axisService
+                .getPolicyInclude(), service, fac);
+
+        if (generateHttp) {
+            generateHTTPPort(fac, service);
+        }
+
+    }
+
+    private void generateSOAP11Port(OMFactory fac, OMElement service)
+            throws Exception {
+        for (int i = 0; i < urls.length; i++) {
+            String urlString = urls[i];
+            String protocol = urlString == null ? null : new URI(urlString)
+                    .getScheme();
+            if (urlString == null) {
+                urlString = "REPLACE_WITH_ACTUAL_URL";
+            }
+            OMElement port = fac.createOMElement(PORT, wsdl);
+            service.addChild(port);
+            String name = axisService.getName() + SOAP11PORT
+                          + ((protocol == null) ? "" : "_" + protocol);
+            if (i > 0) {
+                name += i;
+            }
+            port.addAttribute(ATTRIBUTE_NAME, name, null);
+            port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
+                                                  + axisService.getName() + BINDING_NAME_SUFFIX, null);
+            addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
+                                soap);
+
+            addPolicyAsExtElement(PolicyInclude.PORT_POLICY, axisService
+                    .getPolicyInclude(), port, fac);
+        }
+
+    }
+
+    private void generateHTTPPort(OMFactory fac, OMElement service)
+            throws Exception {
+        for (int i = 0; i < urls.length; i++) {
+            String urlString = urls[i];
+            if (urlString != null && urlString.startsWith("http")) {
+                OMElement port = fac.createOMElement(PORT, wsdl);
+                service.addChild(port);
+                String name = axisService.getName() + HTTP_PORT;
+                if (i > 0) {
+                    name += i;
+                }
+                port.addAttribute(ATTRIBUTE_NAME, name, null);
+                port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
+                                                      + axisService.getName() + HTTP_BINDING, null);
+                OMElement extElement = fac.createOMElement("address", http);
+                port.addChild(extElement);
+                urlString = urlString.replaceAll(servicePath, "rest");
+                extElement.addAttribute("location", urlString, null);
+            }
+        }
+    }
+
+    private void generateSOAP12Port(OMFactory fac, OMElement service)
+            throws Exception {
+        for (int i = 0; i < urls.length; i++) {
+            String urlString = urls[i];
+            String protocol = urlString == null ? null : new URI(urlString)
+                    .getScheme();
+            if (urlString == null) {
+                urlString = "REPLACE_WITH_ACTUAL_URL";
+            }
+            OMElement port = fac.createOMElement(PORT, wsdl);
+            service.addChild(port);
+            String name = axisService.getName() + SOAP12PORT
+                          + ((protocol == null) ? "" : "_" + protocol);
+            if (i > 0) {
+                name += i;
+            }
+            port.addAttribute(ATTRIBUTE_NAME, name, null);
+            port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + ":"
+                                                  + axisService.getName() + SOAP12BINDING_NAME_SUFFIX, null);
+            addExtensionElement(fac, port, SOAP_ADDRESS, LOCATION, urlString,
+                                soap12);
+
+            addPolicyAsExtElement(PolicyInclude.PORT_POLICY, axisService
+                    .getPolicyInclude(), port, fac);
+        }
+    }
+
+    /**
+     * Generate the bindings
+     */
+    private void generateSOAP11Binding(OMFactory fac, OMElement defintions)
+            throws Exception {
+        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+        defintions.addChild(binding);
+        binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+                                             + BINDING_NAME_SUFFIX, null);
+        binding.addAttribute("type", tns.getPrefix() + ":"
+                                     + axisService.getName() + PORT_TYPE_SUFFIX, null);
+
+        addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService
+                .getPolicyInclude(), binding, fac);
+        addPolicyAsExtElement(PolicyInclude.BINDING_POLICY, axisService
+                .getPolicyInclude(), binding, fac);
+
+        // Adding ext elements
+        addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
+                            TRANSPORT_URI, STYLE, style, soap);
+
+        // Add WS-Addressing UsingAddressing element if appropriate
+        // SHOULD be on the binding element per the specification
+        if (axisService.getWSAddressingFlag().equals(
+                AddressingConstants.ADDRESSING_OPTIONAL)) {
+            OMNamespace wsawNamespace = fac.createOMNamespace(
+                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
+            addExtensionElement(fac, binding,
+                                AddressingConstants.USING_ADDRESSING,
+                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
+                                wsawNamespace);
+        } else if (axisService.getWSAddressingFlag().equals(
+                AddressingConstants.ADDRESSING_REQUIRED)) {
+            OMNamespace wsawNamespace = fac.createOMNamespace(
+                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
+            addExtensionElement(fac, binding,
+                                AddressingConstants.USING_ADDRESSING,
+                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
+                                wsawNamespace);
+        }
+
+        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
+            AxisOperation axisOperation = (AxisOperation) operations.next();
+            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
+                continue;
+            }
+            String operationName = axisOperation.getName().getLocalPart();
+            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+                                                      wsdl);
+            binding.addChild(operation);
+            String soapAction = axisOperation.getInputAction();
+            if (soapAction == null) {
+                soapAction = "";
+            }
+            addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
+                                SOAP_ACTION, soapAction, STYLE, style, soap);
+
+            addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY,
+                                  axisOperation.getPolicyInclude(), operation, fac);
+            addPolicyAsExtElement(PolicyInclude.AXIS_OPERATION_POLICY,
+                                  axisOperation.getPolicyInclude(), operation, fac);
+
+            String MEP = axisOperation.getMessageExchangePattern();
+
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage inaxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                if (inaxisMessage != null) {
+                    operation.addAttribute(ATTRIBUTE_NAME, operationName, null);
+                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+                                                          wsdl);
+                    addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
+                                        null, targetNamespace, soap);
+                    addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY,
+                                          inaxisMessage.getPolicyInclude(), input, fac);
+                    operation.addChild(input);
+                    writeSoapHeaders(inaxisMessage, fac, input, soap);
+                }
+            }
+
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage outAxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+                if (outAxisMessage != null) {
+                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+                                                           wsdl);
+                    addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
+                                        null, targetNamespace, soap);
+                    addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY,
+                                          outAxisMessage.getPolicyInclude(), output, fac);
+                    operation.addChild(output);
+                    writeSoapHeaders(outAxisMessage, fac, output, soap);
+                }
+            }
+
+            // generate fault Messages
+            ArrayList faultyMessages = axisOperation.getFaultMessages();
+            if (faultyMessages != null) {
+                for (int i = 0; i < faultyMessages.size(); i++) {
+                    AxisMessage faultyMessge = (AxisMessage) faultyMessages
+                            .get(i);
+                    OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
+                                                          wsdl);
+                    addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
+                                        null, targetNamespace, soap);
+                    fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
+                                       null);
+                    // TODO adding policies for fault messages
+                    operation.addChild(fault);
+                    writeSoapHeaders(faultyMessge, fac, fault, soap);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * Generate the bindings
+     */
+    private void generateSOAP12Binding(OMFactory fac, OMElement defintions)
+            throws Exception {
+        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+        defintions.addChild(binding);
+        binding.addAttribute(ATTRIBUTE_NAME, axisService.getName()
+                                             + SOAP12BINDING_NAME_SUFFIX, null);
+        binding.addAttribute("type", tns.getPrefix() + ":"
+                                     + axisService.getName() + PORT_TYPE_SUFFIX, null);
+
+        addPolicyAsExtElement(PolicyInclude.AXIS_SERVICE_POLICY, axisService
+                .getPolicyInclude(), binding, fac);
+        addPolicyAsExtElement(PolicyInclude.BINDING_POLICY, axisService
+                .getPolicyInclude(), binding, fac);
+
+        // Adding ext elements
+        addExtensionElemnet(fac, binding, BINDING_LOCAL_NAME, TRANSPORT,
+                            TRANSPORT_URI, STYLE, style, soap12);
+
+        // Add WS-Addressing UsingAddressing element if appropriate
+        // SHOULD be on the binding element per the specification
+        if (axisService.getWSAddressingFlag().equals(
+                AddressingConstants.ADDRESSING_OPTIONAL)) {
+            OMNamespace wsawNamespace = fac.createOMNamespace(
+                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
+            addExtensionElement(fac, binding,
+                                AddressingConstants.USING_ADDRESSING,
+                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
+                                wsawNamespace);
+        } else if (axisService.getWSAddressingFlag().equals(
+                AddressingConstants.ADDRESSING_REQUIRED)) {
+            OMNamespace wsawNamespace = fac.createOMNamespace(
+                    AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
+            addExtensionElement(fac, binding,
+                                AddressingConstants.USING_ADDRESSING,
+                                DEFAULT_WSDL_NAMESPACE_PREFIX + ":required", "true",
+                                wsawNamespace);
+        }
+
+        for (Iterator operations = axisService.getOperations(); operations.hasNext();) {
+            AxisOperation axisOperation = (AxisOperation) operations.next();
+            if (axisOperation.isControlOperation() || axisOperation.getName() == null) {
+                continue;
+            }
+            String opeartionName = axisOperation.getName().getLocalPart();
+            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+                                                      wsdl);
+            binding.addChild(operation);
+            String soapAction = axisOperation.getInputAction();
+            if (soapAction == null) {
+                soapAction = "";
+            }
+            addExtensionElemnet(fac, operation, OPERATION_LOCAL_NAME,
+                                SOAP_ACTION, soapAction, STYLE, style, soap12);
+
+            addPolicyAsExtElement(PolicyInclude.BINDING_OPERATION_POLICY,
+                                  axisOperation.getPolicyInclude(), operation, fac);
+            addPolicyAsExtElement(PolicyInclude.AXIS_OPERATION_POLICY,
+                                  axisOperation.getPolicyInclude(), operation, fac);
+
+            String MEP = axisOperation.getMessageExchangePattern();
+
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_IN_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage inaxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                if (inaxisMessage != null) {
+                    operation.addAttribute(ATTRIBUTE_NAME, opeartionName, null);
+                    OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME,
+                                                          wsdl);
+                    addExtensionElemnet(fac, input, SOAP_BODY, SOAP_USE, use,
+                                        null, targetNamespace, soap12);
+                    addPolicyAsExtElement(PolicyInclude.BINDING_INPUT_POLICY,
+                                          inaxisMessage.getPolicyInclude(), input, fac);
+                    operation.addChild(input);
+                    writeSoapHeaders(inaxisMessage, fac, input, soap12);
+                }
+            }
+
+            if (WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_ONLY.equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_OUT_OPTIONAL_IN
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OPTIONAL_OUT
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_ROBUST_OUT_ONLY
+                    .equals(MEP)
+                || WSDLConstants.WSDL20_2004Constants.MEP_URI_IN_OUT
+                    .equals(MEP)) {
+                AxisMessage outAxisMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+                if (outAxisMessage != null) {
+                    OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME,
+                                                           wsdl);
+                    addExtensionElemnet(fac, output, SOAP_BODY, SOAP_USE, use,
+                                        null, targetNamespace, soap12);
+                    addPolicyAsExtElement(PolicyInclude.BINDING_OUTPUT_POLICY,
+                                          outAxisMessage.getPolicyInclude(), output, fac);
+                    operation.addChild(output);
+                    writeSoapHeaders(outAxisMessage, fac, output, soap12);
+                }
+            }
+
+            // generate fault Messages
+            ArrayList faultyMessages = axisOperation.getFaultMessages();
+            if (faultyMessages != null) {
+                for (int i = 0; i < faultyMessages.size(); i++) {
+                    AxisMessage faultyMessge = (AxisMessage) faultyMessages
+                            .get(i);
+                    OMElement fault = fac.createOMElement(FAULT_LOCAL_NAME,
+                                                          wsdl);
+                    addExtensionElemnet(fac, fault, SOAP_BODY, SOAP_USE, use,
+                                        null, targetNamespace, soap12);
+                    fault.addAttribute(ATTRIBUTE_NAME, faultyMessge.getName(),
+                                       null);
+                    // add policies for fault messages
+                    operation.addChild(fault);
+                    writeSoapHeaders(faultyMessge, fac, fault, soap12);
+                }
+            }
+        }
+    }
+

[... 282 lines stripped ...]


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