private void setupWsdlDefinition()

in modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java [998:1206]


    private void setupWsdlDefinition() {
        // Note that there may be no WSDL provided, for example when called from 
        // Service.create(QName serviceName).

        if (log.isDebugEnabled()) {
            log.debug("setupWsdlDefinition()");
        }
        
        if (composite.isServiceProvider()) {
            
            //  Currently, there is a bug which allows the wsdlDefinition to be placed
            //  on either the impl class composite or the sei composite, or both. We need to
            //  look in both places and find the correct one, if it exists.
            
            if(serviceQName != null
                    &&
                    composite.getWsdlDefinition(serviceQName) != null) {
                if(log.isDebugEnabled()) {
                    log.debug("Found WSDL definition by service QName");
                }
                Definition def = composite.getWsdlDefinition(serviceQName);
                URL url = composite.getWsdlURL(serviceQName);
                this.wsdlURL = url != null ? url.toString() : null;
                try {
                    if (log.isDebugEnabled() ) {
                        if (configContext != null) {
                            log.debug("new WSDL4JWrapper-ConfigContext not null1"); 
                        } else {
                            log.debug("new WSDL4JWrapper-ConfigContext null1"); 
                        }
                    }

                    this.wsdlWrapper = new WSDL4JWrapper(url,
                                                         def, 
                                                         configContext,
                                                         this.catalogManager);
                } catch (WSDLException e) {
                    throw ExceptionFactory.makeWebServiceException(
                            Messages.getMessage("wsdlException", e.getMessage()), e);
                }
            }

            else if (((composite.getWebServiceAnnot() != null) &&
                    DescriptionUtils.isEmpty(composite.getWebServiceAnnot().endpointInterface()))
                    ||
                    (!(composite.getWebServiceProviderAnnot() == null))) {
                //This is either an implicit SEI, or a WebService Provider
                if (composite.getWsdlDefinition() != null) {
                    URL url = composite.getWsdlURL();
                    this.wsdlURL = url == null ? null : url.toString();

                    try {
                        if (log.isDebugEnabled() ) {
                            if (configContext != null) {
                                log.debug("new WSDL4JWrapper-ConfigContext not null1"); 
                            } else {
                                log.debug("new WSDL4JWrapper-ConfigContext null1"); 
                            }
                        }

                        this.wsdlWrapper = new WSDL4JWrapper(url,
                                                             composite.getWsdlDefinition(), 
                                                             configContext,
                                                             this.catalogManager);
                    } catch (WSDLException e) {
                        throw ExceptionFactory.makeWebServiceException(
                                Messages.getMessage("wsdlException", e.getMessage()), e);
                    }
                } else {
                	String wsdlLocation = null;
                	wsdlLocation = composite.getWebServiceAnnot() != null ? composite.getWebServiceAnnot().wsdlLocation() :
                		composite.getWebServiceProviderAnnot().wsdlLocation();
                	if(wsdlLocation != null
                			&&
                			!"".equals(wsdlLocation)) {
                	    setWSDLDefinitionOnDBC(wsdlLocation);
                	}
                }

            } else if (composite.getWebServiceAnnot() != null) {
                //This impl class specifies an SEI...this is a special case. There is a bug
                //in the tooling that allows for the wsdllocation to be specifed on either the
                //impl. class, or the SEI, or both. So, we need to look for the wsdl as follows:
                //          1. If the Wsdl exists on the SEI, then check for it on the impl.
                //          2. If it is not found in either location, in that order, then generate

                DescriptionBuilderComposite seic =
                        getDBCMap().get(composite.getWebServiceAnnot().endpointInterface());

                try {
                    if (seic == null) {
                        if (log.isDebugEnabled()) {
                            log.debug("The SEI class " + composite.getWebServiceAnnot().endpointInterface() + " was not found.");
                        }
                    }
                    if (seic != null && seic.getWsdlDefinition() != null) {
                        // set the wsdl def from the SEI composite
                        if (log.isDebugEnabled()) {
                            log.debug("Get the wsdl definition from the SEI composite.");
                        }
                        URL url = seic.getWsdlURL(); 
                        this.wsdlURL = url.toString();
                        if (log.isDebugEnabled() ) {
                            if (configContext != null) {
                                log.debug("new WSDL4JWrapper-ConfigContext not null2"); 
                            } else {
                                log.debug("new WSDL4JWrapper-ConfigContext null2"); 
                            }
                        }
                        this.wsdlWrapper =
                                new WSDL4JWrapper(seic.getWsdlURL(), 
                                                  seic.getWsdlDefinition(), 
                                                  configContext,
                                                  this.catalogManager);
                            
                    } else if (composite.getWsdlDefinition() != null) {
                        
                        //set the wsdl def from the impl. class composite
                        if (log.isDebugEnabled()) {
                            log.debug("Get the wsdl definition from the impl class composite.");
                        }
                        if (log.isDebugEnabled() ) {
                            if (configContext != null) {
                                log.debug("new WSDL4JWrapper-ConfigContext not null3"); 
                            } else {
                                log.debug("new WSDL4JWrapper-ConfigContext null3"); 
                            }
                        }
                        URL url = composite.getWsdlURL();
                        this.wsdlURL = url == null ? null : url.toString();
                        this.wsdlWrapper = new WSDL4JWrapper(composite.getWsdlURL(),
                                                             composite.getWsdlDefinition(), 
                                                             configContext,
                                                             this.catalogManager);
                                                            
                    } else {
                    	String wsdlLocation = null;
                    	// first check to see if the wsdlLocation is on the SEI
                    	if(seic != null
                    			&&
                    			seic.getWebServiceAnnot() != null) {
                    	    if (log.isDebugEnabled()) {
                    	        log.debug("Get the wsdl location from the SEI composite.");
                    	    }
                    	    wsdlLocation = seic.getWebServiceAnnot().wsdlLocation();
                    	}
                    	                    	
                    	// now check the impl
                    	if(wsdlLocation == null
                    	        ||
                    	        "".equals(wsdlLocation)) {
                    	    if (log.isDebugEnabled()) {
                    	        log.debug("Get the wsdl location from the impl class composite.");
                            }
                    	    wsdlLocation = composite.getWebServiceAnnot().wsdlLocation();
                    	}
                    	
                    	if(wsdlLocation != null
                    	        &&
                    	        !"".equals(wsdlLocation)) {
                    	    if (log.isDebugEnabled()) {
                    	        log.debug("wsdl location =" + wsdlLocation);
                    	    }
                    	    
                    	    this.wsdlURL = wsdlLocation;
                    	    setWSDLDefinitionOnDBC(wsdlLocation);
                    	}
                    }
                } catch (WSDLException e) {
                    throw ExceptionFactory.makeWebServiceException(
                            Messages.getMessage("wsdlException", e.getMessage()), e);
                }
            }

            //Deprecate this code block when MDQ is fully integrated
        } else if (wsdlURL != null) {
            try {
                if (log.isDebugEnabled() ) {
                    if (configContext != null) {
                        log.debug("new WSDL4JWrapper-ConfigContext not null4"); 
                    } else {
                        log.debug("new WSDL4JWrapper-ConfigContext null4"); 
                    }
                }
                this.wsdlWrapper = new WSDL4JWrapper(new URL(this.wsdlURL),configContext,
                		                             this.catalogManager);
             
            }
            catch (FileNotFoundException e) {
                throw ExceptionFactory.makeWebServiceException(
                        Messages.getMessage("wsdlNotFoundErr", e.getMessage()), e);
            }
            catch (UnknownHostException e) {
                throw ExceptionFactory.makeWebServiceException(
                        Messages.getMessage("unknownHost", e.getMessage()), e);
            }
            catch (ConnectException e) {
                throw ExceptionFactory.makeWebServiceException(
                        Messages.getMessage("connectionRefused", e.getMessage()), e);
            }
            catch(IOException e) {
                throw ExceptionFactory.makeWebServiceException(Messages.getMessage("urlStream", e.getMessage()), e);
            }
            catch (WSDLException e) {
                throw ExceptionFactory.makeWebServiceException(
                        Messages.getMessage("wsdlException", e.getMessage()), e);
            }
        }
    }