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

svn commit: r374351 - in /webservices/axis2/trunk/java/modules: core/src/org/apache/axis2/deployment/ core/src/org/apache/axis2/description/ integration/test/org/apache/axis2/engine/

Author: deepal
Date: Thu Feb  2 03:16:16 2006
New Revision: 374351

URL: http://svn.apache.org/viewcvs?rev=374351&view=rev
Log:
- added a way to get SchemaElement from AxisMessage

Modified:
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/AxisServiceBuilder.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisMessage.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService.java
    webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/ServiceCreateTest.java

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/AxisServiceBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/AxisServiceBuilder.java?rev=374351&r1=374350&r2=374351&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/AxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/deployment/AxisServiceBuilder.java Thu Feb  2 03:16:16 2006
@@ -17,40 +17,24 @@
 package org.apache.axis2.deployment;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.description.AxisMessage;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.AxisOperationFactory;
-import org.apache.axis2.description.AxisService;
-import org.apache.axis2.description.PolicyInclude;
+import org.apache.axis2.deployment.util.Utils;
+import org.apache.axis2.description.*;
 import org.apache.axis2.util.XMLUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.apache.ws.policy.Policy;
 import org.apache.ws.policy.PolicyConstants;
 import org.apache.ws.policy.PolicyReference;
 import org.apache.ws.policy.util.DOMPolicyReader;
 import org.apache.ws.policy.util.PolicyFactory;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.apache.wsdl.WSDLConstants;
 import org.apache.wsdl.impl.WSDLProcessingException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.wsdl.Binding;
-import javax.wsdl.BindingInput;
-import javax.wsdl.BindingOperation;
-import javax.wsdl.BindingOutput;
-import javax.wsdl.Definition;
-import javax.wsdl.Input;
-import javax.wsdl.Message;
-import javax.wsdl.Operation;
-import javax.wsdl.Output;
-import javax.wsdl.Part;
-import javax.wsdl.Port;
-import javax.wsdl.PortType;
-import javax.wsdl.Service;
-import javax.wsdl.Types;
+import javax.wsdl.*;
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.extensions.UnknownExtensibilityElement;
 import javax.wsdl.extensions.schema.Schema;
@@ -62,11 +46,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * AxisServiceBuilder builds an AxisService using a WSDL document which is input
@@ -75,880 +55,881 @@
  */
 public class AxisServiceBuilder {
 
-	private static final String XMLSCHEMA_NAMESPACE_URI = "http://www.w3.org/2001/XMLSchema";
+    private static final String XMLSCHEMA_NAMESPACE_URI = "http://www.w3.org/2001/XMLSchema";
 
-	private static final String XMLSCHEMA_NAMESPACE_PREFIX = "xs";
+    private static final String XMLSCHEMA_NAMESPACE_PREFIX = "xs";
 
-	private static final String XML_SCHEMA_LOCAL_NAME = "schema";
+    private static final String XML_SCHEMA_LOCAL_NAME = "schema";
 
-	private static final String XML_SCHEMA_SEQUENCE_LOCAL_NAME = "sequence";
+    private static final String XML_SCHEMA_SEQUENCE_LOCAL_NAME = "sequence";
 
-	private static final String XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME = "complexType";
-
-	private static final String XML_SCHEMA_ELEMENT_LOCAL_NAME = "element";
-
-	private static final String XML_SCHEMA_IMPORT_LOCAL_NAME = "import";
-
-	private static final String XSD_NAME = "name";
-
-	private static final String XSD_ELEMENT_FORM_DEFAULT = "elementFormDefault";
-
-	private static final String XSD_UNQUALIFIED = "unqualified";
-
-	private static final String XSD_TARGETNAMESPACE = "targetNamespace";
-
-	private static final String XSD_TYPE = "type";
-
-	private static final String XSD_REF = "ref";
-
-	private static final String AXIS2WRAPPED = "axis2wrapped";
-
-	private static final String XMLNS_AXIS2WRAPPED = "xmlns:axis2wrapped";
-
-	private static final String WSA_NS_URI = "http://schemas.xmlsoap.org/ws/2004/08/addressing";
-
-	private static final String WSA_ACTION = "Action";
-
-	private Log logger = LogFactory.getLog(this.getClass().getName());
-
-	private int nsCount = 1;
-
-	public AxisService getAxisService(InputStream wsdlInputStream)
-			throws DeploymentException {
-		logger
-				.debug("Entering AxisServiceBuilder:getAxisService(java.io.InputStream)");
-
-		try {
-			Document doc = XMLUtils.newDocument(wsdlInputStream);
-			WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
-			reader.setFeature("javax.wsdl.importDocuments", true);
-
-			Definition wsdlDefinition = reader.readWSDL(null, doc);
-			return getAxisService(wsdlDefinition);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			logger
-					.error(
-							"Exception occured when creating the Document from WSDL",
-							e);
-			throw new DeploymentException(e);
-		}
-	}
-
-	public AxisService getAxisService(Definition wsdlDefinition)
-			throws DeploymentException {
-		logger.debug("Entering AxisServiceBuilder:getAxisService(javax.wsdl.Definition)");
-
-		AxisService axisService = new AxisService();
-		axisService.setWSDLDefinition(wsdlDefinition);
-		Map services = wsdlDefinition.getServices();
-
-		if (services.isEmpty()) {
-			logger.error("No javax.wsdl.Service element found");
-			throw new DeploymentException(
-					"No javax.wsdl.Service element is found");
-		}
-
-		Iterator serviceIterator = services.values().iterator();
-		Service wsdl4jService = (Service) serviceIterator.next();
-
-		// setting the name
-		axisService.setName(wsdl4jService.getQName().getLocalPart());
-
-		// ///////////////// adding Policies ////////////////////////////
-
-		PolicyInclude policyInclude = axisService.getPolicyInclude();
-
-		List wsdlPolicies = getPoliciesAsExtElements(wsdlDefinition
-				.getExtensibilityElements());
-		Iterator wsdlPolicyIterator = wsdlPolicies.iterator();
-
-		while (wsdlPolicyIterator.hasNext()) {
-			Policy wsdlPolicy = (Policy) wsdlPolicyIterator.next();
-
-			if (wsdlPolicy.getPolicyURI() != null) {
-				policyInclude.registerPolicy(wsdlPolicy);
-			}
-		}
-
-		// /////////////////////////////////////////////////////////////////
-
-		// setting the schema
-		Types types = wsdlDefinition.getTypes();
-
-		if (types != null) {
-			Iterator extElements = types.getExtensibilityElements().iterator();
-			ExtensibilityElement extElement;
-
-			while (extElements.hasNext()) {
-				extElement = (ExtensibilityElement) extElements.next();
-
-				if (extElement instanceof Schema) {
-					Element schemaElement = ((Schema) extElement).getElement();
-					axisService.setSchema(getXMLSchema(schemaElement));
-				}
-			}
-		}
-
-		HashMap resolvedRPCWrapperElements = new HashMap();
-		XmlSchema xmlSchemaForWrappedElements = generateWrapperSchema(
-				wsdlDefinition, resolvedRPCWrapperElements);
-
-		if (xmlSchemaForWrappedElements != null) {
-			axisService.setSchema(xmlSchemaForWrappedElements);
-		}
-
-		// getting the port of the service with SOAP binding
-		Map ports = wsdl4jService.getPorts();
-
-		if (ports.isEmpty()) {
-			logger.error("atleast one port should be specified");
-			throw new WSDLProcessingException(
-					"atleast one Port should be specified");
-		}
-
-		Port wsdl4jPort = getPortWithSoapBinding(ports);
-
-		if (wsdl4jPort == null) {
-			logger
-					.error("atleast one port with a soap binding should be specified");
-			throw new WSDLProcessingException("no port with soap binding found");
-		}
-
-		Binding wsdl4jBinding = wsdl4jPort.getBinding();
-		PortType wsdl4jPortType = wsdl4jBinding.getPortType();
-
-		// ///////////// Adding policies //////////////////////////////////
-
-		List axisServicePolicies;
-
-		// wsdl:Service
-		axisServicePolicies = getPoliciesAsExtElements(wsdl4jService
-				.getExtensibilityElements());
-		addPolicyElements(PolicyInclude.SERVICE_POLICY, axisServicePolicies,
-				policyInclude);
-
-		// wsdl:Port
-		axisServicePolicies = getPoliciesAsExtElements(wsdl4jPort
-				.getExtensibilityElements());
-		addPolicyElements(PolicyInclude.PORT_POLICY, axisServicePolicies,
-				policyInclude);
-
-		// wsdl:PortType
-		axisServicePolicies = getPoliciesAsExtAttributes(wsdl4jPortType
-				.getExtensionAttributes());
-		addPolicyElements(PolicyInclude.PORT_TYPE_POLICY, axisServicePolicies,
-				policyInclude);
-
-		// wsdl:Binding
-		axisServicePolicies = getPoliciesAsExtElements(wsdl4jBinding
-				.getExtensibilityElements());
-		addPolicyElements(PolicyInclude.BINDING_POLICY, axisServicePolicies,
-				policyInclude);
-
-		// ////////////////////////////////////////////////////////////////
-
-		Iterator wsdl4jOperations = wsdl4jPortType.getOperations().iterator();
-
-		while (wsdl4jOperations.hasNext()) {
-			Operation wsdl4jOperation = (Operation) wsdl4jOperations.next();
-			BindingOperation wsdl4jBindingOperation = wsdl4jBinding
-					.getBindingOperation(wsdl4jOperation.getName(), null, null);
-
-			AxisOperation axisOperation;
-
-			try {
-				axisOperation = AxisOperationFactory
-						.getAxisOperation(getMessageExchangePattern(wsdl4jOperation));
-
-				// setting parent
-				axisOperation.setParent(axisService);
-				// setting operation name
-				axisOperation.setName(new QName(wsdl4jOperation.getName()));
-
-				// //////////////adding Policy //////////////////////////////
-
-				PolicyInclude operationPolicyInclude = axisOperation
-						.getPolicyInclude();
-
-				List operationPolicies;
-
-				// wsdl:PortType -> wsdl:Operation
-				operationPolicies = getPoliciesAsExtElements(wsdl4jOperation
-						.getExtensibilityElements());
-				addPolicyElements(PolicyInclude.OPERATION_POLICY,
-						operationPolicies, operationPolicyInclude);
-
-				// wsdl:Binding -> wsdl:Operation
-				operationPolicies = getPoliciesAsExtElements(wsdl4jBindingOperation
-						.getExtensibilityElements());
-				addPolicyElements(PolicyInclude.BINDING_OPERATION_POLICY,
-						operationPolicies, operationPolicyInclude);
-
-				// /////////////////////////////////////////////////////////////
-
-				String soapActionURI = getSOAPActionURI(wsdl4jBindingOperation
-						.getExtensibilityElements());
-
-				if (soapActionURI != null) {
-					axisService.mapActionToOperation(soapActionURI,
-							axisOperation);
-				}
-
-				// Input
-				Input wsdl4jInput = wsdl4jOperation.getInput();
-				BindingInput wsdl4jBindingInput = wsdl4jBindingOperation
-						.getBindingInput();
-				Message wsdl4jInputMessage = wsdl4jInput.getMessage();
-
-				AxisMessage axisInputMessage = axisOperation
-						.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-
-				// ////////////////// adding Policies /////////////////////////
-
-				PolicyInclude inputPolicyInclue = axisInputMessage
-						.getPolicyInclude();
-
-				List inputMessagePolicies;
-
-				// wsdl:PortType -> wsdl:Operation -> wsdl:Input
-				inputMessagePolicies = getPoliciesAsExtAttributes(wsdl4jInput
-						.getExtensionAttributes());
-				addPolicyElements(PolicyInclude.INPUT_POLICY,
-						inputMessagePolicies, inputPolicyInclue);
-
-				// wsdl:Binding -> wsdl:Operation -> wsdl:Input
-				inputMessagePolicies = getPoliciesAsExtElements(wsdl4jBindingInput
-						.getExtensibilityElements());
-				addPolicyElements(PolicyInclude.BINDING_INPUT_POLICY,
-						inputMessagePolicies, inputPolicyInclue);
-
-				// wsdl:Message
-				inputMessagePolicies = getPoliciesAsExtElements(wsdl4jInputMessage
-						.getExtensibilityElements());
-				addPolicyElements(PolicyInclude.MESSAGE_POLICY,
-						inputMessagePolicies, inputPolicyInclue);
-
-				// /////////////////////////////////////////////////////////////
-
-				// setting the element qname
-				axisInputMessage.setElementQName(generateReferenceQname(
-						new QName(wsdl4jPortType.getQName().getNamespaceURI(),
-								wsdl4jOperation.getName()), wsdl4jInputMessage,
-						findWrapppable(wsdl4jInputMessage),
-						resolvedRPCWrapperElements));
-
-				// setting wsa:Action
-				String wsaActionForInput = getWsaAction(wsdl4jInput
-						.getExtensionAttributes());
-
-				if (wsaActionForInput != null
-						&& wsaActionForInput.length() != 0) {
-					axisService.mapActionToOperation(wsaActionForInput,
-							axisOperation);
-				}
-
-				Output wsdl4jOutput = wsdl4jOperation.getOutput();
-				BindingOutput wsdl4jBindingOutput = wsdl4jBindingOperation
-						.getBindingOutput();
-
-				if (wsdl4jOutput != null) {
-
-					AxisMessage axisOutputMessage = axisOperation
-							.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
-
-					Message wsdl4jOutputMessage = wsdl4jOutput.getMessage();
-
-					// ///////////// adding Policies ///////////////////////////
-
-					PolicyInclude outputPolicyInclude = axisOutputMessage
-							.getPolicyInclude();
-
-					List outputPolicies;
-
-					// wsdl:Output
-					outputPolicies = getPoliciesAsExtAttributes(wsdl4jOutput
-							.getExtensionAttributes());
-					addPolicyElements(PolicyInclude.OUTPUT_POLICY,
-							outputPolicies, outputPolicyInclude);
-
-					// BindingOutput
-					outputPolicies = getPoliciesAsExtElements(wsdl4jBindingOutput
-							.getExtensibilityElements());
-					addPolicyElements(PolicyInclude.BINDING_OUTPUT_POLICY,
-							outputPolicies, outputPolicyInclude);
-
-					// wsdl:Message
-					outputPolicies = getPoliciesAsExtElements(wsdl4jOutputMessage
-							.getExtensibilityElements());
-					addPolicyElements(PolicyInclude.MESSAGE_POLICY,
-							outputPolicies, outputPolicyInclude);
-
-					// /////////////////////////////////////////////////////////
-
-					// setting the element qname
-					axisOutputMessage.setElementQName(generateReferenceQname(
-							new QName(wsdl4jOperation.getName()),
-							wsdl4jOutputMessage,
-							findWrapppable(wsdl4jOutputMessage),
-							resolvedRPCWrapperElements));
-
-					// setting the wsa:Action
-					String wsaActionForOutput = getWsaAction(wsdl4jOutput
-							.getExtensionAttributes());
-
-					if (wsaActionForOutput != null
-							&& wsaActionForOutput.length() != 0) {
-						axisService.mapActionToOperation(wsaActionForOutput,
-								axisOperation);
-					}
-
-				}
-
-			} catch (AxisFault axisFault) {
-				logger
-						.error(
-								"Exception when creating AxisOperation for the AxisService",
-								axisFault);
-
-				throw new DeploymentException(axisFault.getMessage());
-			}
-			axisService.addOperation(axisOperation);
-		}
-		return axisService;
-	}
-
-	private int getMessageExchangePattern(Operation wsdl4jOperation) {
-		logger.debug("AxisServiceBuilder.getMessageExchangePattern");
-
-		if (wsdl4jOperation.getOutput() == null) {
-			return WSDLConstants.MEP_CONSTANT_IN_ONLY;
-
-		} else {
-			return WSDLConstants.MEP_CONSTANT_IN_OUT;
-		}
-	}
-
-	private XmlSchema getXMLSchema(Element element) {
-		logger.debug("AxisServiceBuilder:getXMLSchema");
-		return (new XmlSchemaCollection()).read(element);
-	}
-
-	private Document getDOMDocument() throws DeploymentException {
-		logger.debug("AxisServiceBuilder:getDOMDocument");
-		try {
-			DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
-			fac.setNamespaceAware(true);
-			return fac.newDocumentBuilder().newDocument();
-
-		} catch (ParserConfigurationException ex) {
-			logger.error("Exception occured when creating a Decument element",
-					ex);
-			throw new DeploymentException(ex.getMessage());
-		}
-	}
-
-	private String getTempPrefix() {
-		return "ns" + nsCount++;
-	}
-
-	private XmlSchema generateWrapperSchema(Definition wsdl4jDefinition,
-			Map resolvedRpcWrappedElementMap) throws DeploymentException {
-		logger.debug("AxisServiceBuilder.generateWrapperSchema");
-
-		Map declaredNameSpaces = wsdl4jDefinition.getNamespaces();
-
-		// loop through the messages. We'll populate this map with the relevant
-		// messages
-		// from the operations
-		Map messagesMap = new HashMap();
-		Map inputOperationsMap = new HashMap();
-		Map outputOperationsMap = new HashMap();
-		// this contains the required namespace imports. the key in this
-		// map would be the namaspace URI
-		Map namespaceImportsMap = new HashMap();
-		// generated complextypes. Keep in the list for writing later
-		// the key for the complexType map is the message QName
-		Map complexTypeElementsMap = new HashMap();
-		// generated Elements. Kep in the list for later writing
-		List elementElementsList = new ArrayList();
-		// list namespace prefix map. This map will include uri -> prefix
-		Map namespacePrefixMap = new HashMap();
-		// /////////////////////
-		String targetNamespaceUri = wsdl4jDefinition.getTargetNamespace();
-		// //////////////////////////////////////////////////////////////////////
-		// First thing is to populate the message map with the messages to
-		// process.
-		// //////////////////////////////////////////////////////////////////////
-		Map porttypeMap = wsdl4jDefinition.getPortTypes();
-		PortType[] porttypesArray = (PortType[]) porttypeMap.values().toArray(
-				new PortType[porttypeMap.size()]);
-		for (int j = 0; j < porttypesArray.length; j++) {
-			// we really need to do this for a single porttype!
-			List operations = porttypesArray[j].getOperations();
-			Operation op;
-			for (int k = 0; k < operations.size(); k++) {
-				op = (Operation) operations.get(k);
-				Input input = op.getInput();
-				Message message;
-				if (input != null) {
-					message = input.getMessage();
-					messagesMap.put(message.getQName(), message);
-					inputOperationsMap.put(op.getName(), message);
-
-				}
-
-				Output output = op.getOutput();
-				if (output != null) {
-					message = output.getMessage();
-					messagesMap.put(message.getQName(), message);
-					outputOperationsMap.put(op.getName(), message);
-				}
-				// todo also handle the faults here
-			}
-
-		}
-
-		// //////////////////////////////////////////////////////////////////////
-		// check whether there are messages that are wrappable. If there are no
-		// messages that are wrappable we'll
-		// just return null and endup this process
-		// //////////////////////////////////////////////////////////////////////
-		QName[] keys = (QName[]) messagesMap.keySet().toArray(
-				new QName[messagesMap.size()]);
-		boolean noMessagesTobeProcessed = true;
-		for (int i = 0; i < keys.length; i++) {
-			if (findWrapppable((Message) messagesMap.get(keys[i]))) {
-				noMessagesTobeProcessed = false;
-				break;
-			}
-		}
-
-		if (noMessagesTobeProcessed) {
-			return null;
-		}
-
-		// //////////////////////////////////////////////////////////////////////
-		// Now we have the message list to process - Process the whole list of
-		// messages at once
-		// since
-		// //////////////////////////////////////////////////////////////////////
-		List resolvedMessageQNames = new ArrayList();
-		// find the xsd prefix
-		String xsdPrefix = findSchemaPrefix(declaredNameSpaces);
-		Message wsdl4jMessage;
-		// DOM document that will be the ultimate creator
-		Document document = getDOMDocument();
-		for (int i = 0; i < keys.length; i++) {
-			wsdl4jMessage = (Message) messagesMap.get(keys[i]);
-			// No need to chack the wrappable
-
-			// This message is wrappabel. However we need to see whether the
-			// message is already
-			// resolved!
-			if (!resolvedMessageQNames.contains(wsdl4jMessage.getQName())) {
-				// This message has not been touched before!. So we can go ahead
-				// now
-				Map parts = wsdl4jMessage.getParts();
-				// add the complex type
-				String name = wsdl4jMessage.getQName().getLocalPart();
-				Element newComplexType = document.createElementNS(
-						XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
-								+ XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME);
-				newComplexType.setAttribute(XSD_NAME, name);
-
-				Element cmplxContentSequence = document.createElementNS(
-						XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
-								+ XML_SCHEMA_SEQUENCE_LOCAL_NAME);
-				Element child;
-				Iterator iterator = parts.keySet().iterator();
-				while (iterator.hasNext()) {
-					Part part = (Part) parts.get(iterator.next());
-					// the part name
-					String elementName = part.getName();
-					boolean isTyped = true;
-					// the type name
-					QName schemaTypeName;
-					if (part.getTypeName() != null) {
-						schemaTypeName = part.getTypeName();
-					} else if (part.getElementName() != null) {
-						schemaTypeName = part.getElementName();
-						isTyped = false;
-					} else {
-						logger
-								.error("Exception occured while creating wrapper element");
-						throw new RuntimeException(" Unqualified Message part!");
-					}
-
-					child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI,
-							xsdPrefix + ":" + XML_SCHEMA_ELEMENT_LOCAL_NAME);
-
-					String prefix;
-					if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName
-							.getNamespaceURI())) {
-						prefix = xsdPrefix;
-					} else {
-						// this schema is a third party one. So we need to have
-						// an import statement in our generated schema
-						String uri = schemaTypeName.getNamespaceURI();
-						if (!namespaceImportsMap.containsKey(uri)) {
-							// create Element for namespace import
-							Element namespaceImport = document.createElementNS(
-									XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
-											+ XML_SCHEMA_IMPORT_LOCAL_NAME);
-							namespaceImport.setAttribute("namespace", uri);
-							// add this to the map
-							namespaceImportsMap.put(uri, namespaceImport);
-							// we also need to associate this uri with a prefix
-							// and include that prefix
-							// in the schema's namspace declarations. So add
-							// theis particular namespace to the
-							// prefix map as well
-							prefix = getTempPrefix();
-							namespacePrefixMap.put(uri, prefix);
-						} else {
-							// this URI should be already in the namspace prefix
-							// map
-							prefix = (String) namespacePrefixMap.get(uri);
-						}
-
-					}
-					// If it's from a type the element we need to add a name and
-					// the type
-					// if not it's the element reference
-					if (isTyped) {
-						child.setAttribute(XSD_NAME, elementName);
-						child.setAttribute(XSD_TYPE, prefix + ":"
-								+ schemaTypeName.getLocalPart());
-					} else {
-						child.setAttribute(XSD_REF, prefix + ":"
-								+ schemaTypeName.getLocalPart());
-					}
-					cmplxContentSequence.appendChild(child);
-				}
-				newComplexType.appendChild(cmplxContentSequence);
-				// add this newly created complextype to the list
-				complexTypeElementsMap.put(wsdl4jMessage.getQName(),
-						newComplexType);
-				resolvedMessageQNames.add(wsdl4jMessage.getQName());
-			}
-
-		}
-
-		Element elementDeclaration;
-
-		// loop through the input op map and generate the elements
-		String[] inputOperationtNames = (String[]) inputOperationsMap.keySet()
-				.toArray(new String[inputOperationsMap.size()]);
-		for (int j = 0; j < inputOperationtNames.length; j++) {
-			String inputOpName = inputOperationtNames[j];
-			elementDeclaration = document.createElementNS(
-					XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
-							+ XML_SCHEMA_ELEMENT_LOCAL_NAME);
-			elementDeclaration.setAttribute(XSD_NAME, inputOpName);
-
-			String typeValue = ((Message) inputOperationsMap.get(inputOpName))
-					.getQName().getLocalPart();
-			elementDeclaration.setAttribute(XSD_TYPE, AXIS2WRAPPED + ":"
-					+ typeValue);
-			elementElementsList.add(elementDeclaration);
-			resolvedRpcWrappedElementMap.put(inputOpName, new QName(
-					targetNamespaceUri, inputOpName, AXIS2WRAPPED));
-		}
-
-		// loop through the output op map and generate the elements
-		String[] outputOperationtNames = (String[]) outputOperationsMap
-				.keySet().toArray(new String[outputOperationsMap.size()]);
-		for (int j = 0; j < outputOperationtNames.length; j++) {
-
-			String baseoutputOpName = outputOperationtNames[j];
-			String outputOpName = baseoutputOpName + "Response";
-			elementDeclaration = document.createElementNS(
-					XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
-							+ XML_SCHEMA_ELEMENT_LOCAL_NAME);
-			elementDeclaration.setAttribute(XSD_NAME, outputOpName);
-			String typeValue = ((Message) outputOperationsMap
-					.get(baseoutputOpName)).getQName().getLocalPart();
-			elementDeclaration.setAttribute(XSD_TYPE, AXIS2WRAPPED + ":"
-					+ typeValue);
-			elementElementsList.add(elementDeclaration);
-			resolvedRpcWrappedElementMap.put(outputOpName, new QName(
-					targetNamespaceUri, outputOpName, AXIS2WRAPPED));
-
-		}
-
-		// ////////////////////////////////////////////////////////////////////////////////////////////
-		// Now we are done with processing the messages and generating the right
-		// schema
-		// time to write out the schema
-		// ////////////////////////////////////////////////////////////////////////////////////////////
-
-		Element schemaElement = document.createElementNS(
-				XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
-						+ XML_SCHEMA_LOCAL_NAME);
-
-		// loop through the namespace declarations first
-		String[] nameSpaceDeclarationArray = (String[]) namespacePrefixMap
-				.keySet().toArray(new String[namespacePrefixMap.size()]);
-		for (int i = 0; i < nameSpaceDeclarationArray.length; i++) {
-			String s = nameSpaceDeclarationArray[i];
-			schemaElement.setAttributeNS("http://www.w3.org/2000/xmlns/",
-					"xmlns:" + namespacePrefixMap.get(s).toString(), s);
-
-		}
-
-		// add the targetNamespace
-
-		schemaElement.setAttributeNS("http://www.w3.org/2000/xmlns/",
-				XMLNS_AXIS2WRAPPED, targetNamespaceUri);
-		schemaElement.setAttribute(XSD_TARGETNAMESPACE, targetNamespaceUri);
-		schemaElement.setAttribute(XSD_ELEMENT_FORM_DEFAULT, XSD_UNQUALIFIED);
-
-		Element[] namespaceImports = (Element[]) namespaceImportsMap.values()
-				.toArray(new Element[namespaceImportsMap.size()]);
-		for (int i = 0; i < namespaceImports.length; i++) {
-			schemaElement.appendChild(namespaceImports[i]);
-
-		}
-
-		Element[] complexTypeElements = (Element[]) complexTypeElementsMap
-				.values().toArray(new Element[complexTypeElementsMap.size()]);
-		for (int i = 0; i < complexTypeElements.length; i++) {
-			schemaElement.appendChild(complexTypeElements[i]);
-
-		}
-
-		Element[] elementDeclarations = (Element[]) elementElementsList
-				.toArray(new Element[elementElementsList.size()]);
-		for (int i = 0; i < elementDeclarations.length; i++) {
-			schemaElement.appendChild(elementDeclarations[i]);
-
-		}
-
-		XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
-		Iterator prefixes = declaredNameSpaces.keySet().iterator();
-
-		while (prefixes.hasNext()) {
-			String prefix = (String) prefixes.next();
-			String u = (String) declaredNameSpaces.get(prefix);
-			schemaCollection.mapNamespace(prefix, u);
-		}
-		return schemaCollection.read(schemaElement);
-	}
-
-	private boolean findWrapppable(Message message) {
-
-		// ********************************************************************************************
-		// Note
-		// We will not use the binding to set the wrappable/unwrappable state.
-		// instead we'll look at the
-		// Messages for the following features
-		// 1. Messages with multiple parts -> We have no choice but to wrap
-		// 2. Messages with at least one part having a type attribute -> Again
-		// we have no choice but to
-		// wrap
-
-		// ********************************************************************************************
-		Map partsMap = message.getParts();
-		Iterator parts = partsMap.values().iterator();
-		boolean wrappable = partsMap.size() > 1;
-		Part part;
-		while (!wrappable && parts.hasNext()) {
-			part = (Part) parts.next();
-			wrappable = (part.getTypeName() != null) || wrappable;
-		}
-
-		return wrappable;
-	}
-
-	/**
-	 * Find the XML schema prefix
-	 */
-	private String findSchemaPrefix(Map declaredNameSpaces) {
-		logger.debug("AxisServiceBuilder.findSchemaPerfix");
-		String xsdPrefix = null;
-		if (declaredNameSpaces.containsValue(XMLSCHEMA_NAMESPACE_URI)) {
-			// loop and find the prefix
-			Iterator it = declaredNameSpaces.keySet().iterator();
-			String key;
-			while (it.hasNext()) {
-				key = (String) it.next();
-				if (XMLSCHEMA_NAMESPACE_URI.equals(declaredNameSpaces.get(key))) {
-					xsdPrefix = key;
-					break;
-				}
-			}
-
-		} else {
-			xsdPrefix = XMLSCHEMA_NAMESPACE_PREFIX; // default prefix
-		}
-
-		return xsdPrefix;
-	}
-
-	/**
-	 * Generates a referenceQName
-	 * 
-	 * @param wsdl4jMessage
-	 */
-	private QName generateReferenceQname(QName outerName,
-			Message wsdl4jMessage, boolean isWrappable,
-			Map resolvedRpcWrappedElementMap) {
-		QName referenceQName = null;
-		if (isWrappable) {
-			// The schema for this should be already made ! Find the QName from
-			// the list
-			referenceQName = (QName) resolvedRpcWrappedElementMap.get(outerName
-					.getLocalPart());
-
-		} else {
-			// Only one part so copy the QName of the referenced type.
-			Iterator outputIterator = wsdl4jMessage.getParts().values()
-					.iterator();
-			if (outputIterator.hasNext()) {
-				Part outPart = ((Part) outputIterator.next());
-				QName typeName;
-				if (null != (typeName = outPart.getTypeName())) {
-					referenceQName = typeName;
-				} else {
-					referenceQName = outPart.getElementName();
-				}
-			}
-		}
-
-		// //////////////////////////////////////////////////////////////////////////////
-		// System.out.println("final referenceQName = " + referenceQName);
-		// //////////////////////////////////////////////////////////////////////////////
-		return referenceQName;
-	}
-
-	private List getPoliciesAsExtElements(List extElementsList)
-			throws DeploymentException {
-
-		ArrayList policies = new ArrayList();
-
-		Iterator extElements = extElementsList.iterator();
-		DOMPolicyReader reader = (DOMPolicyReader) PolicyFactory
-				.getPolicyReader(PolicyFactory.DOM_POLICY_READER);
-		Object extElement;
-
-		while (extElements.hasNext()) {
-			extElement = extElements.next();
-
-			if (extElement instanceof UnknownExtensibilityElement) {
-				UnknownExtensibilityElement e = (UnknownExtensibilityElement) extElement;
-				Element element = e.getElement();
-				if (PolicyConstants.WS_POLICY_NAMESPACE_URI.equals(element
-						.getNamespaceURI())
-						&& PolicyConstants.WS_POLICY.equals(element
-								.getLocalName())) {
-					policies.add(reader.readPolicy(element));
-
-				} else if (PolicyConstants.WS_POLICY_NAMESPACE_URI
-						.equals(element.getNamespaceURI())
-						&& PolicyConstants.WS_POLICY_REFERENCE.equals(element
-								.getLocalName())) {
-
-					try {
-						policies.add(reader.readPolicyReference(element));
-
-					} catch (Exception ex) {
-						logger
-								.debug("Exception occured when processing policy elements");
-						throw new DeploymentException(ex.getMessage());
-					}
-				}
-			}
-		}
-
-		return policies;
-	}
-
-	private List getPoliciesAsExtAttributes(Map extAttributes) {
-		ArrayList policies = new ArrayList();
-
-		Object policyURIsString = extAttributes.get(new QName(
-				PolicyConstants.WS_POLICY_NAMESPACE_URI, "PolicyURIs"));
-
-		if (policyURIsString != null) {
-
-			String[] policyURIs = ((QName) policyURIsString).getLocalPart()
-					.trim().split(" ");
-
-			for (int i = 0; i < policyURIs.length; i++) {
-				policies.add(new PolicyReference(policyURIs[i]));
-			}
-		}
-
-		return policies;
-	}
-
-	private void addPolicyElements(int type, List policyElements,
-			PolicyInclude policyInclude) {
-		Iterator policyElementIterator = policyElements.iterator();
-		Object policyElement;
-
-		while (policyElementIterator.hasNext()) {
-			policyElement = policyElementIterator.next();
-
-			if (policyElement instanceof Policy) {
-				policyInclude.addPolicyElement(type, (Policy) policyElement);
-
-			} else if (policyElement instanceof PolicyReference) {
-				policyInclude.addPolicyRefElement(type,
-						(PolicyReference) policyElement);
-			}
-		}
-	}
-
-	private String getWsaAction(Map extAttributes) {
-		Object wsaAction = extAttributes.get(new QName(WSA_NS_URI, WSA_ACTION));
-
-		if (wsaAction != null) {
-			return ((QName) wsaAction).getLocalPart();
-		}
-		return null;
-	}
-
-	private String getSOAPActionURI(List extElements) {
-		Iterator iterator = extElements.iterator();
-		Object extElement;
-
-		while (iterator.hasNext()) {
-			extElement = iterator.next();
-
-			if (extElement instanceof SOAPOperation) {
-				String soapActionURI = ((SOAPOperation) extElement)
-						.getSoapActionURI();
-
-				if (soapActionURI != null && soapActionURI.length() != 0) {
-					return soapActionURI;
-				}
-			}
-		}
-		return null;
-	}
-
-	private Port getPortWithSoapBinding(Map ports) {
-		Iterator iterator = ports.values().iterator();
-		Port port;
-
-		while (iterator.hasNext()) {
-			port = (Port) iterator.next();
-			Binding wsdl4jBinding = port.getBinding();
-			Iterator extElements = wsdl4jBinding.getExtensibilityElements()
-					.iterator();
-			Object extElement;
-
-			while (extElements.hasNext()) {
-				extElement = extElements.next();
-
-				if (extElement instanceof SOAPBinding) {
-					return port;
-				}
-			}
-		}
-		return null;
-	}
+    private static final String XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME = "complexType";
+
+    private static final String XML_SCHEMA_ELEMENT_LOCAL_NAME = "element";
+
+    private static final String XML_SCHEMA_IMPORT_LOCAL_NAME = "import";
+
+    private static final String XSD_NAME = "name";
+
+    private static final String XSD_ELEMENT_FORM_DEFAULT = "elementFormDefault";
+
+    private static final String XSD_UNQUALIFIED = "unqualified";
+
+    private static final String XSD_TARGETNAMESPACE = "targetNamespace";
+
+    private static final String XSD_TYPE = "type";
+
+    private static final String XSD_REF = "ref";
+
+    private static final String AXIS2WRAPPED = "axis2wrapped";
+
+    private static final String XMLNS_AXIS2WRAPPED = "xmlns:axis2wrapped";
+
+    private static final String WSA_NS_URI = "http://schemas.xmlsoap.org/ws/2004/08/addressing";
+
+    private static final String WSA_ACTION = "Action";
+
+    private Log logger = LogFactory.getLog(this.getClass().getName());
+
+    private int nsCount = 1;
+
+    public AxisService getAxisService(InputStream wsdlInputStream)
+            throws DeploymentException {
+        logger
+                .debug("Entering AxisServiceBuilder:getAxisService(java.io.InputStream)");
+
+        try {
+            Document doc = XMLUtils.newDocument(wsdlInputStream);
+            WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
+            reader.setFeature("javax.wsdl.importDocuments", true);
+
+            Definition wsdlDefinition = reader.readWSDL(null, doc);
+            return getAxisService(wsdlDefinition);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger
+                    .error(
+                            "Exception occured when creating the Document from WSDL",
+                            e);
+            throw new DeploymentException(e);
+        }
+    }
+
+    public AxisService getAxisService(Definition wsdlDefinition)
+            throws DeploymentException {
+        logger.debug("Entering AxisServiceBuilder:getAxisService(javax.wsdl.Definition)");
+
+        AxisService axisService = new AxisService();
+        axisService.setWSDLDefinition(wsdlDefinition);
+        Map services = wsdlDefinition.getServices();
+
+        if (services.isEmpty()) {
+            logger.error("No javax.wsdl.Service element found");
+            throw new DeploymentException(
+                    "No javax.wsdl.Service element is found");
+        }
+
+        Iterator serviceIterator = services.values().iterator();
+        Service wsdl4jService = (Service) serviceIterator.next();
+
+        // setting the name
+        axisService.setName(wsdl4jService.getQName().getLocalPart());
+
+        // ///////////////// adding Policies ////////////////////////////
+
+        PolicyInclude policyInclude = axisService.getPolicyInclude();
+
+        List wsdlPolicies = getPoliciesAsExtElements(wsdlDefinition
+                .getExtensibilityElements());
+        Iterator wsdlPolicyIterator = wsdlPolicies.iterator();
+
+        while (wsdlPolicyIterator.hasNext()) {
+            Policy wsdlPolicy = (Policy) wsdlPolicyIterator.next();
+
+            if (wsdlPolicy.getPolicyURI() != null) {
+                policyInclude.registerPolicy(wsdlPolicy);
+            }
+        }
+
+        // /////////////////////////////////////////////////////////////////
+
+        // setting the schema
+        Types types = wsdlDefinition.getTypes();
+
+        if (types != null) {
+            Iterator extElements = types.getExtensibilityElements().iterator();
+            ExtensibilityElement extElement;
+
+            while (extElements.hasNext()) {
+                extElement = (ExtensibilityElement) extElements.next();
+
+                if (extElement instanceof Schema) {
+                    Element schemaElement = ((Schema) extElement).getElement();
+                    axisService.setSchema(getXMLSchema(schemaElement));
+                }
+            }
+        }
+
+        HashMap resolvedRPCWrapperElements = new HashMap();
+        XmlSchema xmlSchemaForWrappedElements = generateWrapperSchema(
+                wsdlDefinition, resolvedRPCWrapperElements);
+
+        if (xmlSchemaForWrappedElements != null) {
+            axisService.setSchema(xmlSchemaForWrappedElements);
+        }
+
+        // getting the port of the service with SOAP binding
+        Map ports = wsdl4jService.getPorts();
+
+        if (ports.isEmpty()) {
+            logger.error("atleast one port should be specified");
+            throw new WSDLProcessingException(
+                    "atleast one Port should be specified");
+        }
+
+        Port wsdl4jPort = getPortWithSoapBinding(ports);
+
+        if (wsdl4jPort == null) {
+            logger
+                    .error("atleast one port with a soap binding should be specified");
+            throw new WSDLProcessingException("no port with soap binding found");
+        }
+
+        Binding wsdl4jBinding = wsdl4jPort.getBinding();
+        PortType wsdl4jPortType = wsdl4jBinding.getPortType();
+
+        // ///////////// Adding policies //////////////////////////////////
+
+        List axisServicePolicies;
+
+        // wsdl:Service
+        axisServicePolicies = getPoliciesAsExtElements(wsdl4jService
+                .getExtensibilityElements());
+        addPolicyElements(PolicyInclude.SERVICE_POLICY, axisServicePolicies,
+                policyInclude);
+
+        // wsdl:Port
+        axisServicePolicies = getPoliciesAsExtElements(wsdl4jPort
+                .getExtensibilityElements());
+        addPolicyElements(PolicyInclude.PORT_POLICY, axisServicePolicies,
+                policyInclude);
+
+        // wsdl:PortType
+        axisServicePolicies = getPoliciesAsExtAttributes(wsdl4jPortType
+                .getExtensionAttributes());
+        addPolicyElements(PolicyInclude.PORT_TYPE_POLICY, axisServicePolicies,
+                policyInclude);
+
+        // wsdl:Binding
+        axisServicePolicies = getPoliciesAsExtElements(wsdl4jBinding
+                .getExtensibilityElements());
+        addPolicyElements(PolicyInclude.BINDING_POLICY, axisServicePolicies,
+                policyInclude);
+
+        // ////////////////////////////////////////////////////////////////
+
+        Iterator wsdl4jOperations = wsdl4jPortType.getOperations().iterator();
+
+        while (wsdl4jOperations.hasNext()) {
+            Operation wsdl4jOperation = (Operation) wsdl4jOperations.next();
+            BindingOperation wsdl4jBindingOperation = wsdl4jBinding
+                    .getBindingOperation(wsdl4jOperation.getName(), null, null);
+
+            AxisOperation axisOperation;
+
+            try {
+                axisOperation = AxisOperationFactory
+                        .getAxisOperation(getMessageExchangePattern(wsdl4jOperation));
+
+                // setting parent
+                axisOperation.setParent(axisService);
+                // setting operation name
+                axisOperation.setName(new QName(wsdl4jOperation.getName()));
+
+                // //////////////adding Policy //////////////////////////////
+
+                PolicyInclude operationPolicyInclude = axisOperation
+                        .getPolicyInclude();
+
+                List operationPolicies;
+
+                // wsdl:PortType -> wsdl:Operation
+                operationPolicies = getPoliciesAsExtElements(wsdl4jOperation
+                        .getExtensibilityElements());
+                addPolicyElements(PolicyInclude.OPERATION_POLICY,
+                        operationPolicies, operationPolicyInclude);
+
+                // wsdl:Binding -> wsdl:Operation
+                operationPolicies = getPoliciesAsExtElements(wsdl4jBindingOperation
+                        .getExtensibilityElements());
+                addPolicyElements(PolicyInclude.BINDING_OPERATION_POLICY,
+                        operationPolicies, operationPolicyInclude);
+
+                // /////////////////////////////////////////////////////////////
+
+                String soapActionURI = getSOAPActionURI(wsdl4jBindingOperation
+                        .getExtensibilityElements());
+
+                if (soapActionURI != null) {
+                    axisService.mapActionToOperation(soapActionURI,
+                            axisOperation);
+                }
+
+                // Input
+                Input wsdl4jInput = wsdl4jOperation.getInput();
+                BindingInput wsdl4jBindingInput = wsdl4jBindingOperation
+                        .getBindingInput();
+                Message wsdl4jInputMessage = wsdl4jInput.getMessage();
+
+                AxisMessage axisInputMessage = axisOperation
+                        .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+
+                // ////////////////// adding Policies /////////////////////////
+
+                PolicyInclude inputPolicyInclue = axisInputMessage
+                        .getPolicyInclude();
+
+                List inputMessagePolicies;
+
+                // wsdl:PortType -> wsdl:Operation -> wsdl:Input
+                inputMessagePolicies = getPoliciesAsExtAttributes(wsdl4jInput
+                        .getExtensionAttributes());
+                addPolicyElements(PolicyInclude.INPUT_POLICY,
+                        inputMessagePolicies, inputPolicyInclue);
+
+                // wsdl:Binding -> wsdl:Operation -> wsdl:Input
+                inputMessagePolicies = getPoliciesAsExtElements(wsdl4jBindingInput
+                        .getExtensibilityElements());
+                addPolicyElements(PolicyInclude.BINDING_INPUT_POLICY,
+                        inputMessagePolicies, inputPolicyInclue);
+
+                // wsdl:Message
+                inputMessagePolicies = getPoliciesAsExtElements(wsdl4jInputMessage
+                        .getExtensibilityElements());
+                addPolicyElements(PolicyInclude.MESSAGE_POLICY,
+                        inputMessagePolicies, inputPolicyInclue);
+
+                // /////////////////////////////////////////////////////////////
+
+                // setting the element qname
+                QName elementName = generateReferenceQname(
+                        new QName(wsdl4jPortType.getQName().getNamespaceURI(),
+                                wsdl4jOperation.getName()), wsdl4jInputMessage,
+                        findWrapppable(wsdl4jInputMessage),
+                        resolvedRPCWrapperElements);
+                axisInputMessage.setElementQName(elementName);
+
+                // setting wsa:Action
+                String wsaActionForInput = getWsaAction(wsdl4jInput
+                        .getExtensionAttributes());
+
+                if (wsaActionForInput != null
+                        && wsaActionForInput.length() != 0) {
+                    axisService.mapActionToOperation(wsaActionForInput,
+                            axisOperation);
+                }
+
+                Output wsdl4jOutput = wsdl4jOperation.getOutput();
+                BindingOutput wsdl4jBindingOutput = wsdl4jBindingOperation
+                        .getBindingOutput();
+
+                if (wsdl4jOutput != null) {
+
+                    AxisMessage axisOutputMessage = axisOperation
+                            .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+
+                    Message wsdl4jOutputMessage = wsdl4jOutput.getMessage();
+
+                    // ///////////// adding Policies ///////////////////////////
+
+                    PolicyInclude outputPolicyInclude = axisOutputMessage
+                            .getPolicyInclude();
+
+                    List outputPolicies;
+
+                    // wsdl:Output
+                    outputPolicies = getPoliciesAsExtAttributes(wsdl4jOutput
+                            .getExtensionAttributes());
+                    addPolicyElements(PolicyInclude.OUTPUT_POLICY,
+                            outputPolicies, outputPolicyInclude);
+
+                    // BindingOutput
+                    outputPolicies = getPoliciesAsExtElements(wsdl4jBindingOutput
+                            .getExtensibilityElements());
+                    addPolicyElements(PolicyInclude.BINDING_OUTPUT_POLICY,
+                            outputPolicies, outputPolicyInclude);
+
+                    // wsdl:Message
+                    outputPolicies = getPoliciesAsExtElements(wsdl4jOutputMessage
+                            .getExtensibilityElements());
+                    addPolicyElements(PolicyInclude.MESSAGE_POLICY,
+                            outputPolicies, outputPolicyInclude);
+
+                    // /////////////////////////////////////////////////////////
+
+                    // setting the element qname
+                    QName outElementName = generateReferenceQname(
+                            new QName(wsdl4jOperation.getName()),
+                            wsdl4jOutputMessage,
+                            findWrapppable(wsdl4jOutputMessage),
+                            resolvedRPCWrapperElements);
+                    axisOutputMessage.setElementQName(outElementName);
+                    // setting the wsa:Action
+                    String wsaActionForOutput = getWsaAction(wsdl4jOutput
+                            .getExtensionAttributes());
+
+                    if (wsaActionForOutput != null
+                            && wsaActionForOutput.length() != 0) {
+                        axisService.mapActionToOperation(wsaActionForOutput,
+                                axisOperation);
+                    }
+
+                }
+
+            } catch (AxisFault axisFault) {
+                logger
+                        .error(
+                                "Exception when creating AxisOperation for the AxisService",
+                                axisFault);
+
+                throw new DeploymentException(axisFault.getMessage());
+            }
+            axisService.addOperation(axisOperation);
+        }
+        return axisService;
+    }
+
+    private int getMessageExchangePattern(Operation wsdl4jOperation) {
+        logger.debug("AxisServiceBuilder.getMessageExchangePattern");
+
+        if (wsdl4jOperation.getOutput() == null) {
+            return WSDLConstants.MEP_CONSTANT_IN_ONLY;
+
+        } else {
+            return WSDLConstants.MEP_CONSTANT_IN_OUT;
+        }
+    }
+
+    private XmlSchema getXMLSchema(Element element) {
+        logger.debug("AxisServiceBuilder:getXMLSchema");
+        return (new XmlSchemaCollection()).read(element);
+    }
+
+    private Document getDOMDocument() throws DeploymentException {
+        logger.debug("AxisServiceBuilder:getDOMDocument");
+        try {
+            DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
+            fac.setNamespaceAware(true);
+            return fac.newDocumentBuilder().newDocument();
+
+        } catch (ParserConfigurationException ex) {
+            logger.error("Exception occured when creating a Decument element",
+                    ex);
+            throw new DeploymentException(ex.getMessage());
+        }
+    }
+
+    private String getTempPrefix() {
+        return "ns" + nsCount++;
+    }
+
+    private XmlSchema generateWrapperSchema(Definition wsdl4jDefinition,
+                                            Map resolvedRpcWrappedElementMap) throws DeploymentException {
+        logger.debug("AxisServiceBuilder.generateWrapperSchema");
+
+        Map declaredNameSpaces = wsdl4jDefinition.getNamespaces();
+
+        // loop through the messages. We'll populate this map with the relevant
+        // messages
+        // from the operations
+        Map messagesMap = new HashMap();
+        Map inputOperationsMap = new HashMap();
+        Map outputOperationsMap = new HashMap();
+        // this contains the required namespace imports. the key in this
+        // map would be the namaspace URI
+        Map namespaceImportsMap = new HashMap();
+        // generated complextypes. Keep in the list for writing later
+        // the key for the complexType map is the message QName
+        Map complexTypeElementsMap = new HashMap();
+        // generated Elements. Kep in the list for later writing
+        List elementElementsList = new ArrayList();
+        // list namespace prefix map. This map will include uri -> prefix
+        Map namespacePrefixMap = new HashMap();
+        // /////////////////////
+        String targetNamespaceUri = wsdl4jDefinition.getTargetNamespace();
+        // //////////////////////////////////////////////////////////////////////
+        // First thing is to populate the message map with the messages to
+        // process.
+        // //////////////////////////////////////////////////////////////////////
+        Map porttypeMap = wsdl4jDefinition.getPortTypes();
+        PortType[] porttypesArray = (PortType[]) porttypeMap.values().toArray(
+                new PortType[porttypeMap.size()]);
+        for (int j = 0; j < porttypesArray.length; j++) {
+            // we really need to do this for a single porttype!
+            List operations = porttypesArray[j].getOperations();
+            Operation op;
+            for (int k = 0; k < operations.size(); k++) {
+                op = (Operation) operations.get(k);
+                Input input = op.getInput();
+                Message message;
+                if (input != null) {
+                    message = input.getMessage();
+                    messagesMap.put(message.getQName(), message);
+                    inputOperationsMap.put(op.getName(), message);
+
+                }
+
+                Output output = op.getOutput();
+                if (output != null) {
+                    message = output.getMessage();
+                    messagesMap.put(message.getQName(), message);
+                    outputOperationsMap.put(op.getName(), message);
+                }
+                // todo also handle the faults here
+            }
+
+        }
+
+        // //////////////////////////////////////////////////////////////////////
+        // check whether there are messages that are wrappable. If there are no
+        // messages that are wrappable we'll
+        // just return null and endup this process
+        // //////////////////////////////////////////////////////////////////////
+        QName[] keys = (QName[]) messagesMap.keySet().toArray(
+                new QName[messagesMap.size()]);
+        boolean noMessagesTobeProcessed = true;
+        for (int i = 0; i < keys.length; i++) {
+            if (findWrapppable((Message) messagesMap.get(keys[i]))) {
+                noMessagesTobeProcessed = false;
+                break;
+            }
+        }
+
+        if (noMessagesTobeProcessed) {
+            return null;
+        }
+
+        // //////////////////////////////////////////////////////////////////////
+        // Now we have the message list to process - Process the whole list of
+        // messages at once
+        // since
+        // //////////////////////////////////////////////////////////////////////
+        List resolvedMessageQNames = new ArrayList();
+        // find the xsd prefix
+        String xsdPrefix = findSchemaPrefix(declaredNameSpaces);
+        Message wsdl4jMessage;
+        // DOM document that will be the ultimate creator
+        Document document = getDOMDocument();
+        for (int i = 0; i < keys.length; i++) {
+            wsdl4jMessage = (Message) messagesMap.get(keys[i]);
+            // No need to chack the wrappable
+
+            // This message is wrappabel. However we need to see whether the
+            // message is already
+            // resolved!
+            if (!resolvedMessageQNames.contains(wsdl4jMessage.getQName())) {
+                // This message has not been touched before!. So we can go ahead
+                // now
+                Map parts = wsdl4jMessage.getParts();
+                // add the complex type
+                String name = wsdl4jMessage.getQName().getLocalPart();
+                Element newComplexType = document.createElementNS(
+                        XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+                        + XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME);
+                newComplexType.setAttribute(XSD_NAME, name);
+
+                Element cmplxContentSequence = document.createElementNS(
+                        XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+                        + XML_SCHEMA_SEQUENCE_LOCAL_NAME);
+                Element child;
+                Iterator iterator = parts.keySet().iterator();
+                while (iterator.hasNext()) {
+                    Part part = (Part) parts.get(iterator.next());
+                    // the part name
+                    String elementName = part.getName();
+                    boolean isTyped = true;
+                    // the type name
+                    QName schemaTypeName;
+                    if (part.getTypeName() != null) {
+                        schemaTypeName = part.getTypeName();
+                    } else if (part.getElementName() != null) {
+                        schemaTypeName = part.getElementName();
+                        isTyped = false;
+                    } else {
+                        logger
+                                .error("Exception occured while creating wrapper element");
+                        throw new RuntimeException(" Unqualified Message part!");
+                    }
+
+                    child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI,
+                            xsdPrefix + ":" + XML_SCHEMA_ELEMENT_LOCAL_NAME);
+
+                    String prefix;
+                    if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName
+                            .getNamespaceURI())) {
+                        prefix = xsdPrefix;
+                    } else {
+                        // this schema is a third party one. So we need to have
+                        // an import statement in our generated schema
+                        String uri = schemaTypeName.getNamespaceURI();
+                        if (!namespaceImportsMap.containsKey(uri)) {
+                            // create Element for namespace import
+                            Element namespaceImport = document.createElementNS(
+                                    XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+                                    + XML_SCHEMA_IMPORT_LOCAL_NAME);
+                            namespaceImport.setAttribute("namespace", uri);
+                            // add this to the map
+                            namespaceImportsMap.put(uri, namespaceImport);
+                            // we also need to associate this uri with a prefix
+                            // and include that prefix
+                            // in the schema's namspace declarations. So add
+                            // theis particular namespace to the
+                            // prefix map as well
+                            prefix = getTempPrefix();
+                            namespacePrefixMap.put(uri, prefix);
+                        } else {
+                            // this URI should be already in the namspace prefix
+                            // map
+                            prefix = (String) namespacePrefixMap.get(uri);
+                        }
+
+                    }
+                    // If it's from a type the element we need to add a name and
+                    // the type
+                    // if not it's the element reference
+                    if (isTyped) {
+                        child.setAttribute(XSD_NAME, elementName);
+                        child.setAttribute(XSD_TYPE, prefix + ":"
+                                + schemaTypeName.getLocalPart());
+                    } else {
+                        child.setAttribute(XSD_REF, prefix + ":"
+                                + schemaTypeName.getLocalPart());
+                    }
+                    cmplxContentSequence.appendChild(child);
+                }
+                newComplexType.appendChild(cmplxContentSequence);
+                // add this newly created complextype to the list
+                complexTypeElementsMap.put(wsdl4jMessage.getQName(),
+                        newComplexType);
+                resolvedMessageQNames.add(wsdl4jMessage.getQName());
+            }
+
+        }
+
+        Element elementDeclaration;
+
+        // loop through the input op map and generate the elements
+        String[] inputOperationtNames = (String[]) inputOperationsMap.keySet()
+                .toArray(new String[inputOperationsMap.size()]);
+        for (int j = 0; j < inputOperationtNames.length; j++) {
+            String inputOpName = inputOperationtNames[j];
+            elementDeclaration = document.createElementNS(
+                    XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+                    + XML_SCHEMA_ELEMENT_LOCAL_NAME);
+            elementDeclaration.setAttribute(XSD_NAME, inputOpName);
+
+            String typeValue = ((Message) inputOperationsMap.get(inputOpName))
+                    .getQName().getLocalPart();
+            elementDeclaration.setAttribute(XSD_TYPE, AXIS2WRAPPED + ":"
+                    + typeValue);
+            elementElementsList.add(elementDeclaration);
+            resolvedRpcWrappedElementMap.put(inputOpName, new QName(
+                    targetNamespaceUri, inputOpName, AXIS2WRAPPED));
+        }
+
+        // loop through the output op map and generate the elements
+        String[] outputOperationtNames = (String[]) outputOperationsMap
+                .keySet().toArray(new String[outputOperationsMap.size()]);
+        for (int j = 0; j < outputOperationtNames.length; j++) {
+
+            String baseoutputOpName = outputOperationtNames[j];
+            String outputOpName = baseoutputOpName + "Response";
+            elementDeclaration = document.createElementNS(
+                    XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+                    + XML_SCHEMA_ELEMENT_LOCAL_NAME);
+            elementDeclaration.setAttribute(XSD_NAME, outputOpName);
+            String typeValue = ((Message) outputOperationsMap
+                    .get(baseoutputOpName)).getQName().getLocalPart();
+            elementDeclaration.setAttribute(XSD_TYPE, AXIS2WRAPPED + ":"
+                    + typeValue);
+            elementElementsList.add(elementDeclaration);
+            resolvedRpcWrappedElementMap.put(outputOpName, new QName(
+                    targetNamespaceUri, outputOpName, AXIS2WRAPPED));
+
+        }
+
+        // ////////////////////////////////////////////////////////////////////////////////////////////
+        // Now we are done with processing the messages and generating the right
+        // schema
+        // time to write out the schema
+        // ////////////////////////////////////////////////////////////////////////////////////////////
+
+        Element schemaElement = document.createElementNS(
+                XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
+                + XML_SCHEMA_LOCAL_NAME);
+
+        // loop through the namespace declarations first
+        String[] nameSpaceDeclarationArray = (String[]) namespacePrefixMap
+                .keySet().toArray(new String[namespacePrefixMap.size()]);
+        for (int i = 0; i < nameSpaceDeclarationArray.length; i++) {
+            String s = nameSpaceDeclarationArray[i];
+            schemaElement.setAttributeNS("http://www.w3.org/2000/xmlns/",
+                    "xmlns:" + namespacePrefixMap.get(s).toString(), s);
+
+        }
+
+        // add the targetNamespace
+
+        schemaElement.setAttributeNS("http://www.w3.org/2000/xmlns/",
+                XMLNS_AXIS2WRAPPED, targetNamespaceUri);
+        schemaElement.setAttribute(XSD_TARGETNAMESPACE, targetNamespaceUri);
+        schemaElement.setAttribute(XSD_ELEMENT_FORM_DEFAULT, XSD_UNQUALIFIED);
+
+        Element[] namespaceImports = (Element[]) namespaceImportsMap.values()
+                .toArray(new Element[namespaceImportsMap.size()]);
+        for (int i = 0; i < namespaceImports.length; i++) {
+            schemaElement.appendChild(namespaceImports[i]);
+
+        }
+
+        Element[] complexTypeElements = (Element[]) complexTypeElementsMap
+                .values().toArray(new Element[complexTypeElementsMap.size()]);
+        for (int i = 0; i < complexTypeElements.length; i++) {
+            schemaElement.appendChild(complexTypeElements[i]);
+
+        }
+
+        Element[] elementDeclarations = (Element[]) elementElementsList
+                .toArray(new Element[elementElementsList.size()]);
+        for (int i = 0; i < elementDeclarations.length; i++) {
+            schemaElement.appendChild(elementDeclarations[i]);
+
+        }
+
+        XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
+        Iterator prefixes = declaredNameSpaces.keySet().iterator();
+
+        while (prefixes.hasNext()) {
+            String prefix = (String) prefixes.next();
+            String u = (String) declaredNameSpaces.get(prefix);
+            schemaCollection.mapNamespace(prefix, u);
+        }
+        return schemaCollection.read(schemaElement);
+    }
+
+    private boolean findWrapppable(Message message) {
+
+        // ********************************************************************************************
+        // Note
+        // We will not use the binding to set the wrappable/unwrappable state.
+        // instead we'll look at the
+        // Messages for the following features
+        // 1. Messages with multiple parts -> We have no choice but to wrap
+        // 2. Messages with at least one part having a type attribute -> Again
+        // we have no choice but to
+        // wrap
+
+        // ********************************************************************************************
+        Map partsMap = message.getParts();
+        Iterator parts = partsMap.values().iterator();
+        boolean wrappable = partsMap.size() > 1;
+        Part part;
+        while (!wrappable && parts.hasNext()) {
+            part = (Part) parts.next();
+            wrappable = (part.getTypeName() != null) || wrappable;
+        }
+
+        return wrappable;
+    }
+
+    /**
+     * Find the XML schema prefix
+     */
+    private String findSchemaPrefix(Map declaredNameSpaces) {
+        logger.debug("AxisServiceBuilder.findSchemaPerfix");
+        String xsdPrefix = null;
+        if (declaredNameSpaces.containsValue(XMLSCHEMA_NAMESPACE_URI)) {
+            // loop and find the prefix
+            Iterator it = declaredNameSpaces.keySet().iterator();
+            String key;
+            while (it.hasNext()) {
+                key = (String) it.next();
+                if (XMLSCHEMA_NAMESPACE_URI.equals(declaredNameSpaces.get(key))) {
+                    xsdPrefix = key;
+                    break;
+                }
+            }
+
+        } else {
+            xsdPrefix = XMLSCHEMA_NAMESPACE_PREFIX; // default prefix
+        }
+
+        return xsdPrefix;
+    }
+
+    /**
+     * Generates a referenceQName
+     *
+     * @param wsdl4jMessage
+     */
+    private QName generateReferenceQname(QName outerName,
+                                         Message wsdl4jMessage, boolean isWrappable,
+                                         Map resolvedRpcWrappedElementMap) {
+        QName referenceQName = null;
+        if (isWrappable) {
+            // The schema for this should be already made ! Find the QName from
+            // the list
+            referenceQName = (QName) resolvedRpcWrappedElementMap.get(outerName
+                    .getLocalPart());
+
+        } else {
+            // Only one part so copy the QName of the referenced type.
+            Iterator outputIterator = wsdl4jMessage.getParts().values()
+                    .iterator();
+            if (outputIterator.hasNext()) {
+                Part outPart = ((Part) outputIterator.next());
+                QName typeName;
+                if (null != (typeName = outPart.getTypeName())) {
+                    referenceQName = typeName;
+                } else {
+                    referenceQName = outPart.getElementName();
+                }
+            }
+        }
+
+        // //////////////////////////////////////////////////////////////////////////////
+        // System.out.println("final referenceQName = " + referenceQName);
+        // //////////////////////////////////////////////////////////////////////////////
+        return referenceQName;
+    }
+
+    private List getPoliciesAsExtElements(List extElementsList)
+            throws DeploymentException {
+
+        ArrayList policies = new ArrayList();
+
+        Iterator extElements = extElementsList.iterator();
+        DOMPolicyReader reader = (DOMPolicyReader) PolicyFactory
+                .getPolicyReader(PolicyFactory.DOM_POLICY_READER);
+        Object extElement;
+
+        while (extElements.hasNext()) {
+            extElement = extElements.next();
+
+            if (extElement instanceof UnknownExtensibilityElement) {
+                UnknownExtensibilityElement e = (UnknownExtensibilityElement) extElement;
+                Element element = e.getElement();
+                if (PolicyConstants.WS_POLICY_NAMESPACE_URI.equals(element
+                        .getNamespaceURI())
+                        && PolicyConstants.WS_POLICY.equals(element
+                        .getLocalName())) {
+                    policies.add(reader.readPolicy(element));
+
+                } else if (PolicyConstants.WS_POLICY_NAMESPACE_URI
+                        .equals(element.getNamespaceURI())
+                        && PolicyConstants.WS_POLICY_REFERENCE.equals(element
+                        .getLocalName())) {
+
+                    try {
+                        policies.add(reader.readPolicyReference(element));
+
+                    } catch (Exception ex) {
+                        logger
+                                .debug("Exception occured when processing policy elements");
+                        throw new DeploymentException(ex.getMessage());
+                    }
+                }
+            }
+        }
+
+        return policies;
+    }
+
+    private List getPoliciesAsExtAttributes(Map extAttributes) {
+        ArrayList policies = new ArrayList();
+
+        Object policyURIsString = extAttributes.get(new QName(
+                PolicyConstants.WS_POLICY_NAMESPACE_URI, "PolicyURIs"));
+
+        if (policyURIsString != null) {
+
+            String[] policyURIs = ((QName) policyURIsString).getLocalPart()
+                    .trim().split(" ");
+
+            for (int i = 0; i < policyURIs.length; i++) {
+                policies.add(new PolicyReference(policyURIs[i]));
+            }
+        }
+
+        return policies;
+    }
+
+    private void addPolicyElements(int type, List policyElements,
+                                   PolicyInclude policyInclude) {
+        Iterator policyElementIterator = policyElements.iterator();
+        Object policyElement;
+
+        while (policyElementIterator.hasNext()) {
+            policyElement = policyElementIterator.next();
+
+            if (policyElement instanceof Policy) {
+                policyInclude.addPolicyElement(type, (Policy) policyElement);
+
+            } else if (policyElement instanceof PolicyReference) {
+                policyInclude.addPolicyRefElement(type,
+                        (PolicyReference) policyElement);
+            }
+        }
+    }
+
+    private String getWsaAction(Map extAttributes) {
+        Object wsaAction = extAttributes.get(new QName(WSA_NS_URI, WSA_ACTION));
+
+        if (wsaAction != null) {
+            return ((QName) wsaAction).getLocalPart();
+        }
+        return null;
+    }
+
+    private String getSOAPActionURI(List extElements) {
+        Iterator iterator = extElements.iterator();
+        Object extElement;
+
+        while (iterator.hasNext()) {
+            extElement = iterator.next();
+
+            if (extElement instanceof SOAPOperation) {
+                String soapActionURI = ((SOAPOperation) extElement)
+                        .getSoapActionURI();
+
+                if (soapActionURI != null && soapActionURI.length() != 0) {
+                    return soapActionURI;
+                }
+            }
+        }
+        return null;
+    }
+
+    private Port getPortWithSoapBinding(Map ports) {
+        Iterator iterator = ports.values().iterator();
+        Port port;
+
+        while (iterator.hasNext()) {
+            port = (Port) iterator.next();
+            Binding wsdl4jBinding = port.getBinding();
+            Iterator extElements = wsdl4jBinding.getExtensibilityElements()
+                    .iterator();
+            Object extElement;
+
+            while (extElements.hasNext()) {
+                extElement = extElements.next();
+
+                if (extElement instanceof SOAPBinding) {
+                    return port;
+                }
+            }
+        }
+        return null;
+    }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisMessage.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisMessage.java?rev=374351&r1=374350&r2=374351&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisMessage.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisMessage.java Thu Feb  2 03:16:16 2006
@@ -1,10 +1,13 @@
 package org.apache.axis2.description;
 
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.wsdl.MessageReference;
 import org.apache.wsdl.impl.MessageReferenceImpl;
 
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
+import java.util.Iterator;
 
 /*
 * Copyright 2004,2005 The Apache Software Foundation.
@@ -29,13 +32,14 @@
  */
 public class AxisMessage extends AxisDescription {
     private ArrayList handlerChain;
-    
+
     //to keep data in WSDL message refference and to keep the Java2WSDL data
     // such as SchemaElementName , direction etc.
     private MessageReference messageReference;
-    
+
     private PolicyInclude policyInclude;
 
+
     public AxisMessage() {
         handlerChain = new ArrayList();
         messageReference = new MessageReferenceImpl();
@@ -82,8 +86,23 @@
     public void setElementQName(QName element) {
         messageReference.setElementQName(element);
     }
-    
+
     public Object getKey() {
-    	return getElementQName();
+        return getElementQName();
+    }
+
+    public XmlSchemaElement getSchemaElement() {
+        AxisService service = (AxisService) getParent().getParent();
+        XmlSchema schema = service.getSchema();
+        if (schema != null) {
+            Iterator scheamItms = schema.getItems().getIterator();
+            while (scheamItms.hasNext()) {
+                XmlSchemaElement xmlSchemaElement = (XmlSchemaElement) scheamItms.next();
+                if (xmlSchemaElement.getName().equals(getElementQName().getLocalPart())) {
+                    return xmlSchemaElement;
+                }
+            }
+        }
+        return null;
     }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService.java?rev=374351&r1=374350&r2=374351&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisService.java Thu Feb  2 03:16:16 2006
@@ -31,6 +31,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.wsdl.WSDLConstants;
 import org.apache.wsdl.WSDLDescription;
 
@@ -665,5 +666,12 @@
 
     public void setTargetNamespacePrefix(String targetNamespacePrefix) {
         this.targetNamespacePrefix = targetNamespacePrefix;
+    }
+
+    public XmlSchemaElement getSchemaElement(QName elementQName) {
+        if (schema != null) {
+            return schema.getElementByName(elementQName);
+        }
+        return null;
     }
 }

Modified: webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/ServiceCreateTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/ServiceCreateTest.java?rev=374351&r1=374350&r2=374351&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/ServiceCreateTest.java (original)
+++ webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/engine/ServiceCreateTest.java Thu Feb  2 03:16:16 2006
@@ -8,10 +8,13 @@
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.ConfigurationContextFactory;
 import org.apache.axis2.deployment.util.Utils;
+import org.apache.axis2.description.AxisMessage;
+import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.integration.UtilServer;
-import org.apache.ws.commons.om.OMElement;
 import org.apache.axis2.rpc.client.RPCServiceClient;
+import org.apache.ws.commons.om.OMElement;
+import org.apache.wsdl.WSDLConstants;
 
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
@@ -42,7 +45,7 @@
         UtilServer.start();
         configContext = UtilServer.getConfigurationContext();
         clinetConfigurationctx = ConfigurationContextFactory.
-                createConfigurationContextFromFileSystem("target/test-resources/integrationRepo",null);
+                createConfigurationContextFromFileSystem("target/test-resources/integrationRepo", null);
     }
 
     public void testServiceCreate() throws AxisFault {
@@ -51,7 +54,12 @@
         assertNotNull(service);
         axisConfig.addService(service);
         assertEquals("MyService", service.getName());
-        assertNotNull(service.getOperation(new QName("add")));
+        AxisOperation axisOperation = service.getOperation(new QName("add"));
+        assertNotNull(axisOperation);
+        AxisMessage messge = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+        // messge.getSchemaElement().toString()
+        assertNotNull(messge);
+        assertNotNull(messge.getSchemaElement());
         assertNotNull(service.getOperation(new QName("putValue")));
         assertNotNull(axisConfig.getService("MyService"));
         service.printWSDL(System.out, "http://127.0.0.1:8080/axis2/services/");
@@ -70,7 +78,7 @@
         args.add("100");
         args.add("200");
 
-        OMElement response = client.invokeBlocking(new QName("http://org.apache.axis2/xsd","add","ns1"), args.toArray());
+        OMElement response = client.invokeBlocking(new QName("http://org.apache.axis2/xsd", "add", "ns1"), args.toArray());
         assertEquals(Integer.parseInt(response.getFirstElement().getText()), 300);
     }
 }