Author: nthaker
Date: Thu Aug 19 15:43:59 2010
New Revision: 987195

URL: http://svn.apache.org/viewvc?rev=987195&view=rev
Log:
AXIS2-4801
Adding warning message for new @Webmethod behavior on JAX-WS2.2 for migrating 
applications.

Modified:
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/MethodRetriever.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/MethodRetriever.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/MethodRetriever.java?rev=987195&r1=987194&r2=987195&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/MethodRetriever.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/MethodRetriever.java
 Thu Aug 19 15:43:59 2010
@@ -55,7 +55,15 @@ public abstract class MethodRetriever {
 
     //Logging setup
     private static final Log log = LogFactory.getLog(MethodRetriever.class);
-    
+    private String legacyWebMethod = null;
+    public String getLegacyWebMethod() {
+        return legacyWebMethod;
+    }
+
+    public void setLegacyWebMethod(String legacyWebMethod) {
+        this.legacyWebMethod = legacyWebMethod;
+    }
+
     protected MethodRetriever() {}
 
     /*

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java?rev=987195&r1=987194&r2=987195&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionUtils.java
 Thu Aug 19 15:43:59 2010
@@ -126,7 +126,21 @@ public class DescriptionUtils {
 
         return mdcList;
     }
-
+    
+    static boolean isWebmethodDefined(DescriptionBuilderComposite dbc){
+        if(dbc == null){
+            return false;
+        }
+        Iterator<MethodDescriptionComposite> iter = 
dbc.getMethodDescriptionsList().iterator();
+        while (iter.hasNext()) {
+            MethodDescriptionComposite mdc = iter.next();
+            if (mdc!=null && mdc.getWebMethodAnnot() != null) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
     /*
       * Check whether a MethodDescriptionComposite contains a WebMethod 
annotation with
       * exlude set to true

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java?rev=987195&r1=987194&r2=987195&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
 Thu Aug 19 15:43:59 2010
@@ -836,7 +836,8 @@ public class EndpointInterfaceDescriptio
         }
         //Now based on the outcome of LegacyWebmethod and sun property check, 
retrieve methods to expose.
         methodRetriever = newSunBehavior ? new 
PostRI216MethodRetrieverImpl(dbc, this) : new LegacyMethodRetrieverImpl(dbc, 
this);
-        
+        //set LegacyWebmethod Definition on MethodRetriever.
+        methodRetriever.setLegacyWebMethod(legacyWebmethod);
         if(log.isDebugEnabled()) {
             if (newSunBehavior) {
                 log.debug("getMethodRetriever: returning a 
PostRI216MethodRetrieverImpl");

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java?rev=987195&r1=987194&r2=987195&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
 Thu Aug 19 15:43:59 2010
@@ -34,6 +34,8 @@ import org.apache.axis2.jaxws.i18n.Messa
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import com.ibm.xylem.ISpecialForm;
+
 /**
  * PostRI216MethodRetrieverImpl subclass implements the new SUN RI 
interpretation for
  * annotation processing. See MethodRetriever superclass...
@@ -51,11 +53,10 @@ public class PostRI216MethodRetrieverImp
 
     //Logging setup
     private static final Log log = 
LogFactory.getLog(PostRI216MethodRetrieverImpl.class);
+    
+    private EndpointInterfaceDescriptionImpl eid = null;
 
-   private EndpointInterfaceDescriptionImpl eid = null;
-
-   private DescriptionBuilderComposite dbc = null;
-
+    private DescriptionBuilderComposite dbc = null;
     public PostRI216MethodRetrieverImpl (DescriptionBuilderComposite dbc, 
         EndpointInterfaceDescriptionImpl eid)  {
         super();
@@ -133,6 +134,25 @@ public class PostRI216MethodRetrieverImp
                 tempDBC = superDBC;
             } //Done with implied SEI's superclasses
             retrieveList = removeOverriddenMethods(retrieveList, dbc, eid);
+            //Let check to see if there where any operations with @Webmethod
+            //If LeagcyWebmethod is NOT defined i.e default and if there 
+            //are operations with @Webmethod annotation, then lets warn the
+            //user that we may be exposing public operation that they did not
+            //intend to expose, this can happen if user is migrating 
application
+            //from old JAX-WS tooling version.
+            //Let also inform user that if they can use LegacyWebmethod to 
expose 
+            //Only those operations that have @webmethod(exclude=false) 
annotation on them.
+            boolean isWebmethodDefined = 
DescriptionUtils.isWebmethodDefined(dbc);
+            Iterator<MethodDescriptionComposite> iter = 
retrieveList.iterator();
+            while(iter.hasNext()){
+                MethodDescriptionComposite mdc = iter.next();
+                //If user defined a legacyWemethod, has atleast one operation 
with @Wemethod annotation
+                //and this is a public operation with no @Webmethod operation 
that is being exposed then
+                //lets warn user of possible security exposure.
+                if(getLegacyWebMethod()==null && isWebmethodDefined && 
mdc.getWebMethodAnnot()==null && !isConstructor(mdc)){                      
+                  log.warn(Messages.getMessage("MethodRetrieverWarning1", 
mdc.getMethodName()));                     
+                }
+            }
         }//Done with implied SEI's
 
         return retrieveList.iterator();
@@ -152,7 +172,8 @@ public class PostRI216MethodRetrieverImp
         List<MethodDescriptionComposite> mdcList = 
dbc.getMethodDescriptionsList();
 
         if (mdcList != null) {
-            iter = dbc.getMethodDescriptionsList().iterator();
+            iter = dbc.getMethodDescriptionsList().iterator();           
+            boolean isWebmethodDefined = 
DescriptionUtils.isWebmethodDefined(dbc);
             while (iter.hasNext()) {
                 MethodDescriptionComposite mdc = iter.next();
                 //flag to check if the method can be exposed as webservice.
@@ -168,10 +189,14 @@ public class PostRI216MethodRetrieverImp
                     retrieveList.add(mdc);
                 }
             }
+            
         }
 
         return retrieveList;
     }
-
+    
+    private boolean isConstructor(MethodDescriptionComposite mdc){
+        return mdc.getMethodName().equals("<init>");
+    }
 
 }

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties?rev=987195&r1=987194&r2=987195&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/i18n/resource.properties
 Thu Aug 19 15:43:59 2010
@@ -353,3 +353,4 @@ axisEndpointReferenceFactoryErr=Cannot c
 axisEndpointReferenceFactoryErr2=Cannot create an endpoint reference because 
the address, service name, and/or port name are null.
 dispatchInvalidTypeWithMode=Unsupported Dispatch Type: Dispatch type 
javax.xml.soap.SOAPMessage cannot be used with messages in Payload mode.
 serviceDelegateConstruct2=An attempt was made to construct the ServiceDelegate 
object with the {0} service and with WebServicesFeatures, but there are no 
standard features defined for service creation in the current specification.
+MethodRetrieverWarning1=Public method {0} will be exposed as a Web Service 
operation per JAX-WS 2.2 tooling rules. If you intend to expose only operations 
that have @WebMethod annotation, set the manifest property 'LegacyWebmethod: 
true' or set a JVM property 'jaxws.runtime.legacyWebMethod=true'. 
\ No newline at end of file


Reply via email to