Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 84971 invoked from network); 15 Sep 2005 19:30:41 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 15 Sep 2005 19:30:40 -0000 Received: (qmail 42818 invoked by uid 500); 15 Sep 2005 19:21:35 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 32360 invoked by uid 500); 15 Sep 2005 19:20:00 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 22436 invoked by uid 500); 15 Sep 2005 19:18:51 -0000 Delivered-To: apmail-ws-axis2-cvs@ws.apache.org Received: (qmail 20892 invoked by uid 99); 15 Sep 2005 19:18:07 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Thu, 15 Sep 2005 12:15:58 -0700 Received: (qmail 56389 invoked by uid 65534); 15 Sep 2005 19:15:58 -0000 Message-ID: <20050915191558.56388.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r289289 [106/134] - in /webservices/axis2/trunk/java: ./ etc/ modules/addressing/ modules/addressing/src/META-INF/ modules/addressing/src/org/apache/axis2/handlers/addressing/ modules/addressing/test-resources/ modules/addressing/test/org/a... Date: Thu, 15 Sep 2005 19:07:03 -0000 To: axis2-cvs@ws.apache.org From: dims@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Modified: webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java?rev=289289&r1=289288&r2=289289&view=diff ============================================================================== --- webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java (original) +++ webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java Thu Sep 15 11:52:11 2005 @@ -1,881 +1,881 @@ -/* -* Copyright 2001-2004 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. -*/ -package org.apache.axis2.wsdl.builder.wsdl4j; - -import com.ibm.wsdl.extensions.soap.SOAPConstants; -import org.apache.axis2.wsdl.builder.WSDLComponentFactory; -import org.apache.wsdl.*; -import org.apache.wsdl.extensions.ExtensionConstants; -import org.apache.wsdl.extensions.ExtensionFactory; -import org.apache.wsdl.extensions.DefaultExtensibilityElement; -import org.apache.wsdl.impl.WSDLProcessingException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.wsdl.*; -import javax.wsdl.extensions.ExtensibilityElement; -import javax.wsdl.extensions.UnknownExtensibilityElement; -import javax.wsdl.extensions.schema.Schema; -import javax.wsdl.extensions.schema.SchemaImport; -import javax.wsdl.extensions.soap.*; -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.util.*; - -/** - * @author chathura@opensource.lk - */ -public class WSDLPump { - - private static final String XSD_TYPE = "type"; - private static final String XSD_SEQUENCE = "sequence"; - private static final String XSD_NAME = "name"; - private static final String XSD_COMPLEXTYPE = "complexType"; - private static final String XSD_TARGETNAMESPACE = "targetNamespace"; - private static final String XMLNS_AXIS2WRAPPED = "xmlns:axis2wrapped"; - private static final String NAMESPACE_XMLSCHEMA = "http://www.w3.org/2001/XMLSchema"; - private static final String XSD_ELEMENT = "element"; - private static final String BOUND_INTERFACE_NAME = "BoundInterface"; - - private WSDLDescription womDefinition; - - private Definition wsdl4jParsedDefinition; - - private WSDLComponentFactory wsdlComponentFactory; - - - private List resolvedMultipartMessageList = new LinkedList(); - - public WSDLPump(WSDLDescription womDefinition, - Definition wsdl4jParsedDefinition) { - this(womDefinition, wsdl4jParsedDefinition, womDefinition); - } - - public WSDLPump(WSDLDescription womDefinition, - Definition wsdl4jParsedDefinition, - WSDLComponentFactory wsdlComponentFactory) { - this.womDefinition = womDefinition; - this.wsdl4jParsedDefinition = wsdl4jParsedDefinition; - this.wsdlComponentFactory = wsdlComponentFactory; - } - - public void pump() { - if (null != this.wsdl4jParsedDefinition && null != this.womDefinition) { - this.populateDefinition(this.womDefinition, - this.wsdl4jParsedDefinition); - } else { - throw new WSDLProcessingException("Properties not set properly"); - } - - } - - private void populateDefinition(WSDLDescription wsdlDefinition, - Definition wsdl4JDefinition) { - //Go through the WSDL4J Definition and pump it to the WOM - wsdlDefinition.setWSDL1DefinitionName(wsdl4JDefinition.getQName()); - wsdlDefinition - .setTargetNameSpace(wsdl4JDefinition.getTargetNamespace()); - wsdlDefinition.setNamespaces(wsdl4JDefinition.getNamespaces()); - this.copyExtensibleElements( - wsdl4JDefinition.getExtensibilityElements(), wsdlDefinition, null); - - ///////////////////////////////////////////////////////////////////// - // Order of the following items shouldn't be changed unless you // - // really know what you are doing. Reason being the components that // - // are copied(pumped) towards the end depend on the components that // - // has already being pumped. Following Lists some of the // - // dependencies. // - //1) The Binding refers to the Interface // - //2) The Endpoint refers to the Bindings // - // .... // - // // - ////////////////////////////////////////////////////////////////////// - - //////////////////(1)First Copy the Types///////////////////////////// - //Types may get changed inside the Operation pumping. - - Types wsdl4jTypes = wsdl4JDefinition.getTypes(); - WSDLTypes wsdlTypes = null; - if (null != wsdl4jTypes) { - wsdlTypes = this.wsdlComponentFactory.createTypes(); - this.copyExtensibleElements(wsdl4jTypes.getExtensibilityElements(), - wsdlTypes, null); - this.womDefinition.setTypes(wsdlTypes); - } - - - // There can be types that are imported. Check the imports and - // These schemas are needed for code generation - - Map wsdlImports = wsdl4JDefinition.getImports(); - - if (null != wsdlImports && !wsdlImports.isEmpty()){ - Collection importsCollection = wsdlImports.values(); - for (Iterator iterator = importsCollection.iterator(); iterator.hasNext();) { - Vector values = (Vector)iterator.next(); - for (int i = 0; i < values.size(); i++) { - Import wsdlImport = (Import)values.elementAt(i); - - if (wsdlImport.getDefinition()!=null){ - Definition importedDef = wsdlImport.getDefinition(); - - if (wsdlTypes==null){ - wsdlTypes = this.wsdlComponentFactory.createTypes(); - } - //add the imported types - this.copyExtensibleElements(importedDef.getTypes(). - getExtensibilityElements(), - wsdlTypes, null); - this.womDefinition.setTypes(wsdlTypes); - } - } - - } - } - ///////////////////(2)Copy the Interfaces/////////////////////////// - //copy the Interfaces: Get the PortTypes from WSDL4J parse OM and - // copy it to the - //WOM's WSDLInterface Components - - Iterator portTypeIterator = wsdl4JDefinition.getPortTypes().values() - .iterator(); - WSDLInterface wsdlInterface; - PortType portType; - while (portTypeIterator.hasNext()) { - wsdlInterface = this.wsdlComponentFactory.createInterface(); - portType = (PortType) portTypeIterator.next(); - this.populateInterfaces(wsdlInterface, portType); - this.copyExtensibilityAttribute(portType.getExtensionAttributes(), - wsdlInterface); - wsdlDefinition.addInterface(wsdlInterface); - } - - //////////////////(3)Copy the Bindings/////////////////////// - //pump the Bindings: Get the Bindings map from WSDL4J and create a new - // map of WSDLBinding elements. At this point we need to do some extra work since there - //can be header parameters - - Iterator bindingIterator = wsdl4JDefinition.getBindings().values() - .iterator(); - WSDLBinding wsdlBinding; - Binding wsdl4jBinding; - while (bindingIterator.hasNext()) { - wsdlBinding = this.wsdlComponentFactory.createBinding(); - wsdl4jBinding = (Binding) bindingIterator.next(); - this.populateBindings(wsdlBinding, wsdl4jBinding, wsdl4JDefinition); - this.copyExtensibleElements( - wsdl4jBinding.getExtensibilityElements(), - wsdlBinding, null); - wsdlDefinition.addBinding(wsdlBinding); - - } - - ///////////////////(4)Copy the Services/////////////////////////////// - - Iterator serviceIterator = wsdl4JDefinition.getServices().values() - .iterator(); - WSDLService wsdlService; - Service wsdl4jService; - while (serviceIterator.hasNext()) { - wsdlService = this.wsdlComponentFactory.createService(); - wsdl4jService = (Service) serviceIterator.next(); - this.populateServices(wsdlService, wsdl4jService); - this.copyExtensibleElements( - wsdl4jService.getExtensibilityElements(), - wsdlService, null); - wsdlDefinition.addService(wsdlService); - } - - } - - ////////////////////////////////////////////////////////////////////////////// - ////////////////////////// Top level Components Copying - // //////////////////// - - /** - * Simply Copy information. - * - * @param wsdlInterface - * @param wsdl4jPortType - */ - //FIXME Evaluate a way of injecting features and priperties with a general - // formatted input - private void populateInterfaces(WSDLInterface wsdlInterface, - PortType wsdl4jPortType) { - - //Copy the Attrebute information items - //Copied with the Same QName so it will require no Query in Binding - //Coping. - wsdlInterface.setName(wsdl4jPortType.getQName()); - Iterator wsdl4JOperationsIterator = - wsdl4jPortType.getOperations().iterator(); - WSDLOperation wsdloperation; - Operation wsdl4jOperation; - while (wsdl4JOperationsIterator.hasNext()) { - wsdloperation = this.wsdlComponentFactory.createOperation(); - wsdl4jOperation = (Operation) wsdl4JOperationsIterator.next(); - this.populateOperations(wsdloperation, - wsdl4jOperation, - wsdl4jPortType.getQName().getNamespaceURI()); - this.copyExtensibleElements( - wsdl4jOperation.getExtensibilityElements(), wsdloperation, null); - wsdlInterface.setOperation(wsdloperation); - } - } - - /** - * Pre Condition: The Interface Components must be copied by now. - */ - private void populateBindings(WSDLBinding wsdlBinding, - Binding wsdl4JBinding, Definition wsdl4jDefinition) { - //Copy attributes - wsdlBinding.setName(wsdl4JBinding.getQName()); - QName interfaceName = wsdl4JBinding.getPortType().getQName(); - WSDLInterface wsdlInterface = - this.womDefinition.getInterface(interfaceName); - - //FIXME Do We need this eventually??? - if (null == wsdlInterface) - throw new WSDLProcessingException("Interface/PortType not found for the Binding :" - + wsdlBinding.getName()); - wsdlBinding.setBoundInterface(wsdlInterface); - Iterator bindingoperationsIterator = - wsdl4JBinding.getBindingOperations().iterator(); - WSDLBindingOperation wsdlBindingOperation; - BindingOperation wsdl4jBindingOperation; - while (bindingoperationsIterator.hasNext()) { - wsdlBindingOperation = - this.wsdlComponentFactory.createWSDLBindingOperation(); - wsdl4jBindingOperation = - (BindingOperation) bindingoperationsIterator.next(); - this.populateBindingOperation(wsdlBindingOperation, - wsdl4jBindingOperation, - wsdl4JBinding.getQName().getNamespaceURI(), wsdl4jDefinition); - wsdlBindingOperation.setOperation( - wsdlInterface.getOperation( - wsdl4jBindingOperation.getOperation().getName())); - this.copyExtensibleElements( - wsdl4jBindingOperation.getExtensibilityElements(), - wsdlBindingOperation, wsdl4jDefinition); - wsdlBinding.addBindingOperation(wsdlBindingOperation); - } - - } - - public void populateServices(WSDLService wsdlService, - Service wsdl4jService) { - wsdlService.setName(wsdl4jService.getQName()); - Iterator wsdl4jportsIterator = - wsdl4jService.getPorts().values().iterator(); - wsdlService.setServiceInterface(this.getBoundInterface(wsdlService)); - WSDLEndpoint wsdlEndpoint; - Port wsdl4jPort; - while (wsdl4jportsIterator.hasNext()) { - wsdlEndpoint = this.wsdlComponentFactory.createEndpoint(); - wsdl4jPort = (Port) wsdl4jportsIterator.next(); - this.populatePorts(wsdlEndpoint, - wsdl4jPort, - wsdl4jService.getQName().getNamespaceURI()); - this.copyExtensibleElements(wsdl4jPort.getExtensibilityElements(), - wsdlEndpoint, null); - wsdlService.setEndpoint(wsdlEndpoint); - } - - } - - private void pushSchemaElement(Schema originalSchema,Stack stack){ - if (originalSchema==null){ - return; - } - stack.push(originalSchema); - Map map = originalSchema.getImports(); - Collection values; - if (map!=null && map.size()>0){ - values = map.values(); - for (Iterator iterator = values.iterator(); iterator.hasNext();) { - //recursively add the schema's - Vector v = (Vector)iterator.next(); - for (int i = 0; i < v.size(); i++) { - pushSchemaElement(((SchemaImport)v.get(i)).getReferencedSchema(),stack); - } - - } - } - } - - ///////////////////////////////////////////////////////////////////////////// - //////////////////////////// Internal Component Copying /////////////////// - public void populateOperations(WSDLOperation wsdlOperation, - Operation wsdl4jOperation, - String nameSpaceOfTheOperation) { - //Copy Name Attrebute - wsdlOperation.setName(new QName(nameSpaceOfTheOperation, - wsdl4jOperation.getName())); - - //This code make no attempt to make use of the special xs:Token - //defined in the WSDL 2.0. eg like #any, #none - // Create the Input Message and add - Input wsdl4jInputMessage = wsdl4jOperation.getInput(); - - if (null != wsdl4jInputMessage) { - MessageReference wsdlInputMessage = this.wsdlComponentFactory - .createMessageReference(); - wsdlInputMessage.setDirection( - WSDLConstants.WSDL_MESSAGE_DIRECTION_IN); - wsdlInputMessage.setMessageLabel( - WSDLConstants.MESSAGE_LABEL_IN_VALUE); - - Message message = wsdl4jInputMessage.getMessage(); - if (null != message) { - wsdlInputMessage.setElement( - this.generateReferenceQname(message)); - this.copyExtensibleElements( - (message).getExtensibilityElements(), - wsdlInputMessage, null); - } - this.copyExtensibilityAttribute( - wsdl4jInputMessage.getExtensionAttributes(), - wsdlInputMessage); - wsdlOperation.setInputMessage(wsdlInputMessage); - } - - //Create an output message and add - Output wsdl4jOutputMessage = wsdl4jOperation.getOutput(); - if (null != wsdl4jOutputMessage) { - MessageReference wsdlOutputMessage = - this.wsdlComponentFactory.createMessageReference(); - wsdlOutputMessage.setDirection( - WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT); - wsdlOutputMessage.setMessageLabel( - WSDLConstants.MESSAGE_LABEL_OUT_VALUE); - - Message outputMessage = wsdl4jOutputMessage.getMessage(); - if (null != outputMessage) { - wsdlOutputMessage.setElement( - this.generateReferenceQname(outputMessage)); - this.copyExtensibleElements( - (outputMessage).getExtensibilityElements(), - wsdlOutputMessage, null); - } - this.copyExtensibilityAttribute( - wsdl4jOutputMessage.getExtensionAttributes(), - wsdlOutputMessage); - wsdlOperation.setOutputMessage(wsdlOutputMessage); - } - - Map faults = wsdl4jOperation.getFaults(); - Iterator faultKeyIterator = faults.keySet().iterator(); - WSDLFaultReference faultReference = null; - - while (faultKeyIterator.hasNext()) { - - Fault fault = (Fault) faults.get(faultKeyIterator.next()); - faultReference = wsdlComponentFactory.createFaultReference(); - faultReference.setDirection( - WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT); - Message faultMessage = fault.getMessage(); - if (null != faultMessage) { - faultReference.setRef( - this.generateReferenceQname(faultMessage)); - } - wsdlOperation.addOutFault(faultReference); - this.copyExtensibilityAttribute(fault.getExtensionAttributes(), - faultReference); - //TODO Fault Message lable - - } - - //Set the MEP - wsdlOperation.setMessageExchangePattern(WSDL11MEPFinder - .getMEP(wsdl4jOperation)); - - } - - private QName generateReferenceQname(Message wsdl4jMessage) { - QName referenceQName = null; - if (wsdl4jMessage.getParts().size() > 1) { - Map parts = wsdl4jMessage.getParts(); - Iterator i = parts.keySet().iterator(); - Part thisPart = (Part)(parts.get(i.next())); - if (thisPart.getElementName() != null) { - throw new RuntimeException( - "We don't support multiple element parts in a WSDL message"); - } - - // Multipart Message - - // NOTE (gdaniels) : It appears this code is taking multiple - // part declarations and "wrapping" them into a single schema - // type. This is fine for RPC style stuff, but should not be - // happening for document style. - // TODO : sanity check - - // Check whether this message parts have been made to a type - Iterator multipartListIterator = this.resolvedMultipartMessageList.iterator(); - boolean multipartAlreadyResolved = false; - while (multipartListIterator.hasNext() && - !multipartAlreadyResolved) { - QName temp = (QName) multipartListIterator.next(); - multipartAlreadyResolved = - wsdl4jMessage.getQName().equals(temp); - } - if (multipartAlreadyResolved) { - //This message with multiple parts has resolved and a new type has been - //made out of it earlier. - //FIXME Actual element name should it be xs:, if yes change the qname added to the - //resolvedmessage list too. - referenceQName = wsdl4jMessage.getQName(); - } else { - //Get the list of multiparts of the message and create a new Element - //out of it and add it to the schema. - Element schemaElement = null; - WSDLTypes types = womDefinition.getTypes(); - - //If types is null create a new one to be used for multipart - //resolution if any. - if (null == types) { - DocumentBuilder documentBuilder = null; - try { - documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new RuntimeException(e); - } - Document newDoc = documentBuilder.newDocument(); - - Element newSchemaElement = newDoc.createElementNS("http://www.w3.org/2001/XMLSchema", "schema"); - types = wsdlComponentFactory.createTypes(); - ExtensionFactory extensionFactory = wsdlComponentFactory.createExtensionFactory(); - org.apache.wsdl.extensions.Schema typesElement = (org.apache.wsdl.extensions.Schema) extensionFactory.getExtensionElement( - ExtensionConstants.SCHEMA); - typesElement.setElement(newSchemaElement); - types.addExtensibilityElement(typesElement); - this.womDefinition.setTypes(types); - } - - - // - Iterator schemaEIIterator = types.getExtensibilityElements() - .iterator(); - while (schemaEIIterator.hasNext()) { - WSDLExtensibilityElement temp = (WSDLExtensibilityElement) schemaEIIterator.next(); - if (ExtensionConstants.SCHEMA.equals(temp.getType())) { - schemaElement = - ((org.apache.wsdl.extensions.Schema) temp).getElement(); - break; - } - } - - schemaElement.setAttribute(WSDLPump.XMLNS_AXIS2WRAPPED, schemaElement.getAttribute(WSDLPump.XSD_TARGETNAMESPACE)); - Document doc = schemaElement.getOwnerDocument(); - String name = wsdl4jMessage.getQName().getLocalPart(); - Element newType = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_COMPLEXTYPE); - newType.setAttribute(WSDLPump.XSD_NAME, name); - - - Element cmplxContent = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_SEQUENCE); - Element child; - Element relaventElementInSchemaReferedByPart = null; - Iterator iterator = parts.keySet().iterator(); - while (iterator.hasNext()) { - Part part = (Part) parts.get(iterator.next()); - QName elementName = part.getElementName(); - if (null == elementName) { - elementName = part.getTypeName(); - } - - NodeList allSchemaElements = schemaElement.getChildNodes(); - for(int idx = 0; idx < allSchemaElements.getLength(); idx++){ - if(allSchemaElements.item(idx).getNodeType() == Node.ELEMENT_NODE && - allSchemaElements.item(idx).getLocalName().equals(WSDLPump.XSD_ELEMENT) - && elementName.getLocalPart().equals(((Element)allSchemaElements.item(idx)).getAttribute(WSDLPump.XSD_NAME))){ - relaventElementInSchemaReferedByPart = (Element)allSchemaElements.item(idx); - break; - } - } - child = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_ELEMENT); - child.setAttribute(WSDLPump.XSD_NAME, elementName.getLocalPart()); - if(null != relaventElementInSchemaReferedByPart){ - - - child.setAttribute(WSDLPump.XSD_TYPE, - relaventElementInSchemaReferedByPart.getAttribute(WSDLPump.XSD_TYPE)); - }else{ - child.setAttribute(WSDLPump.XSD_TYPE, elementName.getLocalPart()); - } - cmplxContent.appendChild(child); - - } - - - newType.appendChild(cmplxContent); - - schemaElement.appendChild(newType); - - - Element newElement = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_ELEMENT); - newElement.setAttribute(WSDLPump.XSD_NAME, - wsdl4jMessage.getQName().getLocalPart()); - newElement.setAttribute(WSDLPump.XSD_TYPE, - "axis2wrapped:"+wsdl4jMessage.getQName().getLocalPart()); - schemaElement.appendChild(newElement); - //Now since a new type is created augmenting the parts add the QName - //of the newly created type as the messageReference's name. - referenceQName = wsdl4jMessage.getQName(); - //Add this message as a resolved message, so that incase some other - //operation refer to the same message the if above will take a hit - //and the cashed QName can be used instead of creating another type - //for the same message. - - this.resolvedMultipartMessageList.add(wsdl4jMessage.getQName()); - - } - } 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(); - } - } - } - return referenceQName; - } - - private void populateBindingOperation( - WSDLBindingOperation wsdlBindingOperation, - BindingOperation wsdl4jBindingOperation, - String nameSpaceOfTheBindingOperation, Definition wsdl4jDefinition) { - - wsdlBindingOperation.setName( - new QName(nameSpaceOfTheBindingOperation, - wsdl4jBindingOperation.getName())); - - BindingInput wsdl4jInputBinding = - wsdl4jBindingOperation.getBindingInput(); - - if (null != wsdl4jInputBinding) { - WSDLBindingMessageReference wsdlInputBinding = - this.wsdlComponentFactory.createWSDLBindingMessageReference(); - wsdlInputBinding.setDirection( - WSDLConstants.WSDL_MESSAGE_DIRECTION_IN); - this.copyExtensibleElements( - wsdl4jInputBinding.getExtensibilityElements(), - wsdlInputBinding, wsdl4jDefinition); - wsdlBindingOperation.setInput(wsdlInputBinding); - } - - BindingOutput wsdl4jOutputBinding = wsdl4jBindingOperation - .getBindingOutput(); - if (null != wsdl4jOutputBinding) { - WSDLBindingMessageReference wsdlOutputBinding = this.wsdlComponentFactory - .createWSDLBindingMessageReference(); - wsdlOutputBinding.setDirection( - WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT); - - this.copyExtensibleElements( - wsdl4jOutputBinding.getExtensibilityElements(), - wsdlOutputBinding, null); - wsdlBindingOperation.setOutput(wsdlOutputBinding); - } - - - Map bindingFaults = wsdl4jBindingOperation.getBindingFaults(); - Iterator keyIterator = bindingFaults.keySet().iterator(); - while (keyIterator.hasNext()) { - BindingFault bindingFault = (BindingFault) bindingFaults.get( - keyIterator.next()); - WSDLBindingFault womBindingFault = this.wsdlComponentFactory.createBindingFault(); - this.copyExtensibleElements( - bindingFault.getExtensibilityElements(), womBindingFault, null); - wsdlBindingOperation.addOutFault(womBindingFault); - } - - } - - public void populatePorts(WSDLEndpoint wsdlEndpoint, Port wsdl4jPort, - String targetNamspace) { - wsdlEndpoint.setName(new QName(targetNamspace, wsdl4jPort.getName())); - - wsdlEndpoint.setBinding( - this.womDefinition.getBinding( - wsdl4jPort - .getBinding() - .getQName())); - - } - - /** - * This method will fill up the gap of WSDL 1.1 and WSDL 2.0 w.r.t. the - * bound interface for the Service Component Defined in the WSDL 2.0. Logic - * being if there exist only one PortType in the WSDL 1.1 file then that - * will be set as the bound interface of the Service. If more than one - * Porttype exist in the WSDl 1.1 file this will create a dummy Interface - * with the available PortTypes and will return that interface so that it - * will inherit all those interfaces. - *

- * Eventuall this will have to be fixed using user input since - * - * @param service - * @return wsdl interface - */ - private WSDLInterface getBoundInterface(WSDLService service) { - - // Throw an exception if there are no interfaces defined as at yet. - if (0 == this.womDefinition.getWsdlInterfaces().size()) - throw new WSDLProcessingException("There are no " - + - "Interfaces/PortTypes identified in the current partially built" - + "WOM"); - - //If there is only one Interface available hten return that because - // normally - // that interface must be the one to the service should get bound. - if (1 == this.womDefinition.getWsdlInterfaces().size()) - return (WSDLInterface) this.womDefinition.getWsdlInterfaces() - .values().iterator().next(); - - //If there are more than one interface available... For the time being - // create a - // new interface and set all those existing interfaces as - // superinterfaces of it - // and return. - WSDLInterface newBoundInterface = this.womDefinition.createInterface(); - newBoundInterface.setName( - new QName(service.getNamespace(), - service - .getName() - .getLocalPart() - + BOUND_INTERFACE_NAME)); - Iterator interfaceIterator = this.womDefinition.getWsdlInterfaces() - .values().iterator(); - while (interfaceIterator.hasNext()) { - newBoundInterface - .addSuperInterface( - (WSDLInterface) interfaceIterator.next()); - } - return newBoundInterface; - } - - /** - * Get the Extensible elements form wsdl4jExtensibleElements - * Vector if any and copy them to Component - * - - - @param wsdl4jExtensibleElements - * @param component - * @param wsdl4jDefinition - - */ - private void copyExtensibleElements(List wsdl4jExtensibleElements, - Component component, Definition wsdl4jDefinition) { - Iterator iterator = wsdl4jExtensibleElements.iterator(); - ExtensionFactory extensionFactory = this.wsdlComponentFactory - .createExtensionFactory(); - while (iterator.hasNext()) { - - ExtensibilityElement wsdl4jElement = (ExtensibilityElement) iterator - .next(); - - if (wsdl4jElement instanceof UnknownExtensibilityElement) { - UnknownExtensibilityElement unknown = (UnknownExtensibilityElement) (wsdl4jElement); - - //look for the SOAP 1.2 stuff here. WSDL4j does not understand SOAP 1.2 things - if (ExtensionConstants.SOAP_12_OPERATION.equals(unknown.getElementType())){ - org.apache.wsdl.extensions.SOAPOperation soapOperationExtensibiltyElement = (org.apache.wsdl.extensions.SOAPOperation) extensionFactory - .getExtensionElement(wsdl4jElement.getElementType()); - Element element = unknown.getElement(); - soapOperationExtensibiltyElement.setSoapAction(element.getAttribute("soapAction")); - soapOperationExtensibiltyElement.setStyle(element.getAttribute("style")); - // soapActionRequired - component.addExtensibilityElement(soapOperationExtensibiltyElement); - }else if (ExtensionConstants.SOAP_12_BODY.equals(unknown.getElementType())){ - org.apache.wsdl.extensions.SOAPBody soapBodyExtensibiltyElement = (org.apache.wsdl.extensions.SOAPBody) extensionFactory - .getExtensionElement(wsdl4jElement.getElementType()); - Element element = unknown.getElement(); - soapBodyExtensibiltyElement.setUse(element.getAttribute("use")); - soapBodyExtensibiltyElement.setNamespaceURI(element.getAttribute("namespace")); - //encoding style - component.addExtensibilityElement(soapBodyExtensibiltyElement); - }else if (ExtensionConstants.SOAP_12_HEADER.equals(unknown.getElementType())){ - org.apache.wsdl.extensions.SOAPHeader soapHeaderExtensibilityElement = (org.apache.wsdl.extensions.SOAPHeader) extensionFactory.getExtensionElement( - unknown.getElementType()); - //right now there's no known header binding!. Ignore the copying of values for now - component.addExtensibilityElement(soapHeaderExtensibilityElement); - }else if (ExtensionConstants.SOAP_12_BINDING.equals(unknown.getElementType())){ - org.apache.wsdl.extensions.SOAPBinding soapBindingExtensibiltyElement = (org.apache.wsdl.extensions.SOAPBinding) extensionFactory - .getExtensionElement(wsdl4jElement.getElementType()); - Element element = unknown.getElement(); - soapBindingExtensibiltyElement.setTransportURI(element.getAttribute("transport")); - soapBindingExtensibiltyElement.setStyle(element.getAttribute("style")); - - component.addExtensibilityElement(soapBindingExtensibiltyElement); - } else if (ExtensionConstants.SOAP_12_ADDRESS.equals(unknown.getElementType())){ - org.apache.wsdl.extensions.SOAPAddress soapAddressExtensibiltyElement = (org.apache.wsdl.extensions.SOAPAddress) extensionFactory - .getExtensionElement(wsdl4jElement.getElementType()); - Element element = unknown.getElement(); - soapAddressExtensibiltyElement.setLocationURI(element.getAttribute("location")); - component.addExtensibilityElement(soapAddressExtensibiltyElement); - }else{ - - DefaultExtensibilityElement defaultExtensibilityElement = (DefaultExtensibilityElement) extensionFactory - .getExtensionElement(wsdl4jElement.getElementType()); - defaultExtensibilityElement.setElement(unknown.getElement()); - Boolean required = unknown.getRequired(); - if (null != required) { - defaultExtensibilityElement.setRequired(required.booleanValue()); - } - component.addExtensibilityElement(defaultExtensibilityElement); - } - - - } else if (wsdl4jElement instanceof SOAPAddress) { - SOAPAddress soapAddress = (SOAPAddress) wsdl4jElement; - org.apache.wsdl.extensions.SOAPAddress soapAddressExtensibilityElement = (org.apache.wsdl.extensions.SOAPAddress) extensionFactory - .getExtensionElement(soapAddress.getElementType()); - soapAddressExtensibilityElement.setLocationURI(soapAddress - .getLocationURI()); - Boolean required = soapAddress.getRequired(); - if (null != required) { - soapAddressExtensibilityElement.setRequired(required.booleanValue()); - } - component.addExtensibilityElement(soapAddressExtensibilityElement); - } else if (wsdl4jElement instanceof Schema) { - Schema schema = (Schema) wsdl4jElement; - //schema.getDocumentBaseURI() - //populate the imported schema stack - Stack schemaStack = new Stack(); - //recursivly load the schema elements. The best thing is to push these into - //a stack and then pop from the other side - pushSchemaElement(schema, schemaStack); - org.apache.wsdl.extensions.Schema schemaExtensibilityElement = (org.apache.wsdl.extensions.Schema) extensionFactory.getExtensionElement( - schema.getElementType()); - schemaExtensibilityElement.setElement(schema.getElement()); - schemaExtensibilityElement.setImportedSchemaStack(schemaStack); - Boolean required = schema.getRequired(); - if (null != required) { - schemaExtensibilityElement.setRequired(required.booleanValue()); - } - //set the name of this Schema element - //todo this needs to be fixed - if(schema.getDocumentBaseURI() != null) { - schemaExtensibilityElement.setName(new QName("",schema.getDocumentBaseURI())); - } - component.addExtensibilityElement(schemaExtensibilityElement); - } else if (SOAPConstants.Q_ELEM_SOAP_OPERATION.equals( - wsdl4jElement.getElementType())) { - SOAPOperation soapOperation = (SOAPOperation) wsdl4jElement; - org.apache.wsdl.extensions.SOAPOperation soapOperationextensibilityElement = (org.apache.wsdl.extensions.SOAPOperation) extensionFactory.getExtensionElement( - soapOperation.getElementType()); - soapOperationextensibilityElement.setSoapAction( - soapOperation.getSoapActionURI()); - soapOperationextensibilityElement.setStyle(soapOperation.getStyle()); - Boolean required = soapOperation.getRequired(); - if (null != required) { - soapOperationextensibilityElement.setRequired(required.booleanValue()); - } - component.addExtensibilityElement(soapOperationextensibilityElement); - } else if (SOAPConstants.Q_ELEM_SOAP_BODY.equals( - wsdl4jElement.getElementType())) { - SOAPBody soapBody = (SOAPBody) wsdl4jElement; - org.apache.wsdl.extensions.SOAPBody soapBodyExtensibilityElement = (org.apache.wsdl.extensions.SOAPBody) extensionFactory.getExtensionElement( - soapBody.getElementType()); - soapBodyExtensibilityElement.setNamespaceURI( - soapBody.getNamespaceURI()); - soapBodyExtensibilityElement.setUse(soapBody.getUse()); - Boolean required = soapBody.getRequired(); - if (null != required) { - soapBodyExtensibilityElement.setRequired(required.booleanValue()); - } - - component.addExtensibilityElement(soapBodyExtensibilityElement); - //add the header - } else if (SOAPConstants.Q_ELEM_SOAP_HEADER.equals( - wsdl4jElement.getElementType())) { - SOAPHeader soapHeader = (SOAPHeader) wsdl4jElement; - org.apache.wsdl.extensions.SOAPHeader soapHeaderExtensibilityElement = (org.apache.wsdl.extensions.SOAPHeader) extensionFactory.getExtensionElement( - soapHeader.getElementType()); - soapHeaderExtensibilityElement.setNamespaceURI( - soapHeader.getNamespaceURI()); - soapHeaderExtensibilityElement.setUse(soapHeader.getUse()); - Boolean required = soapHeader.getRequired(); - if (null != required) { - soapHeaderExtensibilityElement.setRequired(required.booleanValue()); - } - if (null!=wsdl4jDefinition){ - //find the relevant schema part from the messages - Message msg = wsdl4jDefinition.getMessage(soapHeader.getMessage()); - Part msgPart = msg.getPart(soapHeader.getPart()); - soapHeaderExtensibilityElement.setElement(msgPart.getElementName()); - } -// msgPart. - soapHeaderExtensibilityElement.setMessage(soapHeader.getMessage()); - - soapHeaderExtensibilityElement.setPart(soapHeader.getPart()); - soapHeader.getMessage(); - component.addExtensibilityElement(soapHeaderExtensibilityElement); - } else if (SOAPConstants.Q_ELEM_SOAP_BINDING.equals( - wsdl4jElement.getElementType())) { - SOAPBinding soapBinding = (SOAPBinding) wsdl4jElement; - org.apache.wsdl.extensions.SOAPBinding soapBindingExtensibilityElement = (org.apache.wsdl.extensions.SOAPBinding) extensionFactory.getExtensionElement( - soapBinding.getElementType()); - soapBindingExtensibilityElement.setTransportURI( - soapBinding.getTransportURI()); - soapBindingExtensibilityElement.setStyle(soapBinding.getStyle()); - Boolean required = soapBinding.getRequired(); - if (null != required) { - soapBindingExtensibilityElement.setRequired(required.booleanValue()); - } - component.addExtensibilityElement(soapBindingExtensibilityElement); - } else { - // throw new AxisError( -// "An Extensible item "+wsdl4jElement.getElementType()+" went unparsed during WSDL Parsing"); - - } - } - } - - /** - * Get the Extensible Attributes from wsdl4jExtensibilityAttribute - * Map if any and copy them to the Component - * - * @param wsdl4jExtensibilityAttributes - * @param component - */ - private void copyExtensibilityAttribute(Map wsdl4jExtensibilityAttributes, - Component component) { - Iterator iterator = wsdl4jExtensibilityAttributes.keySet().iterator(); - while (iterator.hasNext()) { - QName attributeName = (QName) iterator.next(); - QName value = (QName) wsdl4jExtensibilityAttributes - .get(attributeName); - WSDLExtensibilityAttribute attribute = this.wsdlComponentFactory - .createWSDLExtensibilityAttribute(); - attribute.setKey(attributeName); - attribute.setValue(value); - component.addExtensibleAttributes(attribute); - } - } -} +/* +* Copyright 2001-2004 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. +*/ +package org.apache.axis2.wsdl.builder.wsdl4j; + +import com.ibm.wsdl.extensions.soap.SOAPConstants; +import org.apache.axis2.wsdl.builder.WSDLComponentFactory; +import org.apache.wsdl.*; +import org.apache.wsdl.extensions.ExtensionConstants; +import org.apache.wsdl.extensions.ExtensionFactory; +import org.apache.wsdl.extensions.DefaultExtensibilityElement; +import org.apache.wsdl.impl.WSDLProcessingException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.wsdl.*; +import javax.wsdl.extensions.ExtensibilityElement; +import javax.wsdl.extensions.UnknownExtensibilityElement; +import javax.wsdl.extensions.schema.Schema; +import javax.wsdl.extensions.schema.SchemaImport; +import javax.wsdl.extensions.soap.*; +import javax.xml.namespace.QName; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.util.*; + +/** + * @author chathura@opensource.lk + */ +public class WSDLPump { + + private static final String XSD_TYPE = "type"; + private static final String XSD_SEQUENCE = "sequence"; + private static final String XSD_NAME = "name"; + private static final String XSD_COMPLEXTYPE = "complexType"; + private static final String XSD_TARGETNAMESPACE = "targetNamespace"; + private static final String XMLNS_AXIS2WRAPPED = "xmlns:axis2wrapped"; + private static final String NAMESPACE_XMLSCHEMA = "http://www.w3.org/2001/XMLSchema"; + private static final String XSD_ELEMENT = "element"; + private static final String BOUND_INTERFACE_NAME = "BoundInterface"; + + private WSDLDescription womDefinition; + + private Definition wsdl4jParsedDefinition; + + private WSDLComponentFactory wsdlComponentFactory; + + + private List resolvedMultipartMessageList = new LinkedList(); + + public WSDLPump(WSDLDescription womDefinition, + Definition wsdl4jParsedDefinition) { + this(womDefinition, wsdl4jParsedDefinition, womDefinition); + } + + public WSDLPump(WSDLDescription womDefinition, + Definition wsdl4jParsedDefinition, + WSDLComponentFactory wsdlComponentFactory) { + this.womDefinition = womDefinition; + this.wsdl4jParsedDefinition = wsdl4jParsedDefinition; + this.wsdlComponentFactory = wsdlComponentFactory; + } + + public void pump() { + if (null != this.wsdl4jParsedDefinition && null != this.womDefinition) { + this.populateDefinition(this.womDefinition, + this.wsdl4jParsedDefinition); + } else { + throw new WSDLProcessingException("Properties not set properly"); + } + + } + + private void populateDefinition(WSDLDescription wsdlDefinition, + Definition wsdl4JDefinition) { + //Go through the WSDL4J Definition and pump it to the WOM + wsdlDefinition.setWSDL1DefinitionName(wsdl4JDefinition.getQName()); + wsdlDefinition + .setTargetNameSpace(wsdl4JDefinition.getTargetNamespace()); + wsdlDefinition.setNamespaces(wsdl4JDefinition.getNamespaces()); + this.copyExtensibleElements( + wsdl4JDefinition.getExtensibilityElements(), wsdlDefinition, null); + + ///////////////////////////////////////////////////////////////////// + // Order of the following items shouldn't be changed unless you // + // really know what you are doing. Reason being the components that // + // are copied(pumped) towards the end depend on the components that // + // has already being pumped. Following Lists some of the // + // dependencies. // + //1) The Binding refers to the Interface // + //2) The Endpoint refers to the Bindings // + // .... // + // // + ////////////////////////////////////////////////////////////////////// + + //////////////////(1)First Copy the Types///////////////////////////// + //Types may get changed inside the Operation pumping. + + Types wsdl4jTypes = wsdl4JDefinition.getTypes(); + WSDLTypes wsdlTypes = null; + if (null != wsdl4jTypes) { + wsdlTypes = this.wsdlComponentFactory.createTypes(); + this.copyExtensibleElements(wsdl4jTypes.getExtensibilityElements(), + wsdlTypes, null); + this.womDefinition.setTypes(wsdlTypes); + } + + + // There can be types that are imported. Check the imports and + // These schemas are needed for code generation + + Map wsdlImports = wsdl4JDefinition.getImports(); + + if (null != wsdlImports && !wsdlImports.isEmpty()){ + Collection importsCollection = wsdlImports.values(); + for (Iterator iterator = importsCollection.iterator(); iterator.hasNext();) { + Vector values = (Vector)iterator.next(); + for (int i = 0; i < values.size(); i++) { + Import wsdlImport = (Import)values.elementAt(i); + + if (wsdlImport.getDefinition()!=null){ + Definition importedDef = wsdlImport.getDefinition(); + + if (wsdlTypes==null){ + wsdlTypes = this.wsdlComponentFactory.createTypes(); + } + //add the imported types + this.copyExtensibleElements(importedDef.getTypes(). + getExtensibilityElements(), + wsdlTypes, null); + this.womDefinition.setTypes(wsdlTypes); + } + } + + } + } + ///////////////////(2)Copy the Interfaces/////////////////////////// + //copy the Interfaces: Get the PortTypes from WSDL4J parse OM and + // copy it to the + //WOM's WSDLInterface Components + + Iterator portTypeIterator = wsdl4JDefinition.getPortTypes().values() + .iterator(); + WSDLInterface wsdlInterface; + PortType portType; + while (portTypeIterator.hasNext()) { + wsdlInterface = this.wsdlComponentFactory.createInterface(); + portType = (PortType) portTypeIterator.next(); + this.populateInterfaces(wsdlInterface, portType); + this.copyExtensibilityAttribute(portType.getExtensionAttributes(), + wsdlInterface); + wsdlDefinition.addInterface(wsdlInterface); + } + + //////////////////(3)Copy the Bindings/////////////////////// + //pump the Bindings: Get the Bindings map from WSDL4J and create a new + // map of WSDLBinding elements. At this point we need to do some extra work since there + //can be header parameters + + Iterator bindingIterator = wsdl4JDefinition.getBindings().values() + .iterator(); + WSDLBinding wsdlBinding; + Binding wsdl4jBinding; + while (bindingIterator.hasNext()) { + wsdlBinding = this.wsdlComponentFactory.createBinding(); + wsdl4jBinding = (Binding) bindingIterator.next(); + this.populateBindings(wsdlBinding, wsdl4jBinding, wsdl4JDefinition); + this.copyExtensibleElements( + wsdl4jBinding.getExtensibilityElements(), + wsdlBinding, null); + wsdlDefinition.addBinding(wsdlBinding); + + } + + ///////////////////(4)Copy the Services/////////////////////////////// + + Iterator serviceIterator = wsdl4JDefinition.getServices().values() + .iterator(); + WSDLService wsdlService; + Service wsdl4jService; + while (serviceIterator.hasNext()) { + wsdlService = this.wsdlComponentFactory.createService(); + wsdl4jService = (Service) serviceIterator.next(); + this.populateServices(wsdlService, wsdl4jService); + this.copyExtensibleElements( + wsdl4jService.getExtensibilityElements(), + wsdlService, null); + wsdlDefinition.addService(wsdlService); + } + + } + + ////////////////////////////////////////////////////////////////////////////// + ////////////////////////// Top level Components Copying + // //////////////////// + + /** + * Simply Copy information. + * + * @param wsdlInterface + * @param wsdl4jPortType + */ + //FIXME Evaluate a way of injecting features and priperties with a general + // formatted input + private void populateInterfaces(WSDLInterface wsdlInterface, + PortType wsdl4jPortType) { + + //Copy the Attrebute information items + //Copied with the Same QName so it will require no Query in Binding + //Coping. + wsdlInterface.setName(wsdl4jPortType.getQName()); + Iterator wsdl4JOperationsIterator = + wsdl4jPortType.getOperations().iterator(); + WSDLOperation wsdloperation; + Operation wsdl4jOperation; + while (wsdl4JOperationsIterator.hasNext()) { + wsdloperation = this.wsdlComponentFactory.createOperation(); + wsdl4jOperation = (Operation) wsdl4JOperationsIterator.next(); + this.populateOperations(wsdloperation, + wsdl4jOperation, + wsdl4jPortType.getQName().getNamespaceURI()); + this.copyExtensibleElements( + wsdl4jOperation.getExtensibilityElements(), wsdloperation, null); + wsdlInterface.setOperation(wsdloperation); + } + } + + /** + * Pre Condition: The Interface Components must be copied by now. + */ + private void populateBindings(WSDLBinding wsdlBinding, + Binding wsdl4JBinding, Definition wsdl4jDefinition) { + //Copy attributes + wsdlBinding.setName(wsdl4JBinding.getQName()); + QName interfaceName = wsdl4JBinding.getPortType().getQName(); + WSDLInterface wsdlInterface = + this.womDefinition.getInterface(interfaceName); + + //FIXME Do We need this eventually??? + if (null == wsdlInterface) + throw new WSDLProcessingException("Interface/PortType not found for the Binding :" + + wsdlBinding.getName()); + wsdlBinding.setBoundInterface(wsdlInterface); + Iterator bindingoperationsIterator = + wsdl4JBinding.getBindingOperations().iterator(); + WSDLBindingOperation wsdlBindingOperation; + BindingOperation wsdl4jBindingOperation; + while (bindingoperationsIterator.hasNext()) { + wsdlBindingOperation = + this.wsdlComponentFactory.createWSDLBindingOperation(); + wsdl4jBindingOperation = + (BindingOperation) bindingoperationsIterator.next(); + this.populateBindingOperation(wsdlBindingOperation, + wsdl4jBindingOperation, + wsdl4JBinding.getQName().getNamespaceURI(), wsdl4jDefinition); + wsdlBindingOperation.setOperation( + wsdlInterface.getOperation( + wsdl4jBindingOperation.getOperation().getName())); + this.copyExtensibleElements( + wsdl4jBindingOperation.getExtensibilityElements(), + wsdlBindingOperation, wsdl4jDefinition); + wsdlBinding.addBindingOperation(wsdlBindingOperation); + } + + } + + public void populateServices(WSDLService wsdlService, + Service wsdl4jService) { + wsdlService.setName(wsdl4jService.getQName()); + Iterator wsdl4jportsIterator = + wsdl4jService.getPorts().values().iterator(); + wsdlService.setServiceInterface(this.getBoundInterface(wsdlService)); + WSDLEndpoint wsdlEndpoint; + Port wsdl4jPort; + while (wsdl4jportsIterator.hasNext()) { + wsdlEndpoint = this.wsdlComponentFactory.createEndpoint(); + wsdl4jPort = (Port) wsdl4jportsIterator.next(); + this.populatePorts(wsdlEndpoint, + wsdl4jPort, + wsdl4jService.getQName().getNamespaceURI()); + this.copyExtensibleElements(wsdl4jPort.getExtensibilityElements(), + wsdlEndpoint, null); + wsdlService.setEndpoint(wsdlEndpoint); + } + + } + + private void pushSchemaElement(Schema originalSchema,Stack stack){ + if (originalSchema==null){ + return; + } + stack.push(originalSchema); + Map map = originalSchema.getImports(); + Collection values; + if (map!=null && map.size()>0){ + values = map.values(); + for (Iterator iterator = values.iterator(); iterator.hasNext();) { + //recursively add the schema's + Vector v = (Vector)iterator.next(); + for (int i = 0; i < v.size(); i++) { + pushSchemaElement(((SchemaImport)v.get(i)).getReferencedSchema(),stack); + } + + } + } + } + + ///////////////////////////////////////////////////////////////////////////// + //////////////////////////// Internal Component Copying /////////////////// + public void populateOperations(WSDLOperation wsdlOperation, + Operation wsdl4jOperation, + String nameSpaceOfTheOperation) { + //Copy Name Attrebute + wsdlOperation.setName(new QName(nameSpaceOfTheOperation, + wsdl4jOperation.getName())); + + //This code make no attempt to make use of the special xs:Token + //defined in the WSDL 2.0. eg like #any, #none + // Create the Input Message and add + Input wsdl4jInputMessage = wsdl4jOperation.getInput(); + + if (null != wsdl4jInputMessage) { + MessageReference wsdlInputMessage = this.wsdlComponentFactory + .createMessageReference(); + wsdlInputMessage.setDirection( + WSDLConstants.WSDL_MESSAGE_DIRECTION_IN); + wsdlInputMessage.setMessageLabel( + WSDLConstants.MESSAGE_LABEL_IN_VALUE); + + Message message = wsdl4jInputMessage.getMessage(); + if (null != message) { + wsdlInputMessage.setElement( + this.generateReferenceQname(message)); + this.copyExtensibleElements( + (message).getExtensibilityElements(), + wsdlInputMessage, null); + } + this.copyExtensibilityAttribute( + wsdl4jInputMessage.getExtensionAttributes(), + wsdlInputMessage); + wsdlOperation.setInputMessage(wsdlInputMessage); + } + + //Create an output message and add + Output wsdl4jOutputMessage = wsdl4jOperation.getOutput(); + if (null != wsdl4jOutputMessage) { + MessageReference wsdlOutputMessage = + this.wsdlComponentFactory.createMessageReference(); + wsdlOutputMessage.setDirection( + WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT); + wsdlOutputMessage.setMessageLabel( + WSDLConstants.MESSAGE_LABEL_OUT_VALUE); + + Message outputMessage = wsdl4jOutputMessage.getMessage(); + if (null != outputMessage) { + wsdlOutputMessage.setElement( + this.generateReferenceQname(outputMessage)); + this.copyExtensibleElements( + (outputMessage).getExtensibilityElements(), + wsdlOutputMessage, null); + } + this.copyExtensibilityAttribute( + wsdl4jOutputMessage.getExtensionAttributes(), + wsdlOutputMessage); + wsdlOperation.setOutputMessage(wsdlOutputMessage); + } + + Map faults = wsdl4jOperation.getFaults(); + Iterator faultKeyIterator = faults.keySet().iterator(); + WSDLFaultReference faultReference = null; + + while (faultKeyIterator.hasNext()) { + + Fault fault = (Fault) faults.get(faultKeyIterator.next()); + faultReference = wsdlComponentFactory.createFaultReference(); + faultReference.setDirection( + WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT); + Message faultMessage = fault.getMessage(); + if (null != faultMessage) { + faultReference.setRef( + this.generateReferenceQname(faultMessage)); + } + wsdlOperation.addOutFault(faultReference); + this.copyExtensibilityAttribute(fault.getExtensionAttributes(), + faultReference); + //TODO Fault Message lable + + } + + //Set the MEP + wsdlOperation.setMessageExchangePattern(WSDL11MEPFinder + .getMEP(wsdl4jOperation)); + + } + + private QName generateReferenceQname(Message wsdl4jMessage) { + QName referenceQName = null; + if (wsdl4jMessage.getParts().size() > 1) { + Map parts = wsdl4jMessage.getParts(); + Iterator i = parts.keySet().iterator(); + Part thisPart = (Part)(parts.get(i.next())); + if (thisPart.getElementName() != null) { + throw new RuntimeException( + "We don't support multiple element parts in a WSDL message"); + } + + // Multipart Message + + // NOTE (gdaniels) : It appears this code is taking multiple + // part declarations and "wrapping" them into a single schema + // type. This is fine for RPC style stuff, but should not be + // happening for document style. + // TODO : sanity check + + // Check whether this message parts have been made to a type + Iterator multipartListIterator = this.resolvedMultipartMessageList.iterator(); + boolean multipartAlreadyResolved = false; + while (multipartListIterator.hasNext() && + !multipartAlreadyResolved) { + QName temp = (QName) multipartListIterator.next(); + multipartAlreadyResolved = + wsdl4jMessage.getQName().equals(temp); + } + if (multipartAlreadyResolved) { + //This message with multiple parts has resolved and a new type has been + //made out of it earlier. + //FIXME Actual element name should it be xs:, if yes change the qname added to the + //resolvedmessage list too. + referenceQName = wsdl4jMessage.getQName(); + } else { + //Get the list of multiparts of the message and create a new Element + //out of it and add it to the schema. + Element schemaElement = null; + WSDLTypes types = womDefinition.getTypes(); + + //If types is null create a new one to be used for multipart + //resolution if any. + if (null == types) { + DocumentBuilder documentBuilder = null; + try { + documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + } catch (ParserConfigurationException e) { + throw new RuntimeException(e); + } + Document newDoc = documentBuilder.newDocument(); + + Element newSchemaElement = newDoc.createElementNS("http://www.w3.org/2001/XMLSchema", "schema"); + types = wsdlComponentFactory.createTypes(); + ExtensionFactory extensionFactory = wsdlComponentFactory.createExtensionFactory(); + org.apache.wsdl.extensions.Schema typesElement = (org.apache.wsdl.extensions.Schema) extensionFactory.getExtensionElement( + ExtensionConstants.SCHEMA); + typesElement.setElement(newSchemaElement); + types.addExtensibilityElement(typesElement); + this.womDefinition.setTypes(types); + } + + + // + Iterator schemaEIIterator = types.getExtensibilityElements() + .iterator(); + while (schemaEIIterator.hasNext()) { + WSDLExtensibilityElement temp = (WSDLExtensibilityElement) schemaEIIterator.next(); + if (ExtensionConstants.SCHEMA.equals(temp.getType())) { + schemaElement = + ((org.apache.wsdl.extensions.Schema) temp).getElement(); + break; + } + } + + schemaElement.setAttribute(WSDLPump.XMLNS_AXIS2WRAPPED, schemaElement.getAttribute(WSDLPump.XSD_TARGETNAMESPACE)); + Document doc = schemaElement.getOwnerDocument(); + String name = wsdl4jMessage.getQName().getLocalPart(); + Element newType = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_COMPLEXTYPE); + newType.setAttribute(WSDLPump.XSD_NAME, name); + + + Element cmplxContent = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_SEQUENCE); + Element child; + Element relaventElementInSchemaReferedByPart = null; + Iterator iterator = parts.keySet().iterator(); + while (iterator.hasNext()) { + Part part = (Part) parts.get(iterator.next()); + QName elementName = part.getElementName(); + if (null == elementName) { + elementName = part.getTypeName(); + } + + NodeList allSchemaElements = schemaElement.getChildNodes(); + for(int idx = 0; idx < allSchemaElements.getLength(); idx++){ + if(allSchemaElements.item(idx).getNodeType() == Node.ELEMENT_NODE && + allSchemaElements.item(idx).getLocalName().equals(WSDLPump.XSD_ELEMENT) + && elementName.getLocalPart().equals(((Element)allSchemaElements.item(idx)).getAttribute(WSDLPump.XSD_NAME))){ + relaventElementInSchemaReferedByPart = (Element)allSchemaElements.item(idx); + break; + } + } + child = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_ELEMENT); + child.setAttribute(WSDLPump.XSD_NAME, elementName.getLocalPart()); + if(null != relaventElementInSchemaReferedByPart){ + + + child.setAttribute(WSDLPump.XSD_TYPE, + relaventElementInSchemaReferedByPart.getAttribute(WSDLPump.XSD_TYPE)); + }else{ + child.setAttribute(WSDLPump.XSD_TYPE, elementName.getLocalPart()); + } + cmplxContent.appendChild(child); + + } + + + newType.appendChild(cmplxContent); + + schemaElement.appendChild(newType); + + + Element newElement = doc.createElementNS(WSDLPump.NAMESPACE_XMLSCHEMA, WSDLPump.XSD_ELEMENT); + newElement.setAttribute(WSDLPump.XSD_NAME, + wsdl4jMessage.getQName().getLocalPart()); + newElement.setAttribute(WSDLPump.XSD_TYPE, + "axis2wrapped:"+wsdl4jMessage.getQName().getLocalPart()); + schemaElement.appendChild(newElement); + //Now since a new type is created augmenting the parts add the QName + //of the newly created type as the messageReference's name. + referenceQName = wsdl4jMessage.getQName(); + //Add this message as a resolved message, so that incase some other + //operation refer to the same message the if above will take a hit + //and the cashed QName can be used instead of creating another type + //for the same message. + + this.resolvedMultipartMessageList.add(wsdl4jMessage.getQName()); + + } + } 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(); + } + } + } + return referenceQName; + } + + private void populateBindingOperation( + WSDLBindingOperation wsdlBindingOperation, + BindingOperation wsdl4jBindingOperation, + String nameSpaceOfTheBindingOperation, Definition wsdl4jDefinition) { + + wsdlBindingOperation.setName( + new QName(nameSpaceOfTheBindingOperation, + wsdl4jBindingOperation.getName())); + + BindingInput wsdl4jInputBinding = + wsdl4jBindingOperation.getBindingInput(); + + if (null != wsdl4jInputBinding) { + WSDLBindingMessageReference wsdlInputBinding = + this.wsdlComponentFactory.createWSDLBindingMessageReference(); + wsdlInputBinding.setDirection( + WSDLConstants.WSDL_MESSAGE_DIRECTION_IN); + this.copyExtensibleElements( + wsdl4jInputBinding.getExtensibilityElements(), + wsdlInputBinding, wsdl4jDefinition); + wsdlBindingOperation.setInput(wsdlInputBinding); + } + + BindingOutput wsdl4jOutputBinding = wsdl4jBindingOperation + .getBindingOutput(); + if (null != wsdl4jOutputBinding) { + WSDLBindingMessageReference wsdlOutputBinding = this.wsdlComponentFactory + .createWSDLBindingMessageReference(); + wsdlOutputBinding.setDirection( + WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT); + + this.copyExtensibleElements( + wsdl4jOutputBinding.getExtensibilityElements(), + wsdlOutputBinding, null); + wsdlBindingOperation.setOutput(wsdlOutputBinding); + } + + + Map bindingFaults = wsdl4jBindingOperation.getBindingFaults(); + Iterator keyIterator = bindingFaults.keySet().iterator(); + while (keyIterator.hasNext()) { + BindingFault bindingFault = (BindingFault) bindingFaults.get( + keyIterator.next()); + WSDLBindingFault womBindingFault = this.wsdlComponentFactory.createBindingFault(); + this.copyExtensibleElements( + bindingFault.getExtensibilityElements(), womBindingFault, null); + wsdlBindingOperation.addOutFault(womBindingFault); + } + + } + + public void populatePorts(WSDLEndpoint wsdlEndpoint, Port wsdl4jPort, + String targetNamspace) { + wsdlEndpoint.setName(new QName(targetNamspace, wsdl4jPort.getName())); + + wsdlEndpoint.setBinding( + this.womDefinition.getBinding( + wsdl4jPort + .getBinding() + .getQName())); + + } + + /** + * This method will fill up the gap of WSDL 1.1 and WSDL 2.0 w.r.t. the + * bound interface for the Service Component Defined in the WSDL 2.0. Logic + * being if there exist only one PortType in the WSDL 1.1 file then that + * will be set as the bound interface of the Service. If more than one + * Porttype exist in the WSDl 1.1 file this will create a dummy Interface + * with the available PortTypes and will return that interface so that it + * will inherit all those interfaces. + *

+ * Eventuall this will have to be fixed using user input since + * + * @param service + * @return wsdl interface + */ + private WSDLInterface getBoundInterface(WSDLService service) { + + // Throw an exception if there are no interfaces defined as at yet. + if (0 == this.womDefinition.getWsdlInterfaces().size()) + throw new WSDLProcessingException("There are no " + + + "Interfaces/PortTypes identified in the current partially built" + + "WOM"); + + //If there is only one Interface available hten return that because + // normally + // that interface must be the one to the service should get bound. + if (1 == this.womDefinition.getWsdlInterfaces().size()) + return (WSDLInterface) this.womDefinition.getWsdlInterfaces() + .values().iterator().next(); + + //If there are more than one interface available... For the time being + // create a + // new interface and set all those existing interfaces as + // superinterfaces of it + // and return. + WSDLInterface newBoundInterface = this.womDefinition.createInterface(); + newBoundInterface.setName( + new QName(service.getNamespace(), + service + .getName() + .getLocalPart() + + BOUND_INTERFACE_NAME)); + Iterator interfaceIterator = this.womDefinition.getWsdlInterfaces() + .values().iterator(); + while (interfaceIterator.hasNext()) { + newBoundInterface + .addSuperInterface( + (WSDLInterface) interfaceIterator.next()); + } + return newBoundInterface; + } + + /** + * Get the Extensible elements form wsdl4jExtensibleElements + * Vector if any and copy them to Component + * + + + @param wsdl4jExtensibleElements + * @param component + * @param wsdl4jDefinition + + */ + private void copyExtensibleElements(List wsdl4jExtensibleElements, + Component component, Definition wsdl4jDefinition) { + Iterator iterator = wsdl4jExtensibleElements.iterator(); + ExtensionFactory extensionFactory = this.wsdlComponentFactory + .createExtensionFactory(); + while (iterator.hasNext()) { + + ExtensibilityElement wsdl4jElement = (ExtensibilityElement) iterator + .next(); + + if (wsdl4jElement instanceof UnknownExtensibilityElement) { + UnknownExtensibilityElement unknown = (UnknownExtensibilityElement) (wsdl4jElement); + + //look for the SOAP 1.2 stuff here. WSDL4j does not understand SOAP 1.2 things + if (ExtensionConstants.SOAP_12_OPERATION.equals(unknown.getElementType())){ + org.apache.wsdl.extensions.SOAPOperation soapOperationExtensibiltyElement = (org.apache.wsdl.extensions.SOAPOperation) extensionFactory + .getExtensionElement(wsdl4jElement.getElementType()); + Element element = unknown.getElement(); + soapOperationExtensibiltyElement.setSoapAction(element.getAttribute("soapAction")); + soapOperationExtensibiltyElement.setStyle(element.getAttribute("style")); + // soapActionRequired + component.addExtensibilityElement(soapOperationExtensibiltyElement); + }else if (ExtensionConstants.SOAP_12_BODY.equals(unknown.getElementType())){ + org.apache.wsdl.extensions.SOAPBody soapBodyExtensibiltyElement = (org.apache.wsdl.extensions.SOAPBody) extensionFactory + .getExtensionElement(wsdl4jElement.getElementType()); + Element element = unknown.getElement(); + soapBodyExtensibiltyElement.setUse(element.getAttribute("use")); + soapBodyExtensibiltyElement.setNamespaceURI(element.getAttribute("namespace")); + //encoding style + component.addExtensibilityElement(soapBodyExtensibiltyElement); + }else if (ExtensionConstants.SOAP_12_HEADER.equals(unknown.getElementType())){ + org.apache.wsdl.extensions.SOAPHeader soapHeaderExtensibilityElement = (org.apache.wsdl.extensions.SOAPHeader) extensionFactory.getExtensionElement( + unknown.getElementType()); + //right now there's no known header binding!. Ignore the copying of values for now + component.addExtensibilityElement(soapHeaderExtensibilityElement); + }else if (ExtensionConstants.SOAP_12_BINDING.equals(unknown.getElementType())){ + org.apache.wsdl.extensions.SOAPBinding soapBindingExtensibiltyElement = (org.apache.wsdl.extensions.SOAPBinding) extensionFactory + .getExtensionElement(wsdl4jElement.getElementType()); + Element element = unknown.getElement(); + soapBindingExtensibiltyElement.setTransportURI(element.getAttribute("transport")); + soapBindingExtensibiltyElement.setStyle(element.getAttribute("style")); + + component.addExtensibilityElement(soapBindingExtensibiltyElement); + } else if (ExtensionConstants.SOAP_12_ADDRESS.equals(unknown.getElementType())){ + org.apache.wsdl.extensions.SOAPAddress soapAddressExtensibiltyElement = (org.apache.wsdl.extensions.SOAPAddress) extensionFactory + .getExtensionElement(wsdl4jElement.getElementType()); + Element element = unknown.getElement(); + soapAddressExtensibiltyElement.setLocationURI(element.getAttribute("location")); + component.addExtensibilityElement(soapAddressExtensibiltyElement); + }else{ + + DefaultExtensibilityElement defaultExtensibilityElement = (DefaultExtensibilityElement) extensionFactory + .getExtensionElement(wsdl4jElement.getElementType()); + defaultExtensibilityElement.setElement(unknown.getElement()); + Boolean required = unknown.getRequired(); + if (null != required) { + defaultExtensibilityElement.setRequired(required.booleanValue()); + } + component.addExtensibilityElement(defaultExtensibilityElement); + } + + + } else if (wsdl4jElement instanceof SOAPAddress) { + SOAPAddress soapAddress = (SOAPAddress) wsdl4jElement; + org.apache.wsdl.extensions.SOAPAddress soapAddressExtensibilityElement = (org.apache.wsdl.extensions.SOAPAddress) extensionFactory + .getExtensionElement(soapAddress.getElementType()); + soapAddressExtensibilityElement.setLocationURI(soapAddress + .getLocationURI()); + Boolean required = soapAddress.getRequired(); + if (null != required) { + soapAddressExtensibilityElement.setRequired(required.booleanValue()); + } + component.addExtensibilityElement(soapAddressExtensibilityElement); + } else if (wsdl4jElement instanceof Schema) { + Schema schema = (Schema) wsdl4jElement; + //schema.getDocumentBaseURI() + //populate the imported schema stack + Stack schemaStack = new Stack(); + //recursivly load the schema elements. The best thing is to push these into + //a stack and then pop from the other side + pushSchemaElement(schema, schemaStack); + org.apache.wsdl.extensions.Schema schemaExtensibilityElement = (org.apache.wsdl.extensions.Schema) extensionFactory.getExtensionElement( + schema.getElementType()); + schemaExtensibilityElement.setElement(schema.getElement()); + schemaExtensibilityElement.setImportedSchemaStack(schemaStack); + Boolean required = schema.getRequired(); + if (null != required) { + schemaExtensibilityElement.setRequired(required.booleanValue()); + } + //set the name of this Schema element + //todo this needs to be fixed + if(schema.getDocumentBaseURI() != null) { + schemaExtensibilityElement.setName(new QName("",schema.getDocumentBaseURI())); + } + component.addExtensibilityElement(schemaExtensibilityElement); + } else if (SOAPConstants.Q_ELEM_SOAP_OPERATION.equals( + wsdl4jElement.getElementType())) { + SOAPOperation soapOperation = (SOAPOperation) wsdl4jElement; + org.apache.wsdl.extensions.SOAPOperation soapOperationextensibilityElement = (org.apache.wsdl.extensions.SOAPOperation) extensionFactory.getExtensionElement( + soapOperation.getElementType()); + soapOperationextensibilityElement.setSoapAction( + soapOperation.getSoapActionURI()); + soapOperationextensibilityElement.setStyle(soapOperation.getStyle()); + Boolean required = soapOperation.getRequired(); + if (null != required) { + soapOperationextensibilityElement.setRequired(required.booleanValue()); + } + component.addExtensibilityElement(soapOperationextensibilityElement); + } else if (SOAPConstants.Q_ELEM_SOAP_BODY.equals( + wsdl4jElement.getElementType())) { + SOAPBody soapBody = (SOAPBody) wsdl4jElement; + org.apache.wsdl.extensions.SOAPBody soapBodyExtensibilityElement = (org.apache.wsdl.extensions.SOAPBody) extensionFactory.getExtensionElement( + soapBody.getElementType()); + soapBodyExtensibilityElement.setNamespaceURI( + soapBody.getNamespaceURI()); + soapBodyExtensibilityElement.setUse(soapBody.getUse()); + Boolean required = soapBody.getRequired(); + if (null != required) { + soapBodyExtensibilityElement.setRequired(required.booleanValue()); + } + + component.addExtensibilityElement(soapBodyExtensibilityElement); + //add the header + } else if (SOAPConstants.Q_ELEM_SOAP_HEADER.equals( + wsdl4jElement.getElementType())) { + SOAPHeader soapHeader = (SOAPHeader) wsdl4jElement; + org.apache.wsdl.extensions.SOAPHeader soapHeaderExtensibilityElement = (org.apache.wsdl.extensions.SOAPHeader) extensionFactory.getExtensionElement( + soapHeader.getElementType()); + soapHeaderExtensibilityElement.setNamespaceURI( + soapHeader.getNamespaceURI()); + soapHeaderExtensibilityElement.setUse(soapHeader.getUse()); + Boolean required = soapHeader.getRequired(); + if (null != required) { + soapHeaderExtensibilityElement.setRequired(required.booleanValue()); + } + if (null!=wsdl4jDefinition){ + //find the relevant schema part from the messages + Message msg = wsdl4jDefinition.getMessage(soapHeader.getMessage()); + Part msgPart = msg.getPart(soapHeader.getPart()); + soapHeaderExtensibilityElement.setElement(msgPart.getElementName()); + } +// msgPart. + soapHeaderExtensibilityElement.setMessage(soapHeader.getMessage()); + + soapHeaderExtensibilityElement.setPart(soapHeader.getPart()); + soapHeader.getMessage(); + component.addExtensibilityElement(soapHeaderExtensibilityElement); + } else if (SOAPConstants.Q_ELEM_SOAP_BINDING.equals( + wsdl4jElement.getElementType())) { + SOAPBinding soapBinding = (SOAPBinding) wsdl4jElement; + org.apache.wsdl.extensions.SOAPBinding soapBindingExtensibilityElement = (org.apache.wsdl.extensions.SOAPBinding) extensionFactory.getExtensionElement( + soapBinding.getElementType()); + soapBindingExtensibilityElement.setTransportURI( + soapBinding.getTransportURI()); + soapBindingExtensibilityElement.setStyle(soapBinding.getStyle()); + Boolean required = soapBinding.getRequired(); + if (null != required) { + soapBindingExtensibilityElement.setRequired(required.booleanValue()); + } + component.addExtensibilityElement(soapBindingExtensibilityElement); + } else { + // throw new AxisError( +// "An Extensible item "+wsdl4jElement.getElementType()+" went unparsed during WSDL Parsing"); + + } + } + } + + /** + * Get the Extensible Attributes from wsdl4jExtensibilityAttribute + * Map if any and copy them to the Component + * + * @param wsdl4jExtensibilityAttributes + * @param component + */ + private void copyExtensibilityAttribute(Map wsdl4jExtensibilityAttributes, + Component component) { + Iterator iterator = wsdl4jExtensibilityAttributes.keySet().iterator(); + while (iterator.hasNext()) { + QName attributeName = (QName) iterator.next(); + QName value = (QName) wsdl4jExtensibilityAttributes + .get(attributeName); + WSDLExtensibilityAttribute attribute = this.wsdlComponentFactory + .createWSDLExtensibilityAttribute(); + attribute.setKey(attributeName); + attribute.setValue(value); + component.addExtensibleAttributes(attribute); + } + } +} Propchange: webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java ------------------------------------------------------------------------------ svn:eol-style = native