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)));
+
+ }
+ }
+ }
+
+}