You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by al...@apache.org on 2014/01/19 23:08:00 UTC

svn commit: r1559590 [4/5] - in /juddi/trunk: juddi-client/src/main/java/org/apache/juddi/v3/annotations/ juddi-client/src/main/java/org/apache/juddi/v3/client/ juddi-client/src/main/java/org/apache/juddi/v3/client/config/ juddi-client/src/main/java/or...

Modified: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/wsdl/WSDL2UDDI.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/wsdl/WSDL2UDDI.java?rev=1559590&r1=1559589&r2=1559590&view=diff
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/wsdl/WSDL2UDDI.java (original)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/mapping/wsdl/WSDL2UDDI.java Sun Jan 19 22:07:59 2014
@@ -86,886 +86,914 @@ import org.w3c.dom.Element;
  * uddi:bindingTemplate</li> <li>TODO: 2.4.5 wsdl:port Address Extensions ->
  * uddi:bindingTemplate</li> </ul>
  *
- * @see 
+ * @see
  * @author Kurt T Stam
  * @Since 3.1.5
  */
 public class WSDL2UDDI {
 
-    private static Log log = LogFactory.getLog(WSDL2UDDI.class);
-    private String keyDomainURI;
-    private String businessKey;
-    private String lang;
-    private UDDIClerk clerk = null;
-    private Properties properties = null;
-    private URLLocalizer urlLocalizer;
-
-    /**
-     * Required Properties are: businessName, for example: 'Apache' nodeName,
-     * for example: 'uddi.example.org_80' keyDomain, for example:
-     * juddi.apache.org
-     *
-     * Optional Properties are: lang: for example: 'nl'
-     *
-     * @param clerk - can be null if register/unregister methods are not used.
-     * @param urlLocalizer - A reference to an custom
-     * @param properties - required values keyDomain, businessKey, nodeName
-     * @throws ConfigurationException
-     */
-    public WSDL2UDDI(UDDIClerk clerk, URLLocalizer urlLocalizer, Properties properties) throws ConfigurationException {
-        super();
-        if (properties==null)
-            throw new IllegalArgumentException("properties");
-        this.clerk = clerk;
-        this.urlLocalizer = urlLocalizer;
-        this.properties = properties;
-
-        if (clerk != null) {
-            if (!properties.containsKey("keyDomain")) {
-                throw new ConfigurationException("Property keyDomain is a required property when using WSDL2UDDI.");
-            }
-            if (!properties.containsKey("businessKey") && !properties.containsKey("businessName")) {
-                throw new ConfigurationException("Either property businessKey, or businessName, is a required property when using WSDL2UDDI.");
-            }
-            if (!properties.containsKey("nodeName")) {
-                if (properties.containsKey("serverName") && properties.containsKey("serverPort")) {
-                    String nodeName = properties.getProperty("serverName") + "_" + properties.getProperty("serverPort");
-                    properties.setProperty("nodeName", nodeName);
+        private static final Log log = LogFactory.getLog(WSDL2UDDI.class);
+        private String keyDomainURI;
+        private String businessKey;
+        private String lang;
+        private UDDIClerk clerk = null;
+        private Properties properties = null;
+        private URLLocalizer urlLocalizer;
+
+        /**
+         * Required Properties are: businessName, for example: 'Apache'
+         * nodeName, for example: 'uddi.example.org_80' keyDomain, for example:
+         * juddi.apache.org
+         *
+         * Optional Properties are: lang: for example: 'nl'
+         *
+         * @param clerk - can be null if register/unregister methods are not
+         * used.
+         * @param urlLocalizer - A reference to an custom
+         * @param properties - required values keyDomain, businessKey, nodeName
+         * @throws ConfigurationException
+         */
+        public WSDL2UDDI(UDDIClerk clerk, URLLocalizer urlLocalizer, Properties properties) throws ConfigurationException {
+                super();
+                if (properties == null) {
+                        throw new IllegalArgumentException("properties");
+                }
+                this.clerk = clerk;
+                this.urlLocalizer = urlLocalizer;
+                this.properties = properties;
+
+                if (clerk != null) {
+                        if (!properties.containsKey("keyDomain")) {
+                                throw new ConfigurationException("Property keyDomain is a required property when using WSDL2UDDI.");
+                        }
+                        if (!properties.containsKey("businessKey") && !properties.containsKey("businessName")) {
+                                throw new ConfigurationException("Either property businessKey, or businessName, is a required property when using WSDL2UDDI.");
+                        }
+                        if (!properties.containsKey("nodeName")) {
+                                if (properties.containsKey("serverName") && properties.containsKey("serverPort")) {
+                                        String nodeName = properties.getProperty("serverName") + "_" + properties.getProperty("serverPort");
+                                        properties.setProperty("nodeName", nodeName);
+                                } else {
+                                        throw new ConfigurationException("Property nodeName is not defined and is a required property when using WSDL2UDDI.");
+                                }
+                        }
+                }
+
+                //Obtaining values from the properties
+                this.keyDomainURI = "uddi:" + properties.getProperty("keyDomain") + ":";
+                if (properties.contains(Property.BUSINESS_KEY)) {
+                        this.businessKey = properties.getProperty(Property.BUSINESS_KEY);
                 } else {
-                    throw new ConfigurationException("Property nodeName is not defined and is a required property when using WSDL2UDDI.");
+                        //using the BusinessKey Template, and the businessName to construct the key 
+                        this.businessKey = UDDIKeyConvention.getBusinessKey(properties);
+                }
+                this.lang = properties.getProperty(Property.LANG, Property.DEFAULT_LANG);
+        }
+
+        public BusinessServices registerBusinessServices(Definition wsdlDefinition) throws RemoteException, ConfigurationException, TransportException, WSDLException, MalformedURLException {
+
+                BusinessServices businessServices = new BusinessServices();
+
+                for (Object serviceName : wsdlDefinition.getAllServices().keySet()) {
+                        QName serviceQName = (QName) serviceName;
+                        Service service = wsdlDefinition.getService(serviceQName);
+                        BusinessService businessService = null;
+                        //add service
+                        URL serviceUrl = null;
+                        if (service.getPorts() != null && service.getPorts().size() > 0) {
+                                for (Object portName : service.getPorts().keySet()) {
+                                        businessService = registerBusinessService(serviceQName, (String) portName, serviceUrl, wsdlDefinition).getBusinessService();
+                                }
+                        }
+                        if (businessService != null) {
+                                businessServices.getBusinessService().add(businessService);
+                        }
+                }
+
+                return businessServices;
+
+        }
+
+        @SuppressWarnings("unchecked")
+        public ServiceRegistrationResponse registerBusinessService(QName serviceQName, String portName, URL serviceUrl, Definition wsdlDefinition) throws RemoteException, ConfigurationException, TransportException, WSDLException, MalformedURLException {
+
+                String genericWSDLURL = wsdlDefinition.getDocumentBaseURI();   //TODO maybe point to repository version
+                ServiceRegistrationResponse response = new ServiceRegistrationResponse();
+                String serviceKey = UDDIKeyConvention.getServiceKey(properties, serviceQName.getLocalPart());
+                BusinessService businessService = lookupService(serviceKey);
+                if (businessService == 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));
+                        // Register these tModels
+                        for (TModel tModel : tModels) {
+                                clerk.register(tModel);
+                        }
+                        // Service
+                        businessService = createBusinessService(serviceQName, wsdlDefinition);
+                        // Register this Service
+                        clerk.register(businessService);
+                }
+                //Add the BindingTemplate to this Service
+                BindingTemplate binding = createWSDLBinding(serviceQName, portName, serviceUrl, wsdlDefinition);
+                // Register BindingTemplate
+                if (binding.getAccessPoint() != null) {
+                        clerk.register(binding);
+                        if (businessService.getBindingTemplates() == null) {
+                                businessService.setBindingTemplates(new BindingTemplates());
+                        }
+                        businessService.getBindingTemplates().getBindingTemplate().add(binding);
+                        response.setBindingKey(binding.getBindingKey());
                 }
-            }
+                response.setBusinessService(businessService);
+                return response;
         }
 
-        //Obtaining values from the properties
-        this.keyDomainURI = "uddi:" + properties.getProperty("keyDomain") + ":";
-        if (properties.contains(Property.BUSINESS_KEY)) {
-            this.businessKey = properties.getProperty(Property.BUSINESS_KEY);
-        } else {
-            //using the BusinessKey Template, and the businessName to construct the key 
-            this.businessKey = UDDIKeyConvention.getBusinessKey(properties);
-        }
-        this.lang = properties.getProperty(Property.LANG, Property.DEFAULT_LANG);
-    }
-
-    public BusinessServices registerBusinessServices(Definition wsdlDefinition) throws RemoteException, ConfigurationException, TransportException, WSDLException, MalformedURLException {
-
-        BusinessServices businessServices = new BusinessServices();
-
-        for (Object serviceName : wsdlDefinition.getAllServices().keySet()) {
-            QName serviceQName = (QName) serviceName;
-            Service service = wsdlDefinition.getService(serviceQName);
-            BusinessService businessService = null;
-            //add service
-            URL serviceUrl = null;
-            if (service.getPorts() != null && service.getPorts().size() > 0) {
-                for (Object portName : service.getPorts().keySet()) {
-                    businessService = registerBusinessService(serviceQName, (String) portName, serviceUrl, wsdlDefinition).getBusinessService();
-                }
-            }
-            if (businessService != null) {
-                businessServices.getBusinessService().add(businessService);
-            }
-        }
-
-        return businessServices;
-
-    }
-
-    @SuppressWarnings("unchecked")
-    public ServiceRegistrationResponse registerBusinessService(QName serviceQName, String portName, URL serviceUrl, Definition wsdlDefinition) throws RemoteException, ConfigurationException, TransportException, WSDLException, MalformedURLException {
-
-        String genericWSDLURL = wsdlDefinition.getDocumentBaseURI();   //TODO maybe point to repository version
-        ServiceRegistrationResponse response = new ServiceRegistrationResponse();
-        String serviceKey = UDDIKeyConvention.getServiceKey(properties, serviceQName.getLocalPart());
-        BusinessService businessService = lookupService(serviceKey);
-        if (businessService == 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));
-            // Register these tModels
-            for (TModel tModel : tModels) {
-                clerk.register(tModel);
-            }
-            // Service
-            businessService = createBusinessService(serviceQName, wsdlDefinition);
-            // Register this Service
-            clerk.register(businessService);
-        }
-        //Add the BindingTemplate to this Service
-        BindingTemplate binding = createWSDLBinding(serviceQName, portName, serviceUrl, wsdlDefinition);
-        // Register BindingTemplate
-        if (binding.getAccessPoint()!=null) {
-	        clerk.register(binding);
-	        if (businessService.getBindingTemplates() == null) {
-	            businessService.setBindingTemplates(new BindingTemplates());
-	        }
-	        businessService.getBindingTemplates().getBindingTemplate().add(binding);
-	        response.setBindingKey(binding.getBindingKey());
-        }
-        response.setBusinessService(businessService);
-        return response;
-    }
-
-    public String[] unRegisterBusinessServices(Definition wsdlDefinition) throws RemoteException, ConfigurationException, TransportException, MalformedURLException {
-
-        String[] businessServices = new String[wsdlDefinition.getAllServices().size()];
-        int i = 0;
-        for (Object serviceName : wsdlDefinition.getAllServices().keySet()) {
-            QName serviceQName = (QName) serviceName;
-            Service service = wsdlDefinition.getService(serviceQName);
-            //unregister service
-            URL serviceUrl = null;
-            if (service.getPorts() != null && service.getPorts().size() > 0) {
-                for (Object portName : service.getPorts().keySet()) {
-                    //construct the accessURL
-                    serviceUrl = new URL(getBindingURL((Port) service.getPorts().get(portName)));
-                    businessServices[i++] = unRegisterBusinessService(serviceQName, (String) portName, serviceUrl);
-                }
-            }
-        }
-        return businessServices;
-    }
-
-    public String unRegisterBusinessService(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);
-                    if (bindingTemplate.getTModelInstanceDetails() != null
-                            && bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfo() != null) {
-                        for (TModelInstanceInfo tModelInstanceInfo : bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfo()) {
-                            String tModelKey = tModelInstanceInfo.getTModelKey();
-                            TModelDetail tModelDetail = clerk.getTModelDetail(tModelKey);
-                            //delete all tModels assuming they are the portType and Binding tModels.
-                            if (tModelDetail.getTModel() != null && tModelDetail.getTModel().size() > 0) {
-                                for (TModel tModel : tModelDetail.getTModel()) {
-                                        if (!tModel.getTModelKey().startsWith("uddi:uddi.org:"))
-                                                clerk.unRegisterTModel(tModel.getTModelKey());
-                                        else
-                                                log.info("Skipping the removal of " + tModel.getTModelKey() + " because it starts with uddi.org");
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return serviceKey;
-    }
-
-    public String getKeyDomainURI() {
-        return keyDomainURI;
-    }
-
-    public void setKeyDomain(String keyDomainURI) {
-        this.keyDomainURI = keyDomainURI;
-    }
-
-    public String getLang() {
-        return lang;
-    }
-
-    public void setLang(String lang) {
-        this.lang = lang;
-    }
-
-    /**
-     * <h3>2.4.2 wsdl:binding -> uddi:tModel</h3>
-     *
-     * <p>A wsdl:binding MUST be modeled as a uddi:tModel. The minimum
-     * information that must be captured about a binding is its entity type, its
-     * local name, its namespace, the location of the WSDL document that defines
-     * the binding, the portType that it implements, its protocol, and,
-     * optionally, the transport information. Capturing the entity type enables
-     * users to search for tModels that represent binding artifacts. Capturing
-     * the local name, namespace, and WSDL location enables users to locate the
-     * definition of the specified binding artifact. The link to the portType
-     * enables users to search for bindings that implement a particular
-     * portType.</p>
-     *
-     * <p>A wsdl:binding corresponds to a WSDL service interface definition as
-     * defined by the mapping in the Version 1 Best Practice. To maintain
-     * compatibility with the previous mapping, the binding must also be
-     * characterized as type "wsdlSpec".</p>
-     *
-     * <p>The wsdl:binding information is captured as follows:</p>
-     *
-     * <p>The uddi:name element of the tModel MUST be the value of the name
-     * attribute of the wsdl:binding.</p>
-     *
-     * <p>The tModel MUST contain a categoryBag, and the categoryBag MUST
-     * contain at least the following keyedReference elements:</p> <ol> <li> A
-     * keyedReference with a tModelKey of the WSDL Entity Type category system
-     * and a keyValue of "binding".</li> <li> A keyedReference with a tModelKey
-     * of the WSDL portType Reference category system and a keyValue of the
-     * tModelKey that models the wsdl:portType to which the wsdl:binding
-     * relates.</li> <li> A keyedReference with a tModelKey of the UDDI Types
-     * category system and a keyValue of "wsdlSpec" for backward
-     * compatibility[1].</li> <li> One or two keyedReferences as required to
-     * capture the protocol and optionally the transport information refer to
-     * the next section.</li> </ol>
-     *
-     * <p>If the wsdl:binding has a targetNamespace then the categoryBag MUST
-     * also contain an additional keyedReference with a tModelKey of the XML
-     * Namespace category system and a keyValue of the target namespace of the
-     * wsdl:definitions element that contains the wsdl:binding. If the
-     * targetNamespace is absent from the binding, a categoryBag MUST NOT
-     * contain a keyedReference to the XML Namespace category system.</p>
-     *
-     * <p>The tModel MUST contain an overviewDoc with an overviewURL containing
-     * the location of the WSDL document that describes the wsdl:binding.</p>
-     *
-     * <h4>2.4.2.1 wsdl:binding Extensions</h4>
-     *
-     * <p>Information about the protocol and transport, if applicable, specified
-     * in an extension to the wsdl:binding is used to categorize the binding
-     * tModel as described in the following sections. This information is
-     * specified using two of the category systems defined in this Technical
-     * Note:</p> <ol> <li> Protocol Categorization</li> <li> Transport
-     * Categorization</li> </ol> <p>The valid values for the Protocol
-     * Categorization category system are tModelKeys of tModels that are
-     * categorized as protocol tModels. Similarly, the valid values for the
-     * Transport Categorization category system are tModelKeys of tModels that
-     * are categorized as transport tModels.</p> <p> The reason for having these
-     * two categorization schemes that take tModel keys as values is to allow
-     * other standard or proprietary protocols and transports to be defined and
-     * used in the same way as the standard SOAP and HTTP protocols and
-     * transport.</p>
-     *
-     * <h4>2.4.2.1.1 soap:binding</h4>
-     *
-     * <p>If the wsdl:binding contains a soap:binding extensibility element from
-     * the http://schemas.xmlsoap.org/wsdl/soap/ namespace then the categoryBag
-     * MUST include a keyedReference with a tModelKey of the Protocol
-     * Categorization category system and a keyValue of the tModelKey of the
-     * SOAP Protocol tModel.</p>
-     *
-     * <p>If the value of the transport attribute of the soap:binding element is
-     * http://schemas.xmlsoap.org/soap/http then the categoryBag MUST include a
-     * keyedReference with a tModelKey of the Transport Categorization category
-     * system and a keyValue of the tModelKey of the HTTP Transport tModel.</p>
-     *
-     * <p>If the value of the transport attribute is anything else, then the
-     * bindingTemplate MUST include an additional keyedReference with a
-     * tModelKey of the Transport Categorization category system and a keyValue
-     * of the tModelKey of an appropriate transport tModel.</p>
-     *
-     * <h4>2.4.2.1.2 http:binding</h4>
-     *
-     * <p>If the wsdl:binding contains an http:binding extensibility element
-     * from the http://schemas.xmlsoap.org/wsdl/http/ namespace then the
-     * categoryBag MUST include a keyedReference with a tModelKey of the
-     * Protocol Categorization category system and a keyValue of the tModelKey
-     * of the HTTP Protocol tModel.</p>
-     *
-     * <p>Note that this is a different tModel from the HTTP Transport tModel,
-     * and in this case there is no separate transport tModel, and therefore no
-     * keyedReference in the categoryBag from the Transport Categorization
-     * category system.</p>
-     *
-     * <h4>2.4.2.1.3 Other wsdl:binding Extensions</h4>
-     *
-     * <p>Other wsdl:binding extensibility elements are handled in a similar
-     * fashion. It is assumed that vendors who provide other bindings will
-     * provide the appropriate protocol and transport tModels.</p>
-     *
-     * Example Code
-     * <pre>
-     * URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
-     * String domain = url.getHost();
-     * ReadWSDL rw = new ReadWSDL();
-     * Definition wsdlDefinition = rw.readWSDL(url);
-     * properties.put("keyDomain", domain);
-     * properties.put("businessName", domain);
-     * properties.put("serverName", url.getHost());
-     * properties.put("serverPort", url.getPort());
-     * wsdlURL = wsdlDefinition.getDocumentBaseURI();
-     * WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
-     * Map allBindings = wsdlDefinition.getAllBindings();
-     * Set<TModel> createWSDLBindingTModels = wsdl2UDDI.createWSDLBindingTModels(url.toString(), allBindings);
-     * </pre>
-     * @param wsdlURL
-     * @param binding Map
-     * @return set of WSDL Binding tModels
-     * @throws WSDLException
-     */
-    public Set<TModel> createWSDLBindingTModels(String wsdlURL, Map<QName, Binding> bindings) throws WSDLException {
-
-        Set<TModel> tModels = new HashSet<TModel>();
-        //Register a tModel for each portType
-        for (QName qName : bindings.keySet()) {
-            String localpart = qName.getLocalPart();
-            String namespace = qName.getNamespaceURI();
-            // Build the tModel
-            TModel tModel = new TModel();
-            // Set the Key
-            tModel.setTModelKey(keyDomainURI + localpart);
-            // Set the Name
-            Name name = new Name();
-            name.setLang(lang);
-            name.setValue(localpart);
-            tModel.setName(name);
-            // Set the OverviewURL
-            OverviewURL overviewURL = new OverviewURL();
-            overviewURL.setUseType(AccessPointType.WSDL_DEPLOYMENT.toString());
-            overviewURL.setValue(wsdlURL);
-            OverviewDoc overviewDoc = new OverviewDoc();
-            overviewDoc.setOverviewURL(overviewURL);
-            tModel.getOverviewDoc().add(overviewDoc);
-            // Set the categoryBag
-            CategoryBag categoryBag = new CategoryBag();
-
-            if (namespace != null && !"".equals(namespace)) {
-                // A keyedReference with a tModelKey of the WSDL Entity Type category system and a keyValue of "binding".
-                KeyedReference namespaceReference = newKeyedReference(
-                        "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
-                categoryBag.getKeyedReference().add(namespaceReference);
-            }
-
-            // A keyedReference with a tModelKey of the WSDL Entity Type category system and a keyValue of "binding".
-            KeyedReference typesReference = newKeyedReference(
-                    "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "binding");
-            categoryBag.getKeyedReference().add(typesReference);
+        public String[] unRegisterBusinessServices(Definition wsdlDefinition) throws RemoteException, ConfigurationException, TransportException, MalformedURLException {
+
+                String[] businessServices = new String[wsdlDefinition.getAllServices().size()];
+                int i = 0;
+                for (Object serviceName : wsdlDefinition.getAllServices().keySet()) {
+                        QName serviceQName = (QName) serviceName;
+                        Service service = wsdlDefinition.getService(serviceQName);
+                        //unregister service
+                        URL serviceUrl = null;
+                        if (service.getPorts() != null && service.getPorts().size() > 0) {
+                                for (Object portName : service.getPorts().keySet()) {
+                                        //construct the accessURL
+                                        serviceUrl = new URL(getBindingURL((Port) service.getPorts().get(portName)));
+                                        businessServices[i++] = unRegisterBusinessService(serviceQName, (String) portName, serviceUrl);
+                                }
+                        }
+                }
+                return businessServices;
+        }
+
+        public String unRegisterBusinessService(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);
+                                        if (bindingTemplate.getTModelInstanceDetails() != null
+                                                && bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfo() != null) {
+                                                for (TModelInstanceInfo tModelInstanceInfo : bindingTemplate.getTModelInstanceDetails().getTModelInstanceInfo()) {
+                                                        String tModelKey = tModelInstanceInfo.getTModelKey();
+                                                        TModelDetail tModelDetail = clerk.getTModelDetail(tModelKey);
+                                                        //delete all tModels assuming they are the portType and Binding tModels.
+                                                        if (tModelDetail.getTModel() != null && tModelDetail.getTModel().size() > 0) {
+                                                                for (TModel tModel : tModelDetail.getTModel()) {
+                                                                        if (!tModel.getTModelKey().startsWith("uddi:uddi.org:")) {
+                                                                                clerk.unRegisterTModel(tModel.getTModelKey());
+                                                                        } else {
+                                                                                log.info("Skipping the removal of " + tModel.getTModelKey() + " because it starts with uddi.org");
+                                                                        }
+                                                                }
+                                                        }
+                                                }
+                                        }
+                                }
+                        }
+                }
+                return serviceKey;
+        }
+
+        public String getKeyDomainURI() {
+                return keyDomainURI;
+        }
+
+        public void setKeyDomain(String keyDomainURI) {
+                this.keyDomainURI = keyDomainURI;
+        }
+
+        public String getLang() {
+                return lang;
+        }
+
+        public void setLang(String lang) {
+                this.lang = lang;
+        }
+
+        /**
+         * <h3>2.4.2 wsdl:binding -> uddi:tModel</h3>
+         *
+         * <p>
+         * A wsdl:binding MUST be modeled as a uddi:tModel. The minimum
+         * information that must be captured about a binding is its entity type,
+         * its local name, its namespace, the location of the WSDL document that
+         * defines the binding, the portType that it implements, its protocol,
+         * and, optionally, the transport information. Capturing the entity type
+         * enables users to search for tModels that represent binding artifacts.
+         * Capturing the local name, namespace, and WSDL location enables users
+         * to locate the definition of the specified binding artifact. The link
+         * to the portType enables users to search for bindings that implement a
+         * particular portType.</p>
+         *
+         * <p>
+         * A wsdl:binding corresponds to a WSDL service interface definition as
+         * defined by the mapping in the Version 1 Best Practice. To maintain
+         * compatibility with the previous mapping, the binding must also be
+         * characterized as type "wsdlSpec".</p>
+         *
+         * <p>
+         * The wsdl:binding information is captured as follows:</p>
+         *
+         * <p>
+         * The uddi:name element of the tModel MUST be the value of the name
+         * attribute of the wsdl:binding.</p>
+         *
+         * <p>
+         * The tModel MUST contain a categoryBag, and the categoryBag MUST
+         * contain at least the following keyedReference elements:</p> <ol> <li>
+         * A keyedReference with a tModelKey of the WSDL Entity Type category
+         * system and a keyValue of "binding".</li> <li> A keyedReference with a
+         * tModelKey of the WSDL portType Reference category system and a
+         * keyValue of the tModelKey that models the wsdl:portType to which the
+         * wsdl:binding relates.</li> <li> A keyedReference with a tModelKey of
+         * the UDDI Types category system and a keyValue of "wsdlSpec" for
+         * backward compatibility[1].</li> <li> One or two keyedReferences as
+         * required to capture the protocol and optionally the transport
+         * information refer to the next section.</li> </ol>
+         *
+         * <p>
+         * If the wsdl:binding has a targetNamespace then the categoryBag MUST
+         * also contain an additional keyedReference with a tModelKey of the XML
+         * Namespace category system and a keyValue of the target namespace of
+         * the wsdl:definitions element that contains the wsdl:binding. If the
+         * targetNamespace is absent from the binding, a categoryBag MUST NOT
+         * contain a keyedReference to the XML Namespace category system.</p>
+         *
+         * <p>
+         * The tModel MUST contain an overviewDoc with an overviewURL containing
+         * the location of the WSDL document that describes the
+         * wsdl:binding.</p>
+         *
+         * <h4>2.4.2.1 wsdl:binding Extensions</h4>
+         *
+         * <p>
+         * Information about the protocol and transport, if applicable,
+         * specified in an extension to the wsdl:binding is used to categorize
+         * the binding tModel as described in the following sections. This
+         * information is specified using two of the category systems defined in
+         * this Technical Note:</p> <ol> <li> Protocol Categorization</li> <li>
+         * Transport Categorization</li> </ol>
+         * <p>
+         * The valid values for the Protocol Categorization category system are
+         * tModelKeys of tModels that are categorized as protocol tModels.
+         * Similarly, the valid values for the Transport Categorization category
+         * system are tModelKeys of tModels that are categorized as transport
+         * tModels.</p>
+         * <p>
+         * The reason for having these two categorization schemes that take
+         * tModel keys as values is to allow other standard or proprietary
+         * protocols and transports to be defined and used in the same way as
+         * the standard SOAP and HTTP protocols and transport.</p>
+         *
+         * <h4>2.4.2.1.1 soap:binding</h4>
+         *
+         * <p>
+         * If the wsdl:binding contains a soap:binding extensibility element
+         * from the http://schemas.xmlsoap.org/wsdl/soap/ namespace then the
+         * categoryBag MUST include a keyedReference with a tModelKey of the
+         * Protocol Categorization category system and a keyValue of the
+         * tModelKey of the SOAP Protocol tModel.</p>
+         *
+         * <p>
+         * If the value of the transport attribute of the soap:binding element
+         * is http://schemas.xmlsoap.org/soap/http then the categoryBag MUST
+         * include a keyedReference with a tModelKey of the Transport
+         * Categorization category system and a keyValue of the tModelKey of the
+         * HTTP Transport tModel.</p>
+         *
+         * <p>
+         * If the value of the transport attribute is anything else, then the
+         * bindingTemplate MUST include an additional keyedReference with a
+         * tModelKey of the Transport Categorization category system and a
+         * keyValue of the tModelKey of an appropriate transport tModel.</p>
+         *
+         * <h4>2.4.2.1.2 http:binding</h4>
+         *
+         * <p>
+         * If the wsdl:binding contains an http:binding extensibility element
+         * from the http://schemas.xmlsoap.org/wsdl/http/ namespace then the
+         * categoryBag MUST include a keyedReference with a tModelKey of the
+         * Protocol Categorization category system and a keyValue of the
+         * tModelKey of the HTTP Protocol tModel.</p>
+         *
+         * <p>
+         * Note that this is a different tModel from the HTTP Transport tModel,
+         * and in this case there is no separate transport tModel, and therefore
+         * no keyedReference in the categoryBag from the Transport
+         * Categorization category system.</p>
+         *
+         * <h4>2.4.2.1.3 Other wsdl:binding Extensions</h4>
+         *
+         * <p>
+         * Other wsdl:binding extensibility elements are handled in a similar
+         * fashion. It is assumed that vendors who provide other bindings will
+         * provide the appropriate protocol and transport tModels.</p>
+         *
+         * Example Code
+         * <pre>
+         * URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
+         * String domain = url.getHost();
+         * ReadWSDL rw = new ReadWSDL();
+         * Definition wsdlDefinition = rw.readWSDL(url);
+         * properties.put("keyDomain", domain);
+         * properties.put("businessName", domain);
+         * properties.put("serverName", url.getHost());
+         * properties.put("serverPort", url.getPort());
+         * wsdlURL = wsdlDefinition.getDocumentBaseURI();
+         * WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
+         * Map allBindings = wsdlDefinition.getAllBindings();
+         * Set<TModel> createWSDLBindingTModels = wsdl2UDDI.createWSDLBindingTModels(url.toString(), allBindings);
+         * </pre>
+         *
+         * @param wsdlURL
+         * @param bindings Map
+         * @return set of WSDL Binding tModels
+         * @throws WSDLException
+         */
+        public Set<TModel> createWSDLBindingTModels(String wsdlURL, Map<QName, Binding> bindings) throws WSDLException {
+
+                Set<TModel> tModels = new HashSet<TModel>();
+                //Register a tModel for each portType
+                for (QName qName : bindings.keySet()) {
+                        String localpart = qName.getLocalPart();
+                        String namespace = qName.getNamespaceURI();
+                        // Build the tModel
+                        TModel tModel = new TModel();
+                        // Set the Key
+                        tModel.setTModelKey(keyDomainURI + localpart);
+                        // Set the Name
+                        Name name = new Name();
+                        name.setLang(lang);
+                        name.setValue(localpart);
+                        tModel.setName(name);
+                        // Set the OverviewURL
+                        OverviewURL overviewURL = new OverviewURL();
+                        overviewURL.setUseType(AccessPointType.WSDL_DEPLOYMENT.toString());
+                        overviewURL.setValue(wsdlURL);
+                        OverviewDoc overviewDoc = new OverviewDoc();
+                        overviewDoc.setOverviewURL(overviewURL);
+                        tModel.getOverviewDoc().add(overviewDoc);
+                        // Set the categoryBag
+                        CategoryBag categoryBag = new CategoryBag();
+
+                        if (namespace != null && !"".equals(namespace)) {
+                                // A keyedReference with a tModelKey of the WSDL Entity Type category system and a keyValue of "binding".
+                                KeyedReference namespaceReference = newKeyedReference(
+                                        "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
+                                categoryBag.getKeyedReference().add(namespaceReference);
+                        }
+
+                        // A keyedReference with a tModelKey of the WSDL Entity Type category system and a keyValue of "binding".
+                        KeyedReference typesReference = newKeyedReference(
+                                "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "binding");
+                        categoryBag.getKeyedReference().add(typesReference);
 
             // A keyedReference with a tModelKey of the WSDL portType Reference category system and a keyValue 
-            // of the tModelKey that models the wsdl:portType to which the wsdl:binding relates.
-            Binding binding = bindings.get(qName);
-            String portTypeKey = keyDomainURI + binding.getPortType().getQName().getLocalPart();
-            KeyedReference namespaceReference = newKeyedReference(
-                    "uddi:uddi.org:wsdl:porttypereference", "uddi-org:wsdl:portTypeReference",
-                    portTypeKey);
-            categoryBag.getKeyedReference().add(namespaceReference);
+                        // of the tModelKey that models the wsdl:portType to which the wsdl:binding relates.
+                        Binding binding = bindings.get(qName);
+                        String portTypeKey = keyDomainURI + binding.getPortType().getQName().getLocalPart();
+                        KeyedReference namespaceReference = newKeyedReference(
+                                "uddi:uddi.org:wsdl:porttypereference", "uddi-org:wsdl:portTypeReference",
+                                portTypeKey);
+                        categoryBag.getKeyedReference().add(namespaceReference);
 
             //  A keyedReference with a tModelKey of the UDDI Types category system and a keyValue of 
-            // "wsdlSpec" for backward compatibility.
-            KeyedReference typesReferenceBackwardsCompatible = newKeyedReference(
-                    "uddi:uddi.org:categorization:types", "uddi-org:types", "wsdlSpec");
-            categoryBag.getKeyedReference().add(typesReferenceBackwardsCompatible);
-
-            // One or two keyedReferences as required to capture the protocol
-            for (Object object : binding.getExtensibilityElements()) {
-                SOAPBinding sb =null;
-                SOAP12Binding sb12 =null;
-                HTTPBinding hb = null;
-                
-                try{
-                    hb = (HTTPBinding) object;
-                }catch (Exception x){}
-                 try{
-                    sb = (SOAPBinding) object;
-                }catch (Exception x){}
-                   try{
-                    sb12 = (SOAP12Binding) object;
-                }catch (Exception x){}
-                if (sb!=null) {
+                        // "wsdlSpec" for backward compatibility.
+                        KeyedReference typesReferenceBackwardsCompatible = newKeyedReference(
+                                "uddi:uddi.org:categorization:types", "uddi-org:types", "wsdlSpec");
+                        categoryBag.getKeyedReference().add(typesReferenceBackwardsCompatible);
+
+                        // One or two keyedReferences as required to capture the protocol
+                        for (Object object : binding.getExtensibilityElements()) {
+                                SOAPBinding sb = null;
+                                SOAP12Binding sb12 = null;
+                                HTTPBinding hb = null;
+
+                                try {
+                                        hb = (HTTPBinding) object;
+                                } catch (Exception x) {
+                                }
+                                try {
+                                        sb = (SOAPBinding) object;
+                                } catch (Exception x) {
+                                }
+                                try {
+                                        sb12 = (SOAP12Binding) object;
+                                } catch (Exception x) {
+                                }
+                                if (sb != null) {
                     // If the wsdl:binding contains a soap:binding extensibility element from the 
-                    // 'http://schemas.xmlsoap.org/wsdl/soap/' namespace then the categoryBag MUST 
-                    //include a keyedReference with a tModelKey of the Protocol Categorization 
-                    // category system and a keyValue of the tModelKey of the SOAP Protocol tModel.
-                    SOAPBinding soapBinding = sb;
-                    KeyedReference soapProtocol = newKeyedReference(
-                            "uddi:uddi.org:wsdl:categorization:protocol", "uddi-org:protocol:soap", "uddi:uddi.org:protocol:soap");
-                    categoryBag.getKeyedReference().add(soapProtocol);
+                                        // 'http://schemas.xmlsoap.org/wsdl/soap/' namespace then the categoryBag MUST 
+                                        //include a keyedReference with a tModelKey of the Protocol Categorization 
+                                        // category system and a keyValue of the tModelKey of the SOAP Protocol tModel.
+                                        SOAPBinding soapBinding = sb;
+                                        KeyedReference soapProtocol = newKeyedReference(
+                                                "uddi:uddi.org:wsdl:categorization:protocol", "uddi-org:protocol:soap", "uddi:uddi.org:protocol:soap");
+                                        categoryBag.getKeyedReference().add(soapProtocol);
                     // If the value of the transport attribute of the soap:binding element 
-                    // is 'http://schemas.xmlsoap.org/soap/http' then the categoryBag MUST 
-                    // include a keyedReference with a tModelKey of the Transport Categorization 
-                    // category system and a keyValue of the tModelKey of the HTTP Transport tModel.
-                    if ("http://schemas.xmlsoap.org/soap/http".equals(soapBinding.getTransportURI())) {
-                        KeyedReference httpTransport = newKeyedReference(
-                                "uddi:uddi.org:wsdl:categorization:transport", "uddi-org:http", "uddi:uddi.org:transport:http");
-                        categoryBag.getKeyedReference().add(httpTransport);
-                    } else if (soapBinding.getTransportURI() != null) {
+                                        // is 'http://schemas.xmlsoap.org/soap/http' then the categoryBag MUST 
+                                        // include a keyedReference with a tModelKey of the Transport Categorization 
+                                        // category system and a keyValue of the tModelKey of the HTTP Transport tModel.
+                                        if ("http://schemas.xmlsoap.org/soap/http".equals(soapBinding.getTransportURI())) {
+                                                KeyedReference httpTransport = newKeyedReference(
+                                                        "uddi:uddi.org:wsdl:categorization:transport", "uddi-org:http", "uddi:uddi.org:transport:http");
+                                                categoryBag.getKeyedReference().add(httpTransport);
+                                        } else if (soapBinding.getTransportURI() != null) {
                         // TODO If the value of the transport attribute is anything else, 
-                        // then the bindingTemplate MUST include an additional keyedReference with a tModelKey 
-                        // of the Transport Categorization category system and a keyValue of the tModelKey of 
-                        // an appropriate transport tModel.
-                        log.warn("not implemented, binding transport is " + soapBinding.getTransportURI());
-                    }
-
+                                                // then the bindingTemplate MUST include an additional keyedReference with a tModelKey 
+                                                // of the Transport Categorization category system and a keyValue of the tModelKey of 
+                                                // an appropriate transport tModel.
+                                                log.warn("not implemented, binding transport is " + soapBinding.getTransportURI());
+                                        }
 
-                } else if (hb!=null) {
+                                } else if (hb != null) {
 
                     // If the wsdl:binding contains an http:binding extensibility element from the 
-                    // http://schemas.xmlsoap.org/wsdl/http/ namespace then the categoryBag MUST 
-                    // include a keyedReference with a tModelKey of the Protocol Categorization 
-                    // category system and a keyValue of the tModelKey of the HTTP Protocol tModel.
-                    KeyedReference soapProtocol = newKeyedReference(
-                            "uddi:uddi.org:wsdl:categorization:protocol", "uddi-org:protocol:http", "uddi:uddi.org:protocol:http");
-                    categoryBag.getKeyedReference().add(soapProtocol);
-                }
-                else if (sb12!=null) {
+                                        // http://schemas.xmlsoap.org/wsdl/http/ namespace then the categoryBag MUST 
+                                        // include a keyedReference with a tModelKey of the Protocol Categorization 
+                                        // category system and a keyValue of the tModelKey of the HTTP Protocol tModel.
+                                        KeyedReference soapProtocol = newKeyedReference(
+                                                "uddi:uddi.org:wsdl:categorization:protocol", "uddi-org:protocol:http", "uddi:uddi.org:protocol:http");
+                                        categoryBag.getKeyedReference().add(soapProtocol);
+                                } else if (sb12 != null) {
                     // If the wsdl:binding contains a soap:binding extensibility element from the 
-                    // 'http://schemas.xmlsoap.org/wsdl/soap/' namespace then the categoryBag MUST 
-                    //include a keyedReference with a tModelKey of the Protocol Categorization 
-                    // category system and a keyValue of the tModelKey of the SOAP Protocol tModel.
-                    
-                    KeyedReference soapProtocol = newKeyedReference(
-                            "uddi:uddi.org:wsdl:categorization:protocol", "uddi-org:protocol:soap", "uddi:uddi.org:protocol:soap");
-                    categoryBag.getKeyedReference().add(soapProtocol);
+                                        // 'http://schemas.xmlsoap.org/wsdl/soap/' namespace then the categoryBag MUST 
+                                        //include a keyedReference with a tModelKey of the Protocol Categorization 
+                                        // category system and a keyValue of the tModelKey of the SOAP Protocol tModel.
+
+                                        KeyedReference soapProtocol = newKeyedReference(
+                                                "uddi:uddi.org:wsdl:categorization:protocol", "uddi-org:protocol:soap", "uddi:uddi.org:protocol:soap");
+                                        categoryBag.getKeyedReference().add(soapProtocol);
                     // If the value of the transport attribute of the soap:binding element 
-                    // is 'http://schemas.xmlsoap.org/soap/http' then the categoryBag MUST 
-                    // include a keyedReference with a tModelKey of the Transport Categorization 
-                    // category system and a keyValue of the tModelKey of the HTTP Transport tModel.
-                    if ("http://schemas.xmlsoap.org/soap/http".equals(sb12.getTransportURI())) {
-                        KeyedReference httpTransport = newKeyedReference(
-                                "uddi:uddi.org:wsdl:categorization:transport", "uddi-org:http", "uddi:uddi.org:transport:http");
-                        categoryBag.getKeyedReference().add(httpTransport);
-                    } else if (sb12.getTransportURI() != null) {
+                                        // is 'http://schemas.xmlsoap.org/soap/http' then the categoryBag MUST 
+                                        // include a keyedReference with a tModelKey of the Transport Categorization 
+                                        // category system and a keyValue of the tModelKey of the HTTP Transport tModel.
+                                        if ("http://schemas.xmlsoap.org/soap/http".equals(sb12.getTransportURI())) {
+                                                KeyedReference httpTransport = newKeyedReference(
+                                                        "uddi:uddi.org:wsdl:categorization:transport", "uddi-org:http", "uddi:uddi.org:transport:http");
+                                                categoryBag.getKeyedReference().add(httpTransport);
+                                        } else if (sb12.getTransportURI() != null) {
                         // TODO If the value of the transport attribute is anything else, 
-                        // then the bindingTemplate MUST include an additional keyedReference with a tModelKey 
-                        // of the Transport Categorization category system and a keyValue of the tModelKey of 
-                        // an appropriate transport tModel.
-                        log.warn("not implemented, binding transport is " + sb12.getTransportURI());
-                    }
-
-
-                }
-                else
-                {
-                    log.warn("Unrecongnized binding type: " + object.getClass().getCanonicalName() +". Generated"
-                            + "binding tModel may be missing the required (according to WSDL2UDDI spec) "
-                            + "uddi:uddi.org:wsdl:categorization:protocol keyedReference.");
-                    
-                    
-                }
-            }
-
-
-            tModel.setCategoryBag(categoryBag);
-            tModels.add(tModel);
-        }
-        return tModels;
-    }
-
-    /**
-     * <h3>2.4.1 wsdl:portType -> uddi:tModel</h3>
-     *
-     * <p>A wsdl:portType MUST be modeled as a uddi:tModel.</p>
-     *
-     * <p>The minimum information that must be captured about a portType is its
-     * entity type, its local name, its namespace, and the location of the WSDL
-     * document that defines the portType. Capturing the entity type enables
-     * users to search for tModels that represent portType artifacts. Capturing
-     * the local name, namespace, and WSDL location enables users to locate the
-     * definition of the specified portType artifact.</p>
-     *
-     * <p>The wsdl:portType information is captured as follows:</p>
-     *
-     * <p>The uddi:name element of the tModel MUST be the value of the name
-     * attribute of the wsdl:portType.</p>
-     *
-     * <p>The tModel MUST contain a categoryBag, and the categoryBag MUST
-     * contain a keyedReference with a tModelKey of the WSDL Entity Type
-     * category system and a keyValue of "portType".</p>
-     *
-     * <p>If the wsdl:portType has a targetNamespace then the categoryBag MUST
-     * also contain an additional keyedReference with a tModelKey of the XML
-     * Namespace category system and a keyValue of the target namespace of the
-     * wsdl:definitions element that contains the wsdl:portType. If the
-     * targetNamespace is absent from the portType, a categoryBag MUST NOT
-     * contain a keyedReference to the XML Namespace category system.</p>
-     *
-     * <p>The tModel MUST contain an overviewDoc with an overviewURL containing
-     * the location of the WSDL document that describes the wsdl:portType.</p>
-     * Example Code
-     * <pre>
-     * URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
-     * String domain = url.getHost();
-     * ReadWSDL rw = new ReadWSDL();
-     * Definition wsdlDefinition = rw.readWSDL(url);
-     * properties.put("keyDomain", domain);
-     * properties.put("businessName", domain);
-     * properties.put("serverName", url.getHost());
-     * properties.put("serverPort", url.getPort());
-     * wsdlURL = wsdlDefinition.getDocumentBaseURI();
-     * WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
-     * Map<QName, PortType> portTypes = (Map<QName, PortType>) wsdlDefinition.getAllPortTypes();
-     * Set<TModel> portTypeTModels = wsdl2UDDI.createWSDLPortTypeTModels(wsdlURL, portTypes);
-     * </pre>
-     *
-     * @param wsdlURL This is used to set the Overview URL
-     * @param portType Map
-     * @return set of WSDL PortType tModels
-     * @throws WSDLException
-     */
-    public Set<TModel> createWSDLPortTypeTModels(String wsdlURL, Map<QName, PortType> portTypes) throws WSDLException {
-        Set<TModel> tModels = new HashSet<TModel>();
-        // Create a tModel for each portType
-        for (QName qName : portTypes.keySet()) {
-            // Build the tModel
-            TModel tModel = new TModel();
-            String localpart = qName.getLocalPart();
-            String namespace = qName.getNamespaceURI();
-            // Set the Key
-            tModel.setTModelKey(keyDomainURI + localpart);
+                                                // then the bindingTemplate MUST include an additional keyedReference with a tModelKey 
+                                                // of the Transport Categorization category system and a keyValue of the tModelKey of 
+                                                // an appropriate transport tModel.
+                                                log.warn("not implemented, binding transport is " + sb12.getTransportURI());
+                                        }
+
+                                } else {
+                                        log.warn("Unrecongnized binding type: " + object.getClass().getCanonicalName() + ". Generated"
+                                                + "binding tModel may be missing the required (according to WSDL2UDDI spec) "
+                                                + "uddi:uddi.org:wsdl:categorization:protocol keyedReference.");
+
+                                }
+                        }
+
+                        tModel.setCategoryBag(categoryBag);
+                        tModels.add(tModel);
+                }
+                return tModels;
+        }
+
+        /**
+         * <h3>2.4.1 wsdl:portType -> uddi:tModel</h3>
+         *
+         * <p>
+         * A wsdl:portType MUST be modeled as a uddi:tModel.</p>
+         *
+         * <p>
+         * The minimum information that must be captured about a portType is its
+         * entity type, its local name, its namespace, and the location of the
+         * WSDL document that defines the portType. Capturing the entity type
+         * enables users to search for tModels that represent portType
+         * artifacts. Capturing the local name, namespace, and WSDL location
+         * enables users to locate the definition of the specified portType
+         * artifact.</p>
+         *
+         * <p>
+         * The wsdl:portType information is captured as follows:</p>
+         *
+         * <p>
+         * The uddi:name element of the tModel MUST be the value of the name
+         * attribute of the wsdl:portType.</p>
+         *
+         * <p>
+         * The tModel MUST contain a categoryBag, and the categoryBag MUST
+         * contain a keyedReference with a tModelKey of the WSDL Entity Type
+         * category system and a keyValue of "portType".</p>
+         *
+         * <p>
+         * If the wsdl:portType has a targetNamespace then the categoryBag MUST
+         * also contain an additional keyedReference with a tModelKey of the XML
+         * Namespace category system and a keyValue of the target namespace of
+         * the wsdl:definitions element that contains the wsdl:portType. If the
+         * targetNamespace is absent from the portType, a categoryBag MUST NOT
+         * contain a keyedReference to the XML Namespace category system.</p>
+         *
+         * <p>
+         * The tModel MUST contain an overviewDoc with an overviewURL containing
+         * the location of the WSDL document that describes the
+         * wsdl:portType.</p>
+         * Example Code
+         * <pre>
+         * URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
+         * String domain = url.getHost();
+         * ReadWSDL rw = new ReadWSDL();
+         * Definition wsdlDefinition = rw.readWSDL(url);
+         * properties.put("keyDomain", domain);
+         * properties.put("businessName", domain);
+         * properties.put("serverName", url.getHost());
+         * properties.put("serverPort", url.getPort());
+         * wsdlURL = wsdlDefinition.getDocumentBaseURI();
+         * WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
+         * Map<QName, PortType> portTypes = (Map<QName, PortType>) wsdlDefinition.getAllPortTypes();
+         * Set<TModel> portTypeTModels = wsdl2UDDI.createWSDLPortTypeTModels(wsdlURL, portTypes);
+         * </pre>
+         *
+         * @param wsdlURL This is used to set the Overview URL
+         * @param portTypes Map
+         * @return set of WSDL PortType tModels
+         * @throws WSDLException
+         */
+        public Set<TModel> createWSDLPortTypeTModels(String wsdlURL, Map<QName, PortType> portTypes) throws WSDLException {
+                Set<TModel> tModels = new HashSet<TModel>();
+                // Create a tModel for each portType
+                for (QName qName : portTypes.keySet()) {
+                        // Build the tModel
+                        TModel tModel = new TModel();
+                        String localpart = qName.getLocalPart();
+                        String namespace = qName.getNamespaceURI();
+                        // Set the Key
+                        tModel.setTModelKey(keyDomainURI + localpart);
             // Set the Name. The uddi:name element of the tModel MUST be the value of
-            // the name attribute of the wsdl:portType.
-            Name name = new Name();
-            name.setLang(lang);
-            name.setValue(localpart);
-            tModel.setName(name);
+                        // the name attribute of the wsdl:portType.
+                        Name name = new Name();
+                        name.setLang(lang);
+                        name.setValue(localpart);
+                        tModel.setName(name);
             // Set the OverviewURL. The tModel MUST contain an overviewDoc with an 
-            // overviewURL containing the location of the WSDL document that 
-            // describes the wsdl:portType.
-            OverviewURL overviewURL = new OverviewURL();
-            overviewURL.setUseType(AccessPointType.WSDL_DEPLOYMENT.toString());
-            overviewURL.setValue(wsdlURL);
-            OverviewDoc overviewDoc = new OverviewDoc();
-            overviewDoc.setOverviewURL(overviewURL);
-            tModel.getOverviewDoc().add(overviewDoc);
-            // Create the categoryBag, The tModel MUST contain a categoryBag
-            CategoryBag categoryBag = new CategoryBag();
+                        // overviewURL containing the location of the WSDL document that 
+                        // describes the wsdl:portType.
+                        OverviewURL overviewURL = new OverviewURL();
+                        overviewURL.setUseType(AccessPointType.WSDL_DEPLOYMENT.toString());
+                        overviewURL.setValue(wsdlURL);
+                        OverviewDoc overviewDoc = new OverviewDoc();
+                        overviewDoc.setOverviewURL(overviewURL);
+                        tModel.getOverviewDoc().add(overviewDoc);
+                        // Create the categoryBag, The tModel MUST contain a categoryBag
+                        CategoryBag categoryBag = new CategoryBag();
 
             // the categoryBag MUST contain a keyedReference with a tModelKey of the WSDL 
-            // Entity Type category system and a keyValue of "portType".
-            KeyedReference typesReference = newKeyedReference(
-                    "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "portType");
-            categoryBag.getKeyedReference().add(typesReference);
+                        // Entity Type category system and a keyValue of "portType".
+                        KeyedReference typesReference = newKeyedReference(
+                                "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "portType");
+                        categoryBag.getKeyedReference().add(typesReference);
 
             // If the wsdl:portType has a targetNamespace then the categoryBag MUST also contain an 
-            // additional keyedReference with a tModelKey of the XML Namespace category system and a 
-            // keyValue of the target namespace of the wsdl:definitions element that contains the 
-            // wsdl:portType. If the targetNamespace is absent from the portType, a categoryBag 
-            // MUST NOT contain a keyedReference to the XML Namespace category system.
-            if (namespace != null && !"".equals(namespace)) {
-                KeyedReference namespaceReference = newKeyedReference(
-                        "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
-                categoryBag.getKeyedReference().add(namespaceReference);
-            }
-
-            tModel.setCategoryBag(categoryBag);
-            tModels.add(tModel);
-        }
-        return tModels;
-    }
-
-    protected static KeyedReference newKeyedReference(String tModelKey, String keyName, String value) {
-        KeyedReference typesReference = new KeyedReference();
-        typesReference.setTModelKey(tModelKey);
-        typesReference.setKeyName(keyName);
-        typesReference.setKeyValue(value);
-        return typesReference;
-    }
-
-    /**
-     * Builds a finder to find the binding tModels for a portType.
-     *
-     * @param processName
-     * @return
-     */
-    public static FindTModel createFindBindingTModelForPortType(String portType, String namespace) {
-
-        FindTModel findTModel = new FindTModel();
-        CategoryBag categoryBag = new CategoryBag();
-
-        if (namespace != null && namespace.length() != 0) {
-            KeyedReference namespaceReference = newKeyedReference(
-                    "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
-            categoryBag.getKeyedReference().add(namespaceReference);
-        }
-        KeyedReference bindingReference = newKeyedReference(
-                "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "binding");
-        categoryBag.getKeyedReference().add(bindingReference);
-
-        KeyedReference portTypeReference = newKeyedReference(
-                "uddi:uddi.org:wsdl:porttypereference", "uddi-org:wsdl:portTypeReference", portType);
-        categoryBag.getKeyedReference().add(portTypeReference);
-
-        findTModel.setCategoryBag(categoryBag);
-
-        if (log.isDebugEnabled()) {
-            log.debug(new PrintUDDI<FindTModel>().print(findTModel));
-        }
-        return findTModel;
-    }
-
-    /**
-     * Builds a finder to find the portType tModels for a portType.
-     *
-     * @param processName
-     * @return
-     */
-    public static FindTModel createFindPortTypeTModelForPortType(String portTypeName, String namespace) {
-
-        FindTModel findTModel = new FindTModel();
-        Name name = new Name();
-        name.setLang("en");
-        name.setValue(portTypeName);
-        findTModel.setName(name);
-
-        CategoryBag categoryBag = new CategoryBag();
-        if (namespace != null && namespace.length() != 0) {
-            KeyedReference namespaceReference = newKeyedReference(
-                    "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
-            categoryBag.getKeyedReference().add(namespaceReference);
-        }
-        KeyedReference bindingReference = newKeyedReference(
-                "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "portType");
-        categoryBag.getKeyedReference().add(bindingReference);
-
-        findTModel.setCategoryBag(categoryBag);
-
-        if (log.isDebugEnabled()) {
-            log.debug(new PrintUDDI<FindTModel>().print(findTModel));
-        }
-        return findTModel;
-    }
-
-    /**
-     * Perform a lookup by serviceKey, and will return null if not found.
-     *
-     * @param serviceKey
-     * @return
-     * @throws RemoteException
-     * @throws ConfigurationException
-     * @throws TransportException
-     */
-    private BusinessService lookupService(String serviceKey) throws RemoteException, ConfigurationException, TransportException {
-
-        //Checking if this serviceKey already exist
-        BusinessService service = clerk.getServiceDetail(serviceKey);
-        return service;
-    }
-
-    /**
-     * Creates a business service based off of a WSDL definition<Br>No changes are made to the UDDI
-     * endpoints using this method
-     *<br>
-     * Example Code:
-     * <pre>
-     * URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
-     * String domain = url.getHost();
-     * ReadWSDL rw = new ReadWSDL();
-     * Definition wsdlDefinition = rw.readWSDL(url);
-     * properties.put("keyDomain", domain);
-     * properties.put("businessName", domain);
-     * properties.put("serverName", url.getHost());
-     * properties.put("serverPort", url.getPort());
-     * wsdlURL = wsdlDefinition.getDocumentBaseURI();
-     * WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
-     * BusinessServices businessServices = wsdl2UDDI.createBusinessServices(wsdlDefinition);
-     * </pre>
-     * @param wsdlDefinition must not be null
-     * @return a business service
-     * @throws MalformedURLException 
-     * @throws IllegalArgumentException if the wsdlDefinition is null
-     */
-    public BusinessServices createBusinessServices(Definition wsdlDefinition) throws MalformedURLException {
-        if (wsdlDefinition == null) {
-            throw new IllegalArgumentException();
-        }
-        BusinessServices businessServices = new BusinessServices();
-        for (Object serviceName : wsdlDefinition.getAllServices().keySet()) {
-            QName serviceQName = (QName) serviceName;
-            Service service = wsdlDefinition.getService(serviceQName);
-            BusinessService businessService = createBusinessService(serviceQName, wsdlDefinition);
+                        // additional keyedReference with a tModelKey of the XML Namespace category system and a 
+                        // keyValue of the target namespace of the wsdl:definitions element that contains the 
+                        // wsdl:portType. If the targetNamespace is absent from the portType, a categoryBag 
+                        // MUST NOT contain a keyedReference to the XML Namespace category system.
+                        if (namespace != null && !"".equals(namespace)) {
+                                KeyedReference namespaceReference = newKeyedReference(
+                                        "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
+                                categoryBag.getKeyedReference().add(namespaceReference);
+                        }
+
+                        tModel.setCategoryBag(categoryBag);
+                        tModels.add(tModel);
+                }
+                return tModels;
+        }
+
+        protected static KeyedReference newKeyedReference(String tModelKey, String keyName, String value) {
+                KeyedReference typesReference = new KeyedReference();
+                typesReference.setTModelKey(tModelKey);
+                typesReference.setKeyName(keyName);
+                typesReference.setKeyValue(value);
+                return typesReference;
+        }
+
+        /**
+         * Builds a finder to find the binding tModels for a portType.
+         *
+         * @param portType
+         * @param namespace
+         * @return tModel info
+         */
+        public static FindTModel createFindBindingTModelForPortType(String portType, String namespace) {
+
+                FindTModel findTModel = new FindTModel();
+                CategoryBag categoryBag = new CategoryBag();
+
+                if (namespace != null && namespace.length() != 0) {
+                        KeyedReference namespaceReference = newKeyedReference(
+                                "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
+                        categoryBag.getKeyedReference().add(namespaceReference);
+                }
+                KeyedReference bindingReference = newKeyedReference(
+                        "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "binding");
+                categoryBag.getKeyedReference().add(bindingReference);
+
+                KeyedReference portTypeReference = newKeyedReference(
+                        "uddi:uddi.org:wsdl:porttypereference", "uddi-org:wsdl:portTypeReference", portType);
+                categoryBag.getKeyedReference().add(portTypeReference);
+
+                findTModel.setCategoryBag(categoryBag);
+
+                if (log.isDebugEnabled()) {
+                        log.debug(new PrintUDDI<FindTModel>().print(findTModel));
+                }
+                return findTModel;
+        }
+
+        /**
+         * Builds a finder to find the portType tModels for a portType.
+         *
+         * @param portTypeName
+         * @param namespace
+         * @return tModel info
+         */
+        public static FindTModel createFindPortTypeTModelForPortType(String portTypeName, String namespace) {
+
+                FindTModel findTModel = new FindTModel();
+                Name name = new Name();
+                name.setLang("en");
+                name.setValue(portTypeName);
+                findTModel.setName(name);
+
+                CategoryBag categoryBag = new CategoryBag();
+                if (namespace != null && namespace.length() != 0) {
+                        KeyedReference namespaceReference = newKeyedReference(
+                                "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
+                        categoryBag.getKeyedReference().add(namespaceReference);
+                }
+                KeyedReference bindingReference = newKeyedReference(
+                        "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "portType");
+                categoryBag.getKeyedReference().add(bindingReference);
+
+                findTModel.setCategoryBag(categoryBag);
+
+                if (log.isDebugEnabled()) {
+                        log.debug(new PrintUDDI<FindTModel>().print(findTModel));
+                }
+                return findTModel;
+        }
+
+        /**
+         * Perform a lookup by serviceKey, and will return null if not found.
+         *
+         * @param serviceKey
+         * @return business service
+         * @throws RemoteException
+         * @throws ConfigurationException
+         * @throws TransportException
+         */
+        private BusinessService lookupService(String serviceKey) throws RemoteException, ConfigurationException, TransportException {
+
+                //Checking if this serviceKey already exist
+                BusinessService service = clerk.getServiceDetail(serviceKey);
+                return service;
+        }
+
+        /**
+         * Creates a business service based off of a WSDL definition<Br>No
+         * changes are made to the UDDI endpoints using this method
+         * <br>
+         * Example Code:
+         * <pre>
+         * URL url = new URL("http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl");
+         * String domain = url.getHost();
+         * ReadWSDL rw = new ReadWSDL();
+         * Definition wsdlDefinition = rw.readWSDL(url);
+         * properties.put("keyDomain", domain);
+         * properties.put("businessName", domain);
+         * properties.put("serverName", url.getHost());
+         * properties.put("serverPort", url.getPort());
+         * wsdlURL = wsdlDefinition.getDocumentBaseURI();
+         * WSDL2UDDI wsdl2UDDI = new WSDL2UDDI(null, new URLLocalizerDefaultImpl(), properties);
+         * BusinessServices businessServices = wsdl2UDDI.createBusinessServices(wsdlDefinition);
+         * </pre>
+         *
+         * @param wsdlDefinition must not be null
+         * @return a business service
+         * @throws MalformedURLException
+         * @throws IllegalArgumentException if the wsdlDefinition is null
+         */
+        public BusinessServices createBusinessServices(Definition wsdlDefinition) throws MalformedURLException {
+                if (wsdlDefinition == null) {
+                        throw new IllegalArgumentException();
+                }
+                BusinessServices businessServices = new BusinessServices();
+                for (Object serviceName : wsdlDefinition.getAllServices().keySet()) {
+                        QName serviceQName = (QName) serviceName;
+                        Service service = wsdlDefinition.getService(serviceQName);
+                        BusinessService businessService = createBusinessService(serviceQName, wsdlDefinition);
             //service.getExtensibilityElements().
-            //add the bindingTemplates
-            URL serviceUrl = null;
-            if (service.getPorts() != null && service.getPorts().size() > 0) {
-                businessService.setBindingTemplates(new BindingTemplates());
-                for (Object portName : service.getPorts().keySet()) {
-                    BindingTemplate bindingTemplate = createWSDLBinding(serviceQName, (String) portName, serviceUrl, wsdlDefinition);
-                    businessService.getBindingTemplates().getBindingTemplate().add(bindingTemplate);
-                }
-            }
-            businessServices.getBusinessService().add(businessService);
-        }
-
-        return businessServices;
-    }
-
-    /**
-     * Creates a UDDI Business Service.
-     *
-     * @param serviceName
-     * @param wsldDefinition
-     * @return
-     */
-    protected BusinessService createBusinessService(QName serviceQName, Definition wsdlDefinition) {
-
-        log.debug("Constructing Service UDDI Information for " + serviceQName);
-        BusinessService service = new BusinessService();
-        // BusinessKey
-        service.setBusinessKey(businessKey);
-        // ServiceKey
-        service.setServiceKey(UDDIKeyConvention.getServiceKey(properties, serviceQName.getLocalPart()));
-        // Description
-        String serviceDescription = properties.getProperty(Property.SERVICE_DESCRIPTION, Property.DEFAULT_SERVICE_DESCRIPTION);
-        // Override with the service description from the WSDL if present
-        if (wsdlDefinition.getService(serviceQName) != null) {
-            Element docElement = wsdlDefinition.getService(serviceQName).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(serviceQName.getLocalPart());
-        service.getName().add(sName);
-
-        CategoryBag categoryBag = new CategoryBag();
-
-        String namespace = serviceQName.getNamespaceURI();
-        if (namespace != null && namespace.length() != 0) {
-            KeyedReference namespaceReference = newKeyedReference(
-                    "uddi:uddi.org:xml:namespace", "uddi-org:xml:namespace", namespace);
-            categoryBag.getKeyedReference().add(namespaceReference);
-        }
-
-        KeyedReference serviceReference = newKeyedReference(
-                "uddi:uddi.org:wsdl:types", "uddi-org:wsdl:types", "service");
-        categoryBag.getKeyedReference().add(serviceReference);
-
-        KeyedReference localNameReference = newKeyedReference(
-                "uddi:uddi.org:xml:localname", "uddi-org:xml:localName", serviceQName.getLocalPart());
-        categoryBag.getKeyedReference().add(localNameReference);
-
-        service.setCategoryBag(categoryBag);
-
-        return service;
-    }
-
-    protected BindingTemplate createWSDLBinding(QName serviceQName, String portName, URL serviceUrl, Definition wsdlDefinition) throws MalformedURLException {
-
-        BindingTemplate bindingTemplate = new BindingTemplate();
-        // Set BusinessService Key
-        bindingTemplate.setServiceKey(UDDIKeyConvention.getServiceKey(properties, serviceQName.getLocalPart()));
-
-        if (serviceUrl != null) {
-            // Set AccessPoint
-            AccessPoint accessPoint = new AccessPoint();
-            accessPoint.setUseType(AccessPointType.END_POINT.toString());
-            accessPoint.setValue(urlLocalizer.rewrite(serviceUrl));
-            bindingTemplate.setAccessPoint(accessPoint);
-            // Set Binding Key
-            String bindingKey = UDDIKeyConvention.getBindingKey(properties, serviceQName, portName, serviceUrl);
-            bindingTemplate.setBindingKey(bindingKey);
-        }
-
-        Service service = wsdlDefinition.getService(serviceQName);
-        if (service != null) {
-            TModelInstanceDetails tModelInstanceDetails = new TModelInstanceDetails();
-
-            Port port = service.getPort(portName);
-            if (port != null) {
-                if (serviceUrl == null) {
-                    for (Object element : port.getExtensibilityElements()) {
-                    	String location = null;
-                        if (element instanceof SOAPAddress) {
-                            SOAPAddress address = (SOAPAddress) element;
-                            location = urlLocalizer.rewrite(new URL(address.getLocationURI()));
-                        } 
-                        else if (element instanceof HTTPAddress) {
-                        	HTTPAddress address = (HTTPAddress) element;
-                        	urlLocalizer.rewrite(new URL(location = address.getLocationURI()));
-                        }
-                        else if (element instanceof SOAP12Address) {
-                        	SOAP12Address address = (SOAP12Address) element;
-                            location = urlLocalizer.rewrite(new URL(address.getLocationURI()));
-                        }
-                        if (location != null ) {
-                            try {
-                            	URL locationURI = new URL(location);
-                                AccessPoint accessPoint = new AccessPoint();
-                                accessPoint.setUseType(AccessPointType.END_POINT.toString());
-                                accessPoint.setValue(urlLocalizer.rewrite(locationURI));
-                                bindingTemplate.setAccessPoint(accessPoint);
-                                // Set Binding Key
-                                String bindingKey = UDDIKeyConvention.getBindingKey(properties, serviceQName, portName, locationURI);
-                                bindingTemplate.setBindingKey(bindingKey);
-                                break;
-                            } catch (MalformedURLException e) {
-                                log.error(e.getMessage());
-                            }
-                        }
-                    }
-
-                }
-                Binding binding = port.getBinding();
-                // Set the Binding Description
-                String bindingDescription = properties.getProperty(Property.BINDING_DESCRIPTION, Property.DEFAULT_BINDING_DESCRIPTION);
+                        //add the bindingTemplates
+                        URL serviceUrl = null;
+                        if (service.getPorts() != null && service.getPorts().size() > 0) {
+                                businessService.setBindingTemplates(new BindingTemplates());
+                                for (Object portName : service.getPorts().keySet()) {
+                                        BindingTemplate bindingTemplate = createWSDLBinding(serviceQName, (String) portName, serviceUrl, wsdlDefinition);
+                                        businessService.getBindingTemplates().getBindingTemplate().add(bindingTemplate);
+                                }
+                        }
+                        businessServices.getBusinessService().add(businessService);
+                }
+
+                return businessServices;
+        }
+
+        /**
+         * Creates a UDDI Business Service.
+         *
+         * @param serviceQName
+         * @param wsdlDefinition
+         * @return a business service
+         */
+        protected BusinessService createBusinessService(QName serviceQName, Definition wsdlDefinition) {
+
+                log.debug("Constructing Service UDDI Information for " + serviceQName);
+                BusinessService service = new BusinessService();
+                // BusinessKey
+                service.setBusinessKey(businessKey);
+                // ServiceKey
+                service.setServiceKey(UDDIKeyConvention.getServiceKey(properties, serviceQName.getLocalPart()));
+                // Description
+                String serviceDescription = properties.getProperty(Property.SERVICE_DESCRIPTION, Property.DEFAULT_SERVICE_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);
-
-                bindingTemplate.setTModelInstanceDetails(tModelInstanceDetails);
-            } else {
-                log.error("Could not find Port with portName: " + portName);
-            }
-        } else {
-            log.error("Could not find Service with serviceName: " + serviceQName.getLocalPart());
-        }
-
-        
-        return UDDIClient.addSOAPtModels(bindingTemplate);
-    }
-
-    /**
-     * Obtains the accessUrl from the WSDL
-     *
-     * @param port
-     * @return
-     * @throws MalformedURLException
-     */
-    private String getBindingURL(Port port) throws MalformedURLException {
-
-        String bindingUrl = null;
-        for (Object element : port.getExtensibilityElements()) {
-            if (element instanceof SOAPAddress) {
-                SOAPAddress address = (SOAPAddress) element;
-                URL locationURI = new URL(address.getLocationURI());

[... 167 lines stripped ...]


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org