Package org.apache.juddi.v3.client.mapping.wsdl

Source Code of org.apache.juddi.v3.client.mapping.wsdl.BPEL2UDDI

/*
* Copyright 2001-2011 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.juddi.v3.client.mapping.wsdl;

import org.apache.juddi.v3.client.mapping.Common2UDDI;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.PortType;
import javax.wsdl.Service;
import javax.wsdl.WSDLException;
import javax.xml.namespace.QName;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.api_v3.AccessPointType;
import org.apache.juddi.jaxb.PrintUDDI;
import org.apache.juddi.v3.annotations.AnnotationProcessor;
import org.apache.juddi.v3.client.config.Property;
import org.apache.juddi.v3.client.config.UDDIClerk;
import org.apache.juddi.v3.client.config.UDDIKeyConvention;
import org.apache.juddi.v3.client.mapping.URLLocalizer;
import org.apache.juddi.v3.client.transport.TransportException;
import org.uddi.api_v3.AccessPoint;
import org.uddi.api_v3.BindingTemplate;
import org.uddi.api_v3.BusinessService;
import org.uddi.api_v3.CategoryBag;
import org.uddi.api_v3.FindBinding;
import org.uddi.api_v3.FindTModel;
import org.uddi.api_v3.GetTModelDetail;
import org.uddi.api_v3.InstanceDetails;
import org.uddi.api_v3.KeyedReference;
import org.uddi.api_v3.Name;
import org.uddi.api_v3.OverviewDoc;
import org.uddi.api_v3.OverviewURL;
import org.uddi.api_v3.TModel;
import org.uddi.api_v3.TModelBag;
import org.uddi.api_v3.TModelDetail;
import org.uddi.api_v3.TModelInfo;
import org.uddi.api_v3.TModelInstanceDetails;
import org.uddi.api_v3.TModelInstanceInfo;
import org.uddi.api_v3.TModelList;
import org.w3c.dom.Element;


/**
* BPEL4WS abstract processes describe the observable behavior of Web services. They
* complement abstract WSDL interfaces (port types and operations) and the UDDI model
* by defining dependencies between service operations in the context of a message
* exchange. The technical note 'uddi-spec-tc-tn-bpel' describes the relationships
* between the three models and suggests how BPEL4WS abstract processes can be used
* in a UDDI Registry. This class implements the registrations suggestions as put
* forward in the technote.
*
* * @author Kurt T Stam <kurt.stam@apache.org>
*
*/
public class BPEL2UDDI extends AnnotationProcessor {
 
  private Log log = LogFactory.getLog(this.getClass());
 
  private String keyDomainURI;
  private UDDIClerk clerk;
  private String lang;
  private URLLocalizer urlLocalizer;
  private String businessKey;
  private Properties properties = new Properties();

  private WSDL2UDDI wsdl2UDDI;
 
  public BPEL2UDDI(UDDIClerk clerk, URLLocalizer urlLocalizer, Properties properties) throws ConfigurationException {
    super();
   
    this.clerk = clerk;
    this.urlLocalizer = urlLocalizer;
    this.properties = properties;
   
    //Obtaining values from the properties
    this.keyDomainURI = "uddi:" + properties.getProperty("keyDomain") + ":";
    this.businessKey = UDDIKeyConvention.getBusinessKey(properties);
    this.lang = properties.getProperty(Property.LANG,Property.DEFAULT_LANG);
   
    this.wsdl2UDDI = new WSDL2UDDI(clerk, urlLocalizer, properties);
  }
 
  public String getKeyDomainURI() {
    return keyDomainURI;
  }

  public void setKeyDomainURI(String keyDomainURI) {
    this.keyDomainURI = keyDomainURI;
  }
 
  public UDDIClerk getClerk() {
    return clerk;
  }

  public void setClerk(UDDIClerk clerk) {
    this.clerk = clerk;
  }
 
  public String getLang() {
    return lang;
  }

  public void setLang(String lang) {
    this.lang = lang;
  }
 
  public URLLocalizer getUrlLocalizer() {
    return urlLocalizer;
  }

  public void setUrlLocalizer(URLLocalizer urlLocalizer) {
    this.urlLocalizer = urlLocalizer;
  }

  /**
   * 1. Register PortType tModels
   * 2. Register WSDL BPEL4WS Process
   * 3. Register WSDL Port
   * 4. Register Process Service
   * 5. Register Binding
   *
   * @param serviceName - QName of the service
   * @param portName - portName of the service
   * @param serviceUrl - URL at which the service can be invoked
   * @param wsdlDefinition - WSDL Definition of the Web Service
         * @return a binding template
   * @throws WSDLException
   * @throws MalformedURLException
   * @throws TransportException
   * @throws ConfigurationException
   * @throws RemoteException
   */
  @SuppressWarnings("unchecked")
  public BindingTemplate register(QName serviceName, String portName, URL serviceUrl, Definition wsdlDefinition)
    throws WSDLException, MalformedURLException, RemoteException, ConfigurationException, TransportException
  {
    String targetNamespace = wsdlDefinition.getTargetNamespace();
    String genericWSDLURL  = wsdlDefinition.getDocumentBaseURI();   //TODO maybe point to repository version
    String bpelOverviewURL = "http://localhost:8080/bpel-console/"; //TODO maybe point to bpel in console
   
    String serviceKey = UDDIKeyConvention.getServiceKey(properties, serviceName.getLocalPart());
    BusinessService service = lookupService(serviceKey);
    if (service==null) {
      List<TModel> tModels = new ArrayList<TModel>();
      // Create the PortType tModels
      Map<QName,PortType> portTypes = (Map<QName,PortType>) wsdlDefinition.getAllPortTypes();
      tModels.addAll(createWSDLPortTypeTModels(genericWSDLURL, portTypes));
      // Create the Binding tModels
      Map<QName,Binding> bindings = (Map<QName,Binding>) wsdlDefinition.getAllBindings();
      tModels.addAll(createWSDLBindingTModels(genericWSDLURL, bindings));
      // Create the BPEL4WS tModel
      TModel bpel4WSTModel = createBPEL4WSProcessTModel(serviceName, targetNamespace, portTypes, bpelOverviewURL);
        tModels.add(bpel4WSTModel);
        // Register these tModels
        for (TModel tModel : tModels) {
        clerk.register(tModel);
      }
        // BPEL Service
        service = createBusinessService(serviceName, wsdlDefinition);
        // Register this BPEL Service
        clerk.register(service);
    }
    //Add the BindingTemplate to this Service
    BindingTemplate binding = createBPELBinding(serviceName, portName, serviceUrl, wsdlDefinition);
    // Register BindingTemplate
    clerk.register(binding);
    return binding;
  }
 
  public String unRegister(QName serviceName, String portName, URL serviceUrl) throws RemoteException, ConfigurationException, TransportException {
   
    String serviceKey = UDDIKeyConvention.getServiceKey(properties, serviceName.getLocalPart());
    BusinessService service = lookupService(serviceKey);
    boolean isRemoveServiceIfNoTemplates = true;
    String bindingKey = UDDIKeyConvention.getBindingKey(properties, serviceName, portName, serviceUrl);
    //check if this bindingKey is in the service's binding templates
    for (BindingTemplate bindingTemplate : service.getBindingTemplates().getBindingTemplate()) {
      if (bindingKey.equals(bindingTemplate.getBindingKey())) {
        clerk.unRegisterBinding(bindingKey);
        //if this is the last binding for this service, and
        if (service.getBindingTemplates().getBindingTemplate().size()==1 && isRemoveServiceIfNoTemplates) {
          clerk.unRegisterService(serviceKey);
         
          FindTModel findTmodelForProcessName = createFindTModelForProcessName(serviceName);
          TModelList tModelList = clerk.findTModel(findTmodelForProcessName);
          if (tModelList!=null && tModelList.getTModelInfos()!=null && tModelList.getTModelInfos().getTModelInfo()!=null) {
            TModelInfo tModelInfo = tModelList.getTModelInfos().getTModelInfo().get(0);
            String bpel4WSTModelKey = tModelInfo.getTModelKey();
            clerk.unRegisterTModel(bpel4WSTModelKey);
            // now use this key to find the portType TModels
            GetTModelDetail findAllPortTypesForProcess = createFindAllPortTypesForProcess_1(bpel4WSTModelKey);
            TModelDetail tModelDetail = clerk.getTModelDetail(findAllPortTypesForProcess);
            if (tModelDetail!=null) {
              List<TModel> tModelPortTypeList = tModelDetail.getTModel();
              if (tModelPortTypeList!=null && tModelPortTypeList.size()>0) {
                TModel bpel4WSTModel = tModelPortTypeList.get(0);
                CategoryBag categoryBag = bpel4WSTModel.getCategoryBag();
                if (categoryBag!=null && categoryBag.getKeyedReference()!=null) {
                  List<KeyedReference> portTypeTModelKeys = new ArrayList<KeyedReference>();
                  KeyedReference namespaceRef = null;
                  for (KeyedReference keyedReference : categoryBag.getKeyedReference()) {
                    if ("uddi:uddi.org:wsdl:porttypereference".equals(keyedReference.getTModelKey()) ) {
                      portTypeTModelKeys.add(keyedReference);
                    }
                    if ("uddi:uddi.org:xml:namespace".equals(keyedReference.getTModelKey()) ) {
                      namespaceRef = keyedReference;
                    }
                  }
                  String namespace = null;
                  if (namespaceRef!=null) namespace = namespaceRef.getKeyValue();
                  //find the bindingTModel
                  for (KeyedReference keyedReference : portTypeTModelKeys) {
                    FindTModel findBindingTModel = WSDL2UDDI.createFindBindingTModelForPortType(keyedReference.getKeyValue(), namespace);
                    TModelList bindingTmodels = clerk.findTModel(findBindingTModel);
                    if (bindingTmodels!=null && bindingTmodels.getTModelInfos()!=null && bindingTmodels.getTModelInfos().getTModelInfo()!=null) {
                      for (TModelInfo bindingTModelInfo : bindingTmodels.getTModelInfos().getTModelInfo()) {
                        //delete the Binding TModel
                        clerk.unRegisterTModel(bindingTModelInfo.getTModelKey());
                      }
                    }
                    //delete the PortType TModel
                    clerk.unRegisterTModel(keyedReference.getKeyValue())
                  }
                 }
              }
            }
          }
        }
        break;
      }
    }
    return service.getServiceKey()
  }
  /**
   * Perform a lookup by serviceKey, and will return null if not found.
   * @param serviceKey
   * @return a business service
   * @throws RemoteException
   * @throws ConfigurationException
   * @throws TransportException
   */
  public BusinessService lookupService(String serviceKey) throws RemoteException, ConfigurationException, TransportException {
   
    //Checking if this serviceKey already exist
    BusinessService service = clerk.getServiceDetail(serviceKey);
    return service;
  }
  /**
   * Registers the Service into UDDI.
   *
   * @param serviceName
   * @param wsdlDefinition
   * @return a business service
   */
  public BusinessService createBusinessService(QName serviceName, Definition wsdlDefinition) {
   
    log.debug("Constructing Service UDDI Information for " + serviceName);
    BusinessService service = new BusinessService();
    // BusinessKey
    service.setBusinessKey(businessKey);
    // ServiceKey
    service.setServiceKey(UDDIKeyConvention.getServiceKey(properties, serviceName.getLocalPart()));
    // Description
    String serviceDescription = properties.getProperty(Property.SERVICE_DESCRIPTION, Property.DEFAULT_SERVICE_DESCRIPTION);
    if (wsdlDefinition.getService(serviceName) !=null) {
      // Override with the service description from the WSDL if present
      Element docElement = wsdlDefinition.getService(serviceName).getDocumentationElement();
      if (docElement!=null && docElement.getTextContent()!=null) {
        serviceDescription = docElement.getTextContent();
      }
    }
   
    service.getDescription().addAll(Common2UDDI.mapDescription(serviceDescription, lang));
    // Service name
    Name sName = new Name();
    sName.setLang(lang);
    sName.setValue(serviceName.getLocalPart());
    service.getName().add(sName);
   
    //customization to add KeyedReferences into the categoryBag of the service
    if (properties.containsKey(Property.SERVICE_CATEGORY_BAG)) {
      String serviceCategoryBag = properties.getProperty(Property.SERVICE_CATEGORY_BAG);
      log.debug("Adding KeyedReferences '" +  serviceCategoryBag + "' to service " + serviceName.getLocalPart());
      CategoryBag categoryBag = parseCategoryBag(serviceCategoryBag);
          service.setCategoryBag(categoryBag);
    }
   
    return service;
  }
 
  public Set<TModel> createWSDLPortTypeTModels(String wsdlURL, Map<QName,PortType> portTypes) throws WSDLException
  {
    return wsdl2UDDI.createWSDLPortTypeTModels(wsdlURL, portTypes);
  }
 
  public Set<TModel> createWSDLBindingTModels(String wsdlURL, Map<QName,Binding> bindings) throws WSDLException
  {
    return wsdl2UDDI.createWSDLBindingTModels(wsdlURL, bindings);
  }
 
  /**
   * BPEL4WS abstract processes are published as separate UDDI tModels. They are named with the BPEL4WS process
   * name. They are categorized as BPEL4WS process definitions, using a category system defined in this
   * technical note. Their overviewDoc references an external BPEL4WS document that contains the process definition.
   * All WSDL portTypes that are used in the BPEL4WS process definition (via the referenced BPEL4WS partnerLinkTypes)
   * are published as portType tModels according to [WSDL2UDDI]. The process tModel references all such WSDL portType
   * tModels, using the WSDL portType Reference tModel defined in [WSDL2UDDI]. Note that it is a characteristic
   * of the BPEL4WS process that it defines a conversation based on WSDL portTypes. Thus, the relationship
   * between process tModel and portType tModel is to be published by the process tModel publisher, not by
   * the portType tModel publisher, which may be a different person.
   *
   * In the current implementation it is all registered by the same publisher.
   *
   * @param serviceName
   * @param targetNamespace
   * @param portTypes
   * @param bpelOverviewURL
   * @return tmodels
   */
    public TModel createBPEL4WSProcessTModel(QName serviceName, String targetNamespace, Map<QName,PortType> portTypes, String bpelOverviewURL) {
      TModel tModel = new TModel();
      // Set the Key
      tModel.setTModelKey(keyDomainURI + serviceName.getLocalPart() + "Process");
      // Set the Name
      Name name = new Name();
      name.setLang("en");
      name.setValue(serviceName.getLocalPart());
      tModel.setName(name);
      // Set the OverviewURL
      OverviewURL overviewURL = new OverviewURL();
      overviewURL.setValue("http://localhost:8080/bpel-console/"); //should point to the bpel of this process, maybe in guvnor
      OverviewDoc overviewDoc = new OverviewDoc();
      overviewDoc.setOverviewURL(overviewURL);
      tModel.getOverviewDoc().add(overviewDoc);
      // Set the categoryBag
      CategoryBag categoryBag = new CategoryBag();
     
      if (targetNamespace!=null) {
        KeyedReference namespaceReference = WSDL2UDDI.newKeyedReference(
          "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", targetNamespace);
        categoryBag.getKeyedReference().add(namespaceReference);
      }
      KeyedReference typesReference = WSDL2UDDI.newKeyedReference(
          "uddi:uddi.org:bpel:types", "uddi-org:bpel:types", "process");
      categoryBag.getKeyedReference().add(typesReference);
      for (QName qName : portTypes.keySet()) {
        String portTypeKey = keyDomainURI + qName.getLocalPart();
        KeyedReference portTypeReference = WSDL2UDDI.newKeyedReference(
            "uddi:uddi.org:wsdl:porttypereference", "uddi-org:wsdl:portTypeReference", portTypeKey);
        categoryBag.getKeyedReference().add(portTypeReference);
      }
     
      tModel.setCategoryBag(categoryBag);
     
      if (log.isDebugEnabled()) {
        log.debug(new PrintUDDI<TModel>().print(tModel));
      }
     
      return tModel;
    }
   
    public BindingTemplate createBPELBinding(QName serviceName, String portName, URL serviceUrl, Definition wsdlDefinition) {
   
      BindingTemplate bindingTemplate = new BindingTemplate();
    // Set BusinessService Key
    bindingTemplate.setServiceKey(UDDIKeyConvention.getServiceKey(properties, serviceName.getLocalPart()));
    // Set Binding Key
    String bindingKey = UDDIKeyConvention.getBindingKey(properties, serviceName, portName, serviceUrl);
    bindingTemplate.setBindingKey(bindingKey);
    // Set AccessPoint
    AccessPoint accessPoint = new AccessPoint();
    accessPoint.setUseType(AccessPointType.END_POINT.toString());
    accessPoint.setValue(urlLocalizer.rewrite(serviceUrl));
    bindingTemplate.setAccessPoint(accessPoint);
   
    Service service =  wsdlDefinition.getService(serviceName);
   
    if (service!=null) {
      TModelInstanceDetails tModelInstanceDetails = new TModelInstanceDetails();
     
      Port port = service.getPort(portName);
      if (port!=null) {
        Binding binding = port.getBinding();
        // Set the Binding Description
        String bindingDescription = properties.getProperty(Property.BINDING_DESCRIPTION, Property.DEFAULT_BINDING_DESCRIPTION);
        // Override with the service description from the WSDL if present
        Element docElement = binding.getDocumentationElement();
        if (docElement!=null && docElement.getTextContent()!=null) {
          bindingDescription = docElement.getTextContent();
        }
       
        bindingTemplate.getDescription().addAll(Common2UDDI.mapDescription(bindingDescription, lang));
       
        // reference wsdl:binding tModel
        TModelInstanceInfo tModelInstanceInfoBinding = new TModelInstanceInfo();
        tModelInstanceInfoBinding.setTModelKey(keyDomainURI + binding.getQName().getLocalPart());
        InstanceDetails instanceDetails = new InstanceDetails();
        instanceDetails.setInstanceParms(portName)
        tModelInstanceInfoBinding.setInstanceDetails(instanceDetails);
       
        tModelInstanceInfoBinding.getDescription().addAll(Common2UDDI.mapDescription("The wsdl:binding that this wsdl:port implements. " + bindingDescription +
            " The instanceParms specifies the port local name.", lang));
        tModelInstanceDetails.getTModelInstanceInfo().add(tModelInstanceInfoBinding);
       
        // reference wsdl:portType tModel
        PortType portType = binding.getPortType();
        TModelInstanceInfo tModelInstanceInfoPortType = new TModelInstanceInfo();
        tModelInstanceInfoPortType.setTModelKey(keyDomainURI + portType.getQName().getLocalPart());
        String portTypeDescription = "";
        docElement = portType.getDocumentationElement();
        if (docElement!=null && docElement.getTextContent()!=null) {
          portTypeDescription = docElement.getTextContent();
        }
       
        tModelInstanceInfoPortType.getDescription().addAll(Common2UDDI.mapDescription("The wsdl:portType that this wsdl:port implements." + portTypeDescription, lang));
        tModelInstanceDetails.getTModelInstanceInfo().add(tModelInstanceInfoPortType);
       
        //reference bpel:process tModel
        TModelInstanceInfo tModelInstanceInfoBPEL = new TModelInstanceInfo();
        tModelInstanceInfoBPEL.setTModelKey(keyDomainURI + service.getQName().getLocalPart() + "Process");
       
        // Description
        String serviceDescription = properties.getProperty(Property.SERVICE_DESCRIPTION, Property.DEFAULT_SERVICE_DESCRIPTION);
        // Override with the service description from the WSDL if present
        docElement = wsdlDefinition.getService(serviceName).getDocumentationElement();
        if (docElement!=null && docElement.getTextContent()!=null) {
          serviceDescription = docElement.getTextContent();
        }
       
        tModelInstanceInfoBPEL.getDescription().addAll(Common2UDDI.mapDescription("The bpel:process this wsdl:port supports." + serviceDescription, lang));
        tModelInstanceDetails.getTModelInstanceInfo().add(tModelInstanceInfoBPEL);
       
        bindingTemplate.setTModelInstanceDetails(tModelInstanceDetails);
      } else {
        log.error("Could not find Port with portName: " + portName);
      }
    } else {
      log.error("Could not find Service with serviceName: " + serviceName.getLocalPart());
    }
   
    if (log.isDebugEnabled()) {
        log.debug(new PrintUDDI<BindingTemplate>().print(bindingTemplate));
      }
   
    return bindingTemplate;
  }
   
    /** Finds and returns ALL the tModels related to the process, so that i.e. they
     * can be removed on undeployment of the service.
     *
     * @param serviceName
     * @return a tModel if found
     */
    public FindTModel createFindTModelForProcessName (QName serviceName) {
     
      FindTModel findTModel = new FindTModel();
      Name name = new Name();
      //name.setLang(lang);
      name.setValue(serviceName.getLocalPart());
      findTModel.setName(name);
      CategoryBag categoryBag = new CategoryBag();
     
      String namespace = serviceName.getNamespaceURI();
      if (namespace!=null && namespace.length()!=0) {
        KeyedReference namespaceReference = WSDL2UDDI.newKeyedReference(
          "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
        categoryBag.getKeyedReference().add(namespaceReference);
      }
      KeyedReference typesReference = WSDL2UDDI.newKeyedReference(
          "uddi:uddi.org:bpel:types", "uddi-org:bpel:types", "process");
      categoryBag.getKeyedReference().add(typesReference);
      findTModel.setCategoryBag(categoryBag);
     
      if (log.isDebugEnabled()) {
        log.debug(new PrintUDDI<FindTModel>().print(findTModel));
      }
      return findTModel;
    }
    /**
     * Find all processes that use the given portType.
     *
     * @param portTypeKey
     * @return tmodel info
     */
    public FindTModel createFindProcessesForPortTypes(String portTypeKey) {
      FindTModel findTModel = new FindTModel();
      CategoryBag categoryBag = new CategoryBag();
     
      KeyedReference typesReference = WSDL2UDDI.newKeyedReference(
          "uddi:uddi.org:bpel:types", "uddi-org:bpel:types", "process");
      categoryBag.getKeyedReference().add(typesReference);
     
      KeyedReference portTypeReference = WSDL2UDDI.newKeyedReference(
          "uddi:uddi.org:wsdl:porttypereference", "uddi-org:wsdl:portTypeReference", portTypeKey);
      categoryBag.getKeyedReference().add(portTypeReference);
     
      findTModel.setCategoryBag(categoryBag);
     
      return findTModel;
    }
    /**
     * Find all portTypes used in the given process. This should return the
     * tModel registration for the process tModel. The tModelKeys for the
     * portTypes used in the process can be obtained from the process tModels
     * categoryBag, and passed into the second call.
     *
     * @param processKey
     * @return GetTModelDetail
     */
    public GetTModelDetail createFindAllPortTypesForProcess_1(String processKey) {
      GetTModelDetail getTModelDetail = new GetTModelDetail();
      getTModelDetail.getTModelKey().add(processKey);
      return getTModelDetail;
    }
    /**
     * Once retrieved, the second call is made to get the tModel registrations
     * for the portTypes with the keys found in the first step.
     *
     * @param portTypeTModelKeys - List of portType tModels found in the first step.
     * @return GetTModelDetail
     */
    public GetTModelDetail createFindAllPortTypesForProcess_2(List<String> portTypeTModelKeys) {
      GetTModelDetail getTModelDetail = new GetTModelDetail();
      for (String tModelKey : portTypeTModelKeys) {
        getTModelDetail.getTModelKey().add(tModelKey);
      }
      return getTModelDetail;
    }
    /**
     * Find all implementations of the given process.
     * @param processKey
     * @return FindBinding
     */
    public FindBinding createFindImplementationsForProcess(String processKey) {
      FindBinding findBinding = new FindBinding();
      TModelBag tModelBag = new TModelBag();
      tModelBag.getTModelKey().add(processKey);
      return findBinding;
    }
 
}
TOP

Related Classes of org.apache.juddi.v3.client.mapping.wsdl.BPEL2UDDI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.