Uploaded image for project: 'Tuscany'
  1. Tuscany
  2. TUSCANY-2558

Generated WSDL fails to resolve when packaged in contribution

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • Java-SCA-1.3
    • Java-SCA-1.x
    • None
    • None
    • Patch Available

    Description

      I attempted to package a WSDL in a contribution that was previously generated using the WSDL deployment process of binding.ws and received a ContributionException with the following cause:

      org.apache.tuscany.sca.interfacedef.wsdl.impl.InvalidWSDLException: The fault message MUST have a single part .

      In this case I was attempting to use interface.wsdl with empty binding.ws with the following SCDL:

      <?xml version="1.0" encoding="UTF-8"?>
      <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
      targetNamespace="http://www.ibm.com/samples/sca/calculator"
      name="CalculatorLocatorComposite">

      <component name="CalculatorLocatorComponent">
      <implementation.java class="calculator.CalculatorLocatorImpl"/>
      <reference name="calculator" target="CalculatorComponent">
      <interface.wsdl interface="http://calculator/#wsdl.interface(CalculatorService)"/>
      <binding.ws/>
      </reference>
      </component>

      </composite>

      The failure occurs during wsdlFactory.createWSDLInterface in WSDLInterfaceProcessor

      private WSDLInterface resolveWSDLInterface(WSDLInterface wsdlInterface, ModelResolver resolver) throws ContributionResolveException {

      if (wsdlInterface != null && wsdlInterface.isUnresolved()) {

      // Resolve the WSDL interface
      wsdlInterface = resolver.resolveModel(WSDLInterface.class, wsdlInterface);
      if (wsdlInterface.isUnresolved()) {

      // If the WSDL interface has never been resolved yet, do it now
      // First, resolve the WSDL definition for the given namespace
      WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
      wsdlDefinition.setUnresolved(true);
      wsdlDefinition.setNamespace(wsdlInterface.getName().getNamespaceURI());
      WSDLDefinition resolved = resolver.resolveModel(WSDLDefinition.class, wsdlDefinition);
      if (!resolved.isUnresolved()) {
      wsdlDefinition.setDefinition(resolved.getDefinition());
      wsdlDefinition.setLocation(resolved.getLocation());
      wsdlDefinition.setURI(resolved.getURI());
      wsdlDefinition.getImportedDefinitions().addAll(resolved.getImportedDefinitions());
      wsdlDefinition.getXmlSchemas().addAll(resolved.getXmlSchemas());
      wsdlDefinition.setUnresolved(false);
      WSDLObject<PortType> portType = wsdlDefinition.getWSDLObject(PortType.class, wsdlInterface.getName());
      if (portType != null) {
      // Introspect the WSDL portType and add the resulting
      // WSDLInterface to the resolver
      try

      { wsdlDefinition.setDefinition(portType.getDefinition()); wsdlInterface = wsdlFactory.createWSDLInterface(portType.getElement(), wsdlDefinition, resolver); wsdlInterface.setWsdlDefinition(wsdlDefinition); resolver.addModel(wsdlInterface); }

      catch (InvalidInterfaceException e)

      { ContributionResolveException ce = new ContributionResolveException(e); error("ContributionResolveException", wsdlFactory, ce); //throw ce; }


      }

      I am attaching the generated WSDL.

      Attachments

        1. TUSCANY-2558.patch
          1 kB
          Ramkumar Ramalingam
        2. calculator.zip
          14 kB
          Lou Amodeo
        3. calculator.CalculatorService.wsdl
          7 kB
          Lou Amodeo

        Issue Links

          Activity

            People

              ramkumar.rj Ramkumar Ramalingam
              lou.amodeo@gmail.com Lou Amodeo
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: