You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ba...@apache.org on 2008/01/17 22:09:27 UTC

svn commit: r612981 - in /webservices/axis2/trunk/java/modules/metadata: src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java

Author: barrettj
Date: Thu Jan 17 13:09:19 2008
New Revision: 612981

URL: http://svn.apache.org/viewvc?rev=612981&view=rev
Log:
Refactor and combine duplicate logic in getWSDLURL, getWsdlUrl, and createWsdlUrl into a single set of methods

Modified:
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
    webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java

Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java?rev=612981&r1=612980&r2=612981&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java Thu Jan 17 13:09:19 2008
@@ -154,19 +154,15 @@
         composite = new DescriptionBuilderComposite();
         composite.setIsServiceProvider(false);
         composite.setCorrespondingClass(serviceClass);
-        composite.setSparseComposite(sparseCompositeKey, sparseComposite);
-        URL sparseCompositeWsdlURL = getWsdlURL(serviceClass, sparseComposite);
         // The classloader was originally gotten off this class, but it seems more logical to 
         // get it off the application service class.
 //        composite.setClassLoader(this.getClass().getClassLoader());
         composite.setClassLoader(serviceClass.getClassLoader());
-        
-        // TODO: On the client side, we should not support partial WSDL; i.e. if the WSDL is specified it must be
-        //       complete and must contain the ServiceQName.  This is how the Sun RI behaves on the client.
-        //       When this is fixed, the check in ServiceDelegate(URL, QName, Class) should be removed
+        composite.setSparseComposite(sparseCompositeKey, sparseComposite);
         
         // If there's a WSDL URL specified in the sparse composite, that is a override, for example
         // from a JSR-109 deployment descriptor, and that's the one to use.
+        URL sparseCompositeWsdlURL = getSparseCompositeWsdlURL(sparseComposite);
         if (sparseCompositeWsdlURL != null) {
             if (log.isDebugEnabled()) {
                 log.debug("Wsdl location overriden by sparse composite; overriden value: " + this.wsdlURL);
@@ -178,42 +174,24 @@
         if (log.isDebugEnabled()) {
             log.debug("Wsdl Location value used: " + this.wsdlURL);
         }
+        // TODO: On the client side, we should not support partial WSDL; i.e. if the WSDL is specified it must be
+        //       complete and must contain the ServiceQName.  This is how the Sun RI behaves on the client.
+        //       When this is fixed, the check in ServiceDelegate(URL, QName, Class) should be removed
+        
         // TODO: The serviceQName needs to be verified between the argument/WSDL/Annotation
         this.serviceQName = serviceQName;
 
         setupWsdlDefinition();
     }
     
-    URL getWsdlURL(Class clazz, DescriptionBuilderComposite sparseComposite) {
+    URL getSparseCompositeWsdlURL(DescriptionBuilderComposite sparseComposite) {
         // Use the WSDL file if it is specified in the composite
-        // TODO: (JLB) This logic is common with stuff Dustin put in ServiceDescriptionImpl to 
-        // do WSDL file reading in MDQ; refactor them into common helper class.
         URL url = null;
         if (sparseComposite != null) {
             WebServiceClient wsc = (WebServiceClient) sparseComposite.getWebServiceClientAnnot();
             if (wsc != null && wsc.wsdlLocation() != null) {
                 String wsdlLocation = wsc.wsdlLocation();
-                // Look for the WSDL file as follows:
-                // 1) As a resource on the classpath
-                // 2) As a fully specified URL
-                // 3) As a file on the filesystem.  This is analagous to what the generated
-                //    Service client does.  Is prepends "file:/" to whatever is specified in the
-                //    @WegServiceClient.wsdlLocation element.
-                URL wsdlUrl = null;
-                wsdlUrl = clazz.getClassLoader().getResource(wsdlLocation);
-                if (wsdlUrl == null) {
-                    wsdlUrl = createWsdlURL(wsdlLocation);
-                }
-                if (wsdlUrl == null) {
-                    // This check is necessary because Unix/Linux file paths begin
-                    // with a '/'. When adding the prefix 'jar:file:/' we may end
-                    // up with '//' after the 'file:' part. This causes the URL 
-                    // object to treat this like a remote resource
-                    if(wsdlLocation.indexOf("/") == 0) {
-                        wsdlLocation = wsdlLocation.substring(1, wsdlLocation.length());
-                    }
-                    wsdlUrl = createWsdlURL("file:/" + wsdlLocation);
-                }
+                URL wsdlUrl = getWSDLURL(wsdlLocation);
                 
                 if (wsdlUrl == null) {
                     // TODO: (JLB) NLS
@@ -226,12 +204,17 @@
         }
         return url;
     }
+
     private static URL createWsdlURL(String wsdlLocation) {
         URL theUrl = null;
         try {
             theUrl = new URL(wsdlLocation);
         } catch (Exception ex) {
             // Just return a null to indicate we couldn't create a URL from the string
+            if (log.isDebugEnabled()) {
+                log.debug("Unable to obtain URL for WSDL file: " + wsdlLocation
+                        + " by using File reference");
+            }
         }
         return theUrl;
     }
@@ -250,7 +233,6 @@
         composite = new DescriptionBuilderComposite();
         composite.setIsDeprecatedServiceProviderConstruction(true);
         composite.setIsServiceProvider(true);
-        // TODO: (JLB) does the composite corresponding class AND the classloader need to be set here?
         isServerSide = true;
 
         // Create the EndpointDescription hierachy from the service impl annotations; Since the PortQName is null, 
@@ -764,29 +746,56 @@
     }
     
     /**
-     * This method will handle obtaining a URL for the given WSDL location.
+     * This method will handle obtaining a URL for the given WSDL location.  The WSDL will be
+     * looked for in the following places in this order:
+     * 1) As a resource on the classpath
+     * 2) As a fully specified URL
+     * 3) As a file on the filesystem.  This is analagous to what the generated
+     *    Service client does.  Is prepends "file:/" to whatever is specified in the
+     *    @WebServiceClient.wsdlLocation element.
+     * 
+     * @param wsdlLocation The WSDL for which a URL is wanted
+     * @return A URL if the WSDL can be located, or null
      */
     private URL getWSDLURL(String wsdlLocation) {
-    	URL url = composite.getClassLoader().getResource(wsdlLocation);
-		if(url == null) {
-			if(log.isDebugEnabled()) {
-				log.debug("URL for wsdl file: " + wsdlLocation + " could not be " +
-						"determined by classloader... looking for file reference");
-			}
-			File file = new File(wsdlLocation);
-			if(file != null) {
-				try {
-					url = file.toURL();
-				}
-				catch(Exception e) {
-					if(log.isDebugEnabled()) {
-						log.debug("Unable to obtain URL for WSDL file: " + wsdlLocation + 
-								" by using file reference");
-					}
-				}
-			}
-		}
-		return url;
+        // Look for the WSDL file as follows:
+        // 1) As a resource on the classpath
+
+        URL url = composite.getClassLoader().getResource(wsdlLocation);
+
+        // 2) As a fully specified URL
+        if (url == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("URL for wsdl file: " + wsdlLocation + " could not be "
+                        + "determined by classloader... looking for file reference");
+            }
+            url = createWsdlURL(wsdlLocation);
+        }
+        // 3) As a file on the filesystem.  This is analagous to what the generated
+        //    Service client does.  Is prepends "file:/" to whatever is specified in the
+        //    @WebServiceClient.wsdlLocation element.
+        if (url == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("URL for wsdl file: " + wsdlLocation + " could not be "
+                        + "found as local file reference... prepending file: protocol");
+            }
+            // This check is necessary because Unix/Linux file paths begin
+            // with a '/'. When adding the prefix 'jar:file:/' we may end
+            // up with '//' after the 'file:' part. This causes the URL 
+            // object to treat this like a remote resource
+            if(wsdlLocation.indexOf("/") == 0) {
+                wsdlLocation = wsdlLocation.substring(1, wsdlLocation.length());
+            }
+            url = createWsdlURL("file:/" + wsdlLocation);
+
+        }
+        if (url == null) {
+            if (log.isDebugEnabled()) {
+                log.debug("Unable to obtain URL for WSDL file: " + wsdlLocation
+                        + " by using prepended file: protocol");
+            }
+        }
+        return url;
     }
 
     // TODO: Remove these and replace with appropraite get* methods for WSDL information
@@ -1815,8 +1824,6 @@
      */
     protected String getServiceClassName() {
         return composite.getClassName();
-        // TODO: (JLB) Remove commented out code from 1/7/08 merge
-//        return (this.serviceClass != null ? this.serviceClass.getName() : null);
     }
 
     /** Return a string representing this Description object and all the objects it contains. */

Modified: webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java?rev=612981&r1=612980&r2=612981&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/DescriptionTestUtils.java Thu Jan 17 13:09:19 2008
@@ -48,13 +48,13 @@
     
     static public String getWSDLLocation(String wsdlFileName) {
         String basedir = System.getProperty("basedir", ".");
-        String urlString = "file://localhost/" + basedir + "/test-resources/wsdl/" + wsdlFileName;
+        String urlString = basedir + "/test-resources/wsdl/" + wsdlFileName;
         return urlString;
     }
 
     static public URL getWSDLURL(String wsdlFileName) {
         URL wsdlURL = null;
-        String urlString = getWSDLLocation(wsdlFileName);
+        String urlString = "file://localhost/" + getWSDLLocation(wsdlFileName);
         // Get the URL to the WSDL file.  Note that 'basedir' is setup by Maven
         try {
             wsdlURL = new URL(urlString);



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org