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 sa...@apache.org on 2006/02/12 16:04:08 UTC

svn commit: r377188 - /webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2WOM.java

Author: sanka
Date: Sun Feb 12 07:04:08 2006
New Revision: 377188

URL: http://svn.apache.org/viewcvs?rev=377188&view=rev
Log:
Modified: AxisService2WOM class such that it preserves any policy information (which is already in the AxisService) in the WOM it generates.

Modified:
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2WOM.java

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2WOM.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2WOM.java?rev=377188&r1=377187&r2=377188&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2WOM.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService2WOM.java Sun Feb 12 07:04:08 2006
@@ -3,6 +3,9 @@
 import org.apache.axis2.wsdl.builder.SchemaGenerator;
 import org.apache.axis2.wsdl.builder.WSDLComponentFactory;
 import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.policy.PolicyConstants;
+import org.apache.ws.policy.PolicyReference;
+import org.apache.wsdl.Component;
 import org.apache.wsdl.MessageReference;
 import org.apache.wsdl.WSDLBinding;
 import org.apache.wsdl.WSDLBindingMessageReference;
@@ -10,16 +13,19 @@
 import org.apache.wsdl.WSDLConstants;
 import org.apache.wsdl.WSDLDescription;
 import org.apache.wsdl.WSDLEndpoint;
+import org.apache.wsdl.WSDLExtensibilityAttribute;
 import org.apache.wsdl.WSDLInterface;
 import org.apache.wsdl.WSDLOperation;
 import org.apache.wsdl.WSDLService;
 import org.apache.wsdl.WSDLTypes;
 import org.apache.wsdl.extensions.ExtensionConstants;
 import org.apache.wsdl.extensions.ExtensionFactory;
+import org.apache.wsdl.extensions.PolicyExtensibilityElement;
 import org.apache.wsdl.extensions.SOAPBinding;
 import org.apache.wsdl.extensions.SOAPBody;
 import org.apache.wsdl.extensions.SOAPOperation;
 import org.apache.wsdl.extensions.Schema;
+import org.apache.wsdl.extensions.impl.ExtensionFactoryImpl;
 import org.apache.wsdl.extensions.impl.SOAPAddressImpl;
 import org.apache.wsdl.impl.WSDLDescriptionImpl;
 import org.w3c.dom.Document;
@@ -30,228 +36,436 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.ByteArrayInputStream;
 import java.io.StringWriter;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
+
 /*
-* 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.
-*
-*/
+ * 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 AxisService2WOM {
 
-    private XmlSchema schema;
-    private AxisService axisService;
-    private String url;
-    private String targetNamespece;
-    private String targetNamespecheprefix;
-
-
-    public AxisService2WOM(XmlSchema schema, AxisService service,
-                           String targetNamespece,
-                           String targetNamespecheprefix, String serviceURL) {
-        this.schema = schema;
-        this.axisService = service;
-        url = serviceURL;
-
-        if (targetNamespece != null && !targetNamespece.trim().equals("")) {
-            this.targetNamespece = targetNamespece;
-        } else {
-            this.targetNamespece = SchemaGenerator.TARGET_NAMESPACE;
-        }
-        if (targetNamespecheprefix != null && !targetNamespecheprefix.trim().equals("")) {
-            this.targetNamespecheprefix = targetNamespecheprefix;
-        } else {
-            this.targetNamespecheprefix = SchemaGenerator.TARGET_NAMESPACE_PREFIX;
-        }
-
-    }
-
-    public WSDLDescription generateWOM() throws Exception {
-        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-        DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
-        StringWriter writer = new StringWriter();
-        if(schema == null){
-            throw new Exception("no scheam found for the service");
-        }
-        schema.write(writer);
-        writer.flush();
-        Document doc = domBuilder.parse(new ByteArrayInputStream(writer.toString().getBytes()));
-        Element documentElement = doc.getDocumentElement();
-        WSDLDescription womDescription;
-        WSDLComponentFactory wsdlComponentFactory = new WSDLDescriptionImpl();
-        womDescription = wsdlComponentFactory.createDescription();
-        HashMap namespaceMap = new HashMap();
-        namespaceMap.put("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
-        namespaceMap.put(targetNamespecheprefix, targetNamespece);
-        namespaceMap.put("ns1", "http://org.apache.axis2/xsd");
-        namespaceMap.put("xs", "http://www.w3.org/2001/XMLSchema");
-        womDescription.setNamespaces(namespaceMap);
-        womDescription.setTargetNameSpace(targetNamespece);
-
-        //generating port type
-        WSDLInterface portType = generatePortType(womDescription, wsdlComponentFactory, documentElement);
-        womDescription.addInterface(portType);
-
-        QName bindingName = new QName(targetNamespece, axisService.getName() + "Binding"
-                , targetNamespecheprefix);
-        //generating binding
-        WSDLBinding binding = generateBinding(wsdlComponentFactory,
-                portType,
-                bindingName,
-                "document", "literal", "http://schemas.xmlsoap.org/soap/http",
-                "http://www.org.apache.axis2");
-        womDescription.addBinding(binding);
-
-        //generating axisService
-        WSDLService service = generateService(wsdlComponentFactory, binding,
-                axisService.getName(), url);
-        womDescription.addService(service);
-        return womDescription;
-    }
-
-    private WSDLInterface generatePortType(WSDLDescription womDescription,
-                                           WSDLComponentFactory wsdlComponentFactory,
-                                           Element documentElement) {
-        WSDLTypes wsdlTypes = wsdlComponentFactory.createTypes();
-        ExtensionFactory extensionFactory = wsdlComponentFactory.createExtensionFactory();
-        Schema schemaExtensibilityElement =
-                (Schema) extensionFactory.getExtensionElement(
-                        ExtensionConstants.SCHEMA);
-        wsdlTypes.addExtensibilityElement(schemaExtensibilityElement);
-        schemaExtensibilityElement.setElement(documentElement);
-        womDescription.setTypes(wsdlTypes);
-
-        WSDLInterface portType = womDescription.createInterface();
-        portType.setName(new QName(axisService.getName() + "Port"));
-
-
-        Iterator operations = axisService.getOperations();
-        while (operations.hasNext()) {
-            AxisOperation axisOperation = (AxisOperation) operations.next();
-            if (axisOperation.isControlOperation()) {
-                //we do not need to expose control operation in the WSDL
-                continue;
-            }
-            WSDLOperation wsdlOperation = womDescription.createOperation();
-            wsdlOperation.setName(axisOperation.getName());
-
-            AxisMessage inaxisMessage = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-            if (inaxisMessage != null) {
-                MessageReference messageRefinput = wsdlComponentFactory.createMessageReference();
-                messageRefinput.setElementQName(inaxisMessage.getElementQName());
-                messageRefinput.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
-                wsdlOperation.setInputMessage(messageRefinput);
-            }
-
-            try {
-                AxisMessage outaxisMessage = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-                if (outaxisMessage != null && outaxisMessage.getElementQName() != null) {
-                    MessageReference messageRefout = wsdlComponentFactory.createMessageReference();
-                    messageRefout.setElementQName(outaxisMessage.getElementQName());
-                    messageRefout.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT);
-                    wsdlOperation.setOutputMessage(messageRefout);
-                }
-            } catch (UnsupportedOperationException e) {
-                // operation does not have an out message so , no need to do anything here
-            }
-            portType.setOperation(wsdlOperation);
-
-        }
-        return portType;
-    }
-
-    private WSDLService generateService(WSDLComponentFactory wsdlComponentFactory,
-                                        WSDLBinding binding, String ServiceName, String URL) {
-        WSDLService service = wsdlComponentFactory.createService();
-        service.setName(new QName(ServiceName));
-        WSDLEndpoint endpoints = wsdlComponentFactory.createEndpoint();
-        endpoints.setBinding(binding);
-        endpoints.setName(new QName(ServiceName + "PortType"));
-        SOAPAddressImpl address = new SOAPAddressImpl();
-        address.setLocationURI(URL);
-        endpoints.addExtensibilityElement(address);
-        service.setEndpoint(endpoints);
-        return service;
-    }
-
-
-    private WSDLBinding generateBinding(WSDLComponentFactory wsdlComponentFactory,
-                                        WSDLInterface portType, QName bindingName,
-                                        String style,
-                                        String use,
-                                        String trsportURI,
-                                        String namespeceURI) {
-        WSDLBinding binding = wsdlComponentFactory.createBinding();
-
-        ExtensionFactory extensionFactory = wsdlComponentFactory.createExtensionFactory();
-
-        binding.setBoundInterface(portType);
-        binding.setName(bindingName);
-
-        SOAPBinding soapbindingImpl = (SOAPBinding) extensionFactory.getExtensionElement(
-                ExtensionConstants.SOAP_11_BINDING);
-        soapbindingImpl.setStyle(style);
-        soapbindingImpl.setTransportURI(trsportURI);
-        binding.addExtensibilityElement(soapbindingImpl);
-
-        Iterator op_itr = portType.getOperations().keySet().iterator();
-        while (op_itr.hasNext()) {
-            String opName = (String) op_itr.next();
-            WSDLOperation wsdlOperation = portType.getOperation(opName);
-            MessageReference inMessage = wsdlOperation.getInputMessage();
-
-            WSDLBindingOperation bindingoperation = wsdlComponentFactory.createWSDLBindingOperation();
-            bindingoperation.setName(new QName(opName));
-            bindingoperation.setOperation(wsdlOperation);
-            binding.addBindingOperation(bindingoperation);
-
-            SOAPOperation soapOpimpl = (SOAPOperation) extensionFactory.getExtensionElement(
-                    ExtensionConstants.SOAP_11_OPERATION);
-            soapOpimpl.setStyle(style);
-            //to do heve to set a proper SOAPAction
-            soapOpimpl.setSoapAction(opName);
-            bindingoperation.addExtensibilityElement(soapOpimpl);
-            if (inMessage != null) {
-                WSDLBindingMessageReference bindingInMessage = wsdlComponentFactory.createWSDLBindingMessageReference();
-                bindingInMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
-                bindingoperation.setInput(bindingInMessage);
-
-                SOAPBody requestSoapbody = (SOAPBody) extensionFactory.getExtensionElement(
-                        ExtensionConstants.SOAP_11_BODY);
-                requestSoapbody.setUse(use);
-                //todo need to fix this
-                requestSoapbody.setNamespaceURI(namespeceURI);
-                bindingInMessage.addExtensibilityElement(requestSoapbody);
-            }
-
-            MessageReference outMessage = wsdlOperation.getOutputMessage();
-            if (outMessage != null) {
-                WSDLBindingMessageReference bindingOutMessage = wsdlComponentFactory.createWSDLBindingMessageReference();
-
-                bindingOutMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT);
-                bindingoperation.setOutput(bindingOutMessage);
-                SOAPBody resSoapbody = (SOAPBody) extensionFactory.getExtensionElement(
-                        ExtensionConstants.SOAP_11_BODY);
-                resSoapbody.setUse(use);
-                resSoapbody.setNamespaceURI(namespeceURI);
-                bindingOutMessage.addExtensibilityElement(resSoapbody);
-            }
-        }
-        return binding;
-    }
+	private XmlSchema schema;
 
+	private WSDLDescription womDescription;
 
-}
+	private AxisService axisService;
+
+	private String url;
 
+	private String targetNamespece;
+
+	private String targetNamespecheprefix;
+
+	public AxisService2WOM(XmlSchema schema, AxisService service,
+			String targetNamespece, String targetNamespecheprefix,
+			String serviceURL) {
+		this.schema = schema;
+		this.axisService = service;
+		url = serviceURL;
+
+		if (targetNamespece != null && !targetNamespece.trim().equals("")) {
+			this.targetNamespece = targetNamespece;
+		} else {
+			this.targetNamespece = SchemaGenerator.TARGET_NAMESPACE;
+		}
+		if (targetNamespecheprefix != null
+				&& !targetNamespecheprefix.trim().equals("")) {
+			this.targetNamespecheprefix = targetNamespecheprefix;
+		} else {
+			this.targetNamespecheprefix = SchemaGenerator.TARGET_NAMESPACE_PREFIX;
+		}
+
+	}
+
+	public WSDLDescription generateWOM() throws Exception {
+		DocumentBuilderFactory domFactory = DocumentBuilderFactory
+				.newInstance();
+		DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
+		StringWriter writer = new StringWriter();
+		if (schema == null) {
+			throw new Exception("no scheam found for the service");
+		}
+		schema.write(writer);
+		writer.flush();
+		Document doc = domBuilder.parse(new ByteArrayInputStream(writer
+				.toString().getBytes()));
+		Element documentElement = doc.getDocumentElement();
+		WSDLComponentFactory wsdlComponentFactory = new WSDLDescriptionImpl();
+		womDescription = wsdlComponentFactory.createDescription();
+		HashMap namespaceMap = new HashMap();
+		namespaceMap.put("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
+		namespaceMap.put(targetNamespecheprefix, targetNamespece);
+		namespaceMap.put("ns1", "http://org.apache.axis2/xsd");
+		namespaceMap.put("xs", "http://www.w3.org/2001/XMLSchema");
+		womDescription.setNamespaces(namespaceMap);
+		womDescription.setTargetNameSpace(targetNamespece);
+
+		// generating port type
+		WSDLInterface portType = generatePortType(womDescription,
+				wsdlComponentFactory, documentElement);
+		womDescription.addInterface(portType);
+
+		QName bindingName = new QName(targetNamespece, axisService.getName()
+				+ "Binding", targetNamespecheprefix);
+		// generating binding
+		WSDLBinding binding = generateBinding(wsdlComponentFactory, portType,
+				bindingName, "document", "literal",
+				"http://schemas.xmlsoap.org/soap/http",
+				"http://www.org.apache.axis2");
+		womDescription.addBinding(binding);
+
+		// generating axisService
+		WSDLService service = generateService(wsdlComponentFactory, binding,
+				axisService.getName(), url);
+		womDescription.addService(service);
+		return womDescription;
+	}
+
+	private WSDLInterface generatePortType(WSDLDescription womDescription,
+			WSDLComponentFactory wsdlComponentFactory, Element documentElement) {
+		WSDLTypes wsdlTypes = wsdlComponentFactory.createTypes();
+		ExtensionFactory extensionFactory = wsdlComponentFactory
+				.createExtensionFactory();
+		Schema schemaExtensibilityElement = (Schema) extensionFactory
+				.getExtensionElement(ExtensionConstants.SCHEMA);
+		wsdlTypes.addExtensibilityElement(schemaExtensibilityElement);
+		schemaExtensibilityElement.setElement(documentElement);
+		womDescription.setTypes(wsdlTypes);
+
+		WSDLInterface portType = womDescription.createInterface();
+		portType.setName(new QName(axisService.getName() + "Port"));
+		
+		ArrayList policyElements;
+		PolicyInclude include;
+		
+		include = axisService.getPolicyInclude();
+		
+		// adding policies defined in wsdl:portType
+		policyElements = include.getPolicyElements(PolicyInclude.PORT_TYPE_POLICY);
+		addPolicyAsExtAttributes(womDescription, policyElements, portType, include);
+		
+		Iterator operations = axisService.getOperations();
+		while (operations.hasNext()) {
+			AxisOperation axisOperation = (AxisOperation) operations.next();
+			if (axisOperation.isControlOperation()) {
+				// we do not need to expose control operation in the WSDL
+				continue;
+			}
+			WSDLOperation wsdlOperation = womDescription.createOperation();
+			wsdlOperation.setName(axisOperation.getName());
+			
+			// adding policies defined in wsdl:portType -> wsdl:operation
+			include = axisOperation.getPolicyInclude();
+			
+			policyElements = include.getPolicyElements(PolicyInclude.OPERATION_POLICY);
+			addPolicyAsExtElements(womDescription, policyElements, wsdlOperation, include);
+
+			AxisMessage inaxisMessage = axisOperation
+					.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+			if (inaxisMessage != null) {
+				MessageReference messageRefinput = wsdlComponentFactory
+						.createMessageReference();
+				messageRefinput
+						.setElementQName(inaxisMessage.getElementQName());
+				messageRefinput
+						.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
+				
+				// adding policies defined in wsdl:portType -> wsdl:operation ->
+				// wsdl:input
+				include = inaxisMessage.getPolicyInclude();
+				
+				policyElements = include.getPolicyElements(PolicyInclude.INPUT_POLICY);
+				addPolicyAsExtAttributes(womDescription, policyElements, messageRefinput, include);
+				
+				wsdlOperation.setInputMessage(messageRefinput);
+			}
+
+			try {
+				AxisMessage outaxisMessage = axisOperation
+						.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+				if (outaxisMessage != null
+						&& outaxisMessage.getElementQName() != null) {
+					MessageReference messageRefout = wsdlComponentFactory
+							.createMessageReference();
+					messageRefout.setElementQName(outaxisMessage
+							.getElementQName());
+					messageRefout
+							.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT);
+					
+					// adding policies defined in wsdl:portType -> wsdl:operation
+					// -> wsdl:output
+					include = outaxisMessage.getPolicyInclude();
+					
+					policyElements = include.getPolicyElements(PolicyInclude.AXIS_MESSAGE_POLICY);
+					addPolicyAsExtAttributes(womDescription, policyElements, messageRefout, include);
+					
+					wsdlOperation.setOutputMessage(messageRefout);
+				}
+			} catch (UnsupportedOperationException e) {
+				// operation does not have an out message so , no need to do
+				// anything here
+			}
+			portType.setOperation(wsdlOperation);
+
+		}
+		return portType;
+	}
+
+	private WSDLService generateService(
+			WSDLComponentFactory wsdlComponentFactory, WSDLBinding binding,
+			String ServiceName, String URL) {
+		WSDLService service = wsdlComponentFactory.createService();
+		service.setName(new QName(ServiceName));
+
+		/*
+		 * Adding policies defined in services.xml
+		 */
+
+		ArrayList policyElementList;
+		PolicyInclude include;
+
+		// Policies defined in Axis2.xml
+		AxisDescription axisConfiguration = null;
+
+		AxisDescription serviceGroup = axisService.getParent();
+		if (serviceGroup != null) {
+			axisConfiguration = serviceGroup.getParent();
+		}
+
+		if (axisConfiguration != null) {
+			include = axisConfiguration.getPolicyInclude();
+			policyElementList = include
+					.getPolicyElements(PolicyInclude.AXIS_POLICY);
+			addPolicyAsExtElements(womDescription, policyElementList, service,
+					include);
+		}
+
+		WSDLEndpoint endpoints = wsdlComponentFactory.createEndpoint();
+		endpoints.setBinding(binding);
+		endpoints.setName(new QName(ServiceName + "PortType"));
+		SOAPAddressImpl address = new SOAPAddressImpl();
+		address.setLocationURI(URL);
+		endpoints.addExtensibilityElement(address);
+		service.setEndpoint(endpoints);
+		return service;
+	}
+
+	private WSDLBinding generateBinding(
+			WSDLComponentFactory wsdlComponentFactory, WSDLInterface portType,
+			QName bindingName, String style, String use, String trsportURI,
+			String namespeceURI) {
+		
+		WSDLBinding binding = wsdlComponentFactory.createBinding();
+
+		ExtensionFactory extensionFactory = wsdlComponentFactory
+				.createExtensionFactory();
+
+		binding.setBoundInterface(portType);
+		binding.setName(bindingName);
+
+		PolicyInclude include;
+		ArrayList policyElementsList;
+
+		include = axisService.getPolicyInclude();
+
+		// adding policies defined in services.xml
+		policyElementsList = include
+				.getPolicyElements(PolicyInclude.AXIS_SERVICE_POLICY);
+		addPolicyAsExtElements(womDescription, policyElementsList, binding,
+				include);
+
+		// adding policies defined in wsdl:binding
+		policyElementsList = include
+				.getPolicyElements(PolicyInclude.BINDING_POLICY);
+		addPolicyAsExtElements(womDescription, policyElementsList, binding,
+				include);
+
+		SOAPBinding soapbindingImpl = (SOAPBinding) extensionFactory
+				.getExtensionElement(ExtensionConstants.SOAP_11_BINDING);
+		soapbindingImpl.setStyle(style);
+		soapbindingImpl.setTransportURI(trsportURI);
+		binding.addExtensibilityElement(soapbindingImpl);
+
+		Iterator op_itr = portType.getOperations().keySet().iterator();
+		while (op_itr.hasNext()) {
+			String opName = (String) op_itr.next();
+			WSDLOperation wsdlOperation = portType.getOperation(opName);
+			MessageReference inMessage = wsdlOperation.getInputMessage();
+
+			WSDLBindingOperation bindingoperation = wsdlComponentFactory
+					.createWSDLBindingOperation();
+			bindingoperation.setName(new QName(opName));
+			bindingoperation.setOperation(wsdlOperation);
+
+			AxisOperation axisOperation = axisService.getOperation(new QName(
+					opName));
+			include = axisOperation.getPolicyInclude();
+
+			// adding policies defined in operation element in services.xml
+			policyElementsList = include
+					.getPolicyElements(PolicyInclude.AXIS_OPERATION_POLICY);
+			addPolicyAsExtElements(womDescription, policyElementsList,
+					bindingoperation, include);
+
+			// adding policies defined in wsdl:binding -> wsdl:operation
+			policyElementsList = include
+					.getPolicyElements(PolicyInclude.BINDING_OPERATION_POLICY);
+			addPolicyAsExtElements(womDescription, policyElementsList,
+					bindingoperation, include);
+
+			binding.addBindingOperation(bindingoperation);
+
+			SOAPOperation soapOpimpl = (SOAPOperation) extensionFactory
+					.getExtensionElement(ExtensionConstants.SOAP_11_OPERATION);
+			soapOpimpl.setStyle(style);
+			// to do heve to set a proper SOAPAction
+			soapOpimpl.setSoapAction(opName);
+			bindingoperation.addExtensibilityElement(soapOpimpl);
+
+			if (inMessage != null) {
+				WSDLBindingMessageReference bindingInMessage = wsdlComponentFactory
+						.createWSDLBindingMessageReference();
+				bindingInMessage
+						.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
+				bindingoperation.setInput(bindingInMessage);
+
+				SOAPBody requestSoapbody = (SOAPBody) extensionFactory
+						.getExtensionElement(ExtensionConstants.SOAP_11_BODY);
+				requestSoapbody.setUse(use);
+				// TODO need to fix this
+				requestSoapbody.setNamespaceURI(namespeceURI);
+				bindingInMessage.addExtensibilityElement(requestSoapbody);
+
+				AxisMessage axisInMessage = axisOperation
+						.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+				include = axisInMessage.getPolicyInclude();
+
+				// adding policies defined in message element in services.xml
+				policyElementsList = include
+						.getPolicyElements(PolicyInclude.AXIS_MESSAGE_POLICY);
+				addPolicyAsExtElements(womDescription, policyElementsList,
+						inMessage, include);
+
+				// adding policies defined in wsdl:binding -> wsdl:operation ->
+				// wsdl:input
+				policyElementsList = include
+						.getPolicyElements(PolicyInclude.BINDING_INPUT_POLICY);
+				addPolicyAsExtElements(womDescription, policyElementsList,
+						inMessage, include);
+
+			}
+
+			MessageReference outMessage = wsdlOperation.getOutputMessage();
+			if (outMessage != null) {
+				WSDLBindingMessageReference bindingOutMessage = wsdlComponentFactory
+						.createWSDLBindingMessageReference();
+
+				bindingOutMessage
+						.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT);
+				bindingoperation.setOutput(bindingOutMessage);
+				SOAPBody resSoapbody = (SOAPBody) extensionFactory
+						.getExtensionElement(ExtensionConstants.SOAP_11_BODY);
+				resSoapbody.setUse(use);
+				resSoapbody.setNamespaceURI(namespeceURI);
+				bindingOutMessage.addExtensibilityElement(resSoapbody);
+
+				// adding policies
+				AxisMessage axisOutMessage = axisOperation
+						.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+				include = axisOutMessage.getPolicyInclude();
+
+				// adding policies defined in message element in services.xml
+				policyElementsList = include
+						.getPolicyElements(PolicyInclude.AXIS_MESSAGE_POLICY);
+				addPolicyAsExtElements(womDescription, policyElementsList,
+						outMessage, include);
+
+				// adding policies defined in wsdl:binding -> wsdl:operation ->
+				// wsdl:output
+				policyElementsList = include
+						.getPolicyElements(PolicyInclude.BINDING_OUTPUT_POLICY);
+				addPolicyAsExtElements(womDescription, policyElementsList,
+						outMessage, include);
+			}
+		}
+		return binding;
+	}
+
+	private PolicyExtensibilityElement getExtensibilityElement(
+			Object policyElement) {
+		PolicyExtensibilityElement element = (PolicyExtensibilityElement) (new ExtensionFactoryImpl())
+				.getExtensionElement(ExtensionConstants.POLICY);
+		element.setPolicyElement(policyElement);
+		return element;
+	}
+
+	private WSDLExtensibilityAttribute getExtensibilitiyAttribute(
+			PolicyReference policyReference) {
+		WSDLExtensibilityAttribute extensibilityAttribute = new AxisDescWSDLComponentFactory()
+				.createWSDLExtensibilityAttribute();
+		extensibilityAttribute.setKey(new QName(
+				PolicyConstants.WSU_NAMESPACE_URI, "PolicyURIs"));
+		extensibilityAttribute.setValue(new QName(policyReference
+				.getPolicyURIString()));
+		return extensibilityAttribute;
+	}
+
+	private void addPolicyAsExtElements(WSDLDescription description,
+			List policyList, Component component, PolicyInclude policyInclude) {
+		Iterator policyElementIterator = policyList.iterator();
+		Object policyElement;
+
+		while (policyElementIterator.hasNext()) {
+			policyElement = policyElementIterator.next();
+
+			if (policyElement instanceof PolicyReference) {
+				String policyURIString = ((PolicyReference) policyElement)
+						.getPolicyURIString();
+				description
+						.addExtensibilityElement(getExtensibilityElement(policyInclude
+								.getPolicy(policyURIString)));
+			}
+
+			component
+					.addExtensibilityElement(getExtensibilityElement(policyElement));
+		}
+	}
+
+	private void addPolicyAsExtAttributes(WSDLDescription description,
+			List policyList, Component component, PolicyInclude policyInclude) {
+		Iterator policyElementIterator = policyList.iterator();
+		Object policyElement;
+
+		while (policyElementIterator.hasNext()) {
+			policyElement = policyElementIterator.next();
+
+			if (policyElement instanceof PolicyReference) {
+				String policyURIString = ((PolicyReference) policyElement)
+						.getPolicyURIString();
+				component
+						.addExtensibleAttributes(getExtensibilitiyAttribute((PolicyReference) policyElement));
+				description
+						.addExtensibilityElement(getExtensibilityElement(policyInclude
+								.getPolicy(policyURIString)));
+
+			}
+		}
+	}
+
+}