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