Modified: 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java?rev=633485&r1=633484&r2=633485&view=diff
==============================================================================
--- 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisDescription.java
 Tue Mar  4 06:31:32 2008
@@ -42,182 +42,187 @@
 import java.util.Map;
 
 public abstract class AxisDescription implements ParameterInclude,
-        DescriptionConstants {
+               DescriptionConstants {
 
-    protected AxisDescription parent = null;
+       protected AxisDescription parent = null;
 
-    private ParameterInclude parameterInclude;
+       private ParameterInclude parameterInclude;
 
-    private PolicyInclude policyInclude = null;
+       private PolicyInclude policyInclude = null;
 
-    private Map children;
 
-    protected Map engagedModules;
+       private PolicySubject policySubject = null;
 
-    /** List of ParameterObservers who want to be notified of changes */
-    protected List parameterObservers = null;
+       private Map children;
 
-    private OMFactory omFactory = OMAbstractFactory.getOMFactory();
+       protected Map engagedModules;
 
-    // Holds the documentation details for each element
-    private OMNode documentation;
+       /** List of ParameterObservers who want to be notified of changes */
+       protected List parameterObservers = null;
 
-    // creating a logger instance
-    private Log log = LogFactory.getLog(this.getClass());
+       private OMFactory omFactory = OMAbstractFactory.getOMFactory();
+
+       // Holds the documentation details for each element
+       private OMNode documentation;
+
+       // creating a logger instance
+       private Log log = LogFactory.getLog(this.getClass());
 
     public AxisDescription() {
         parameterInclude = new ParameterIncludeImpl();
         children = new ConcurrentHashMap();
+        policySubject = new PolicySubject();
     }
 
-    public void addParameterObserver(ParameterObserver observer) {
-        if (parameterObservers == null)
-            parameterObservers = new ArrayList();
-        parameterObservers.add(observer);
-    }
-
-    public void removeParameterObserver(ParameterObserver observer) {
-        if (parameterObservers != null) {
-            parameterObservers.remove(observer);
-        }
-    }
-
-    public void addParameter(Parameter param) throws AxisFault {
-        if (param == null) {
-            return;
-        }
-
-        if (isParameterLocked(param.getName())) {
-            throw new AxisFault(Messages.getMessage("paramterlockedbyparent",
-                                                    param.getName()));
-        }
-
-        parameterInclude.addParameter(param);
-
-        // Tell anyone who wants to know
-        if (parameterObservers != null) {
-            for (Iterator i = parameterObservers.iterator(); i.hasNext();) {
-                ParameterObserver observer = (ParameterObserver)i.next();
-                observer.parameterChanged(param.getName(), param.getValue());
-            }
-        }
-    }
-
-    public void addParameter(String name, Object value) throws AxisFault {
-        addParameter(new Parameter(name, value));
-    }
-
-    public void removeParameter(Parameter param) throws AxisFault {
-        parameterInclude.removeParameter(param);
-    }
-
-    public void deserializeParameters(OMElement parameterElement)
-            throws AxisFault {
-
-        parameterInclude.deserializeParameters(parameterElement);
-
-    }
-
-    /**
-     * If the parameter found in the current decription then the paremeter 
will be
-     * writable else it will be read only
-     * @param name
-     * @return
-     */
-    public Parameter getParameter(String name) {
-        Parameter parameter = parameterInclude.getParameter(name);
-        if (parameter != null) {
-            parameter.setEditable(true);
-            return parameter;
-        }
-        if (parent != null) {
-            parameter = parent.getParameter(name);
-            if (parameter!=null) {
-                parameter.setEditable(false);
-            }
-            return parameter;
-        }
-        return null;
-    }
-
-    public Object getParameterValue(String name) {
-        Parameter param = getParameter(name);
-        if (param == null) {
-            return null;
-        }
-        return param.getValue();
-    }
-
-    public boolean isParameterTrue(String name) {
-        Parameter param = getParameter(name);
-        return param != null && JavaUtils.isTrue(param.getValue());
-    }
-
-    public ArrayList getParameters() {
-        return parameterInclude.getParameters();
-    }
-
-    public boolean isParameterLocked(String parameterName) {
-
-        if (this.parent != null && 
this.parent.isParameterLocked(parameterName)) {
-            return true;
-        }
-
-        Parameter parameter = getParameter(parameterName);
-        return parameter != null && parameter.isLocked();
-    }
-
-    public String getDocumentation() {
-        if (documentation != null) {
-            if (documentation.getType() == OMNode.TEXT_NODE) {
-                return ((OMText)documentation).getText();
-            } else {
-                StringWriter writer = new StringWriter();
-                documentation.build();
-                try {
-                    documentation.serialize(writer);
-                } catch (XMLStreamException e) {
-                    log.error(e);
-                }
-                writer.flush();
-                return writer.toString();
-            }
-        }
-        return null;
-    }
-
-    public OMNode getDocumentationNode() {
-        return documentation;
-    }
-
-    public void setDocumentation(OMNode documentation) {
-        this.documentation = documentation;
-    }
-
-    public void setDocumentation(String documentation) {
-        if (!"".equals(documentation)) {
-            this.documentation = omFactory.createOMText(documentation);
-        }
-    }
-
-    public void setParent(AxisDescription parent) {
-        this.parent = parent;
-    }
-
-    public AxisDescription getParent() {
-        return parent;
-    }
-
-    public void setPolicyInclude(PolicyInclude policyInclude) {
-        this.policyInclude = policyInclude;
-    }
-
-    public PolicyInclude getPolicyInclude() {
-        if (policyInclude == null) {
-            policyInclude = new PolicyInclude(this);
-        }
-        return policyInclude;
-    }
+       public void addParameterObserver(ParameterObserver observer) {
+               if (parameterObservers == null)
+                       parameterObservers = new ArrayList();
+               parameterObservers.add(observer);
+       }
+
+       public void removeParameterObserver(ParameterObserver observer) {
+               if (parameterObservers != null) {
+                       parameterObservers.remove(observer);
+               }
+       }
+
+       public void addParameter(Parameter param) throws AxisFault {
+               if (param == null) {
+                       return;
+               }
+
+               if (isParameterLocked(param.getName())) {
+                       throw new 
AxisFault(Messages.getMessage("paramterlockedbyparent",
+                                       param.getName()));
+               }
+
+               parameterInclude.addParameter(param);
+
+               // Tell anyone who wants to know
+               if (parameterObservers != null) {
+                       for (Iterator i = parameterObservers.iterator(); 
i.hasNext();) {
+                               ParameterObserver observer = 
(ParameterObserver) i.next();
+                               observer.parameterChanged(param.getName(), 
param.getValue());
+                       }
+               }
+       }
+
+       public void addParameter(String name, Object value) throws AxisFault {
+               addParameter(new Parameter(name, value));
+       }
+
+       public void removeParameter(Parameter param) throws AxisFault {
+               parameterInclude.removeParameter(param);
+       }
+
+       public void deserializeParameters(OMElement parameterElement)
+                       throws AxisFault {
+
+               parameterInclude.deserializeParameters(parameterElement);
+
+       }
+
+       /**
+        * If the parameter found in the current decription then the paremeter 
will
+        * be writable else it will be read only
+        * 
+        * @param name
+        * @return
+        */
+       public Parameter getParameter(String name) {
+               Parameter parameter = parameterInclude.getParameter(name);
+               if (parameter != null) {
+                       parameter.setEditable(true);
+                       return parameter;
+               }
+               if (parent != null) {
+                       parameter = parent.getParameter(name);
+                       if (parameter != null) {
+                               parameter.setEditable(false);
+                       }
+                       return parameter;
+               }
+               return null;
+       }
+
+       public Object getParameterValue(String name) {
+               Parameter param = getParameter(name);
+               if (param == null) {
+                       return null;
+               }
+               return param.getValue();
+       }
+
+       public boolean isParameterTrue(String name) {
+               Parameter param = getParameter(name);
+               return param != null && JavaUtils.isTrue(param.getValue());
+       }
+
+       public ArrayList getParameters() {
+               return parameterInclude.getParameters();
+       }
+
+       public boolean isParameterLocked(String parameterName) {
+
+               if (this.parent != null && 
this.parent.isParameterLocked(parameterName)) {
+                       return true;
+               }
+
+               Parameter parameter = getParameter(parameterName);
+               return parameter != null && parameter.isLocked();
+       }
+
+       public String getDocumentation() {
+               if (documentation != null) {
+                       if (documentation.getType() == OMNode.TEXT_NODE) {
+                               return ((OMText) documentation).getText();
+                       } else {
+                               StringWriter writer = new StringWriter();
+                               documentation.build();
+                               try {
+                                       documentation.serialize(writer);
+                               } catch (XMLStreamException e) {
+                                       log.error(e);
+                               }
+                               writer.flush();
+                               return writer.toString();
+                       }
+               }
+               return null;
+       }
+
+       public OMNode getDocumentationNode() {
+               return documentation;
+       }
+
+       public void setDocumentation(OMNode documentation) {
+               this.documentation = documentation;
+       }
+
+       public void setDocumentation(String documentation) {
+               if (!"".equals(documentation)) {
+                       this.documentation = 
omFactory.createOMText(documentation);
+               }
+       }
+
+       public void setParent(AxisDescription parent) {
+               this.parent = parent;
+       }
+
+       public AxisDescription getParent() {
+               return parent;
+       }
+
+       public void setPolicyInclude(PolicyInclude policyInclude) {
+               this.policyInclude = policyInclude;
+       }
+
+       public PolicyInclude getPolicyInclude() {
+               if (policyInclude == null) {
+                       policyInclude = new PolicyInclude(this);
+               }
+               return policyInclude;
+       }
 
     // NOTE - These are NOT typesafe!
     public void addChild(AxisDescription child) {
@@ -229,13 +234,15 @@
         }
     }
 
-    public void addChild(Object key, AxisDescription child) {
-        children.put(key, child);
-    }
 
-    public Iterator getChildren() {
-        return children.values().iterator();
-    }
+
+       public void addChild(Object key, AxisDescription child) {
+               children.put(key, child);
+       }
+
+       public Iterator getChildren() {
+               return children.values().iterator();
+       }
 
     public AxisDescription getChild(Object key) {
         if(key == null) {
@@ -245,247 +252,253 @@
         return (AxisDescription) children.get(key);
     }
 
-    public void removeChild(Object key) {
-        children.remove(key);
-    }
-
-    /**
-     * This method sets the policy as the default of this AxisDescription
-     * instance. Further more this method does the followings.
-     * <p/>
-     * (1) Engage whatever modules necessary to execute new the effective 
policy
-     * of this AxisDescription instance. (2) Disengage whatever modules that 
are
-     * not necessary to execute the new effective policy of this 
AxisDescription
-     * instance. (3) Check whether each module can execute the new effective
-     * policy of this AxisDescription instance. (4) If not throw an AxisFault 
to
-     * notify the user. (5) Else notify each module about the new effective
-     * policy.
-     *
-     * @param policy the new policy of this AxisDescription instance. The 
effective
-     *               policy is the merge of this argument with effective 
policy of
-     *               parent of this AxisDescription.
-     * @throws AxisFault if any module is unable to execute the effective 
policy of
-     *                   this AxisDescription instance successfully or no 
module to
-     *                   execute some portion (one or more PrimtiveAssertions 
) of
-     *                   that effective policy.
-     */
-    public void applyPolicy(Policy policy) throws AxisFault {
-        AxisConfiguration configuration = getAxisConfiguration();
-
-        if (configuration == null) {
-            // FIXME return or throw an Exception?
-            return;
-        }
-
-        // sets AxisDescription policy
-        getPolicyInclude().setPolicy(policy);
-
-        /*
-         * now we should take the effective one .. it is necessary since
-         * AxisDescription.applyPolicy(..) doesn't override policies at the
-         * Upper levels.
-         */
-        Policy effPolicy = getPolicyInclude().getEffectivePolicy();
-
-        /*
-         * for the moment we consider policies with only one alternative. If 
the
-         * policy contains multiple alternatives only the first alternative 
will
-         * be considered.
-         */
-        Iterator iterator = effPolicy.getAlternatives();
-        if (!iterator.hasNext()) {
-            throw new AxisFault(
-                    "Policy doesn't contain any policy alternatives");
-        }
-
-        List assertionList = (List) iterator.next();
-
-        Assertion assertion;
-        String namespaceURI;
-
-        List moduleList;
-
-        List namespaceList = new ArrayList();
-        List modulesToEngage = new ArrayList();
-
-        for (Iterator assertions = assertionList.iterator(); assertions
-                .hasNext();) {
-            assertion = (Assertion) assertions.next();
-            namespaceURI = assertion.getName().getNamespaceURI();
-
-            moduleList = configuration
-                    .getModulesForPolicyNamesapce(namespaceURI);
-
-            if (moduleList == null) {
-                log.debug("can't find any module to process "
-                        + assertion.getName() + " type assertions");
-                continue;
-            }
-
-            if (!canSupportAssertion(assertion, moduleList)) {
-                throw new AxisFault("atleast one module can't support "
-                        + assertion.getName());
-            }
-
-            if (!namespaceList.contains(namespaceURI)) {
-                namespaceList.add(namespaceURI);
-                modulesToEngage.addAll(moduleList);
-            }
-        }
-
-        /*
-         * FIXME We need to disengage any modules that are already engaged 
*but*
-         * has nothing to do with the policy to apply
-         */
-
-        engageModulesToAxisDescription(modulesToEngage, this);
-    }
-
-    /**
-     * Applies the policies on the Description Hierarchy recursively.
-     *
-     * @throws AxisFault an error occurred applying the policy
-     */
-    public void applyPolicy() throws AxisFault {
-
-        AxisConfiguration configuration = getAxisConfiguration();
-        if (configuration == null) {
-            return; // CHECKME: May be we need to throw an Exception ??
-        }
-
-        Policy effPolicy = getApplicablePolicy(this);
-
-        if (effPolicy != null) {
-
-            /*
-             * for the moment we consider policies with only one alternative. 
If
-             * the policy contains multiple alternatives only the first
-             * alternative will be considered.
-             */
-            Iterator iterator = effPolicy.getAlternatives();
-            if (!iterator.hasNext()) {
-                throw new AxisFault(
-                        "Policy doesn't contain any policy alternatives");
-            }
-
-            List assertionList = (List) iterator.next();
-
-            Assertion assertion;
-            String namespaceURI;
-
-            List moduleList;
-
-            List namespaceList = new ArrayList();
-            List modulesToEngage = new ArrayList();
-
-            for (Iterator assertions = assertionList.iterator(); assertions
-                    .hasNext();) {
-                assertion = (Assertion) assertions.next();
-                namespaceURI = assertion.getName().getNamespaceURI();
-
-                moduleList = configuration
-                        .getModulesForPolicyNamesapce(namespaceURI);
-
-                if (moduleList == null) {
-                    log.debug("can't find any module to process "
-                            + assertion.getName() + " type assertions");
-                    continue;
-                }
-
-                if (!canSupportAssertion(assertion, moduleList)) {
-                    throw new AxisFault("atleast one module can't support "
-                            + assertion.getName());
-                }
-
-                if (!namespaceList.contains(namespaceURI)) {
-                    namespaceList.add(namespaceURI);
-                    modulesToEngage.addAll(moduleList);
-                }
-            }
-
-            /*
-             * FIXME We need to disengage any modules that are already engaged
-             * *but* has nothing to do with the policy to apply
-             */
-
-            engageModulesToAxisDescription(modulesToEngage, this);
-
-        }
-
-        AxisDescription child;
-
-        for (Iterator children = getChildren(); children.hasNext();) {
-            child = (AxisDescription) children.next();
-            child.applyPolicy();
-        }
-    }
-
-    private boolean canSupportAssertion(Assertion assertion, List moduleList) {
-
-        AxisModule axisModule;
-        Module module;
-
-        for (Iterator iterator = moduleList.iterator(); iterator.hasNext();) {
-            axisModule = (AxisModule) iterator.next();
-            // FIXME is this step really needed ??
-            // Shouldn't axisMoudle.getModule always return not-null value ??
-            module = axisModule.getModule();
-
-            if (!(module == null || module.canSupportAssertion(assertion))) {
-                log.debug(axisModule.getName() + " says it can't support " + 
assertion.getName());
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    private void engageModulesToAxisDescription(List moduleList,
-                                                AxisDescription description) 
throws AxisFault {
-
-        AxisModule axisModule;
-        Module module;
-
-        for (Iterator iterator = moduleList.iterator(); iterator.hasNext();) {
-            axisModule = (AxisModule) iterator.next();
-            // FIXME is this step really needed ??
-            // Shouldn't axisMoudle.getModule always return not-null value ??
-            module = axisModule.getModule();
-
-            if (!(module == null || 
description.isEngaged(axisModule.getName()))) {
-                // engages the module to AxisDescription
-                description.engageModule(axisModule);
-                // notifies the module about the engagement
-                axisModule.getModule().engageNotify(description);
-            }
-        }
-    }
-
-    public AxisConfiguration getAxisConfiguration() {
-
-        if (this instanceof AxisConfiguration) {
-            return (AxisConfiguration) this;
-        }
-
-        if (this.parent != null) {
-            return this.parent.getAxisConfiguration();
-        }
-
-        return null;
-    }
-
-    public abstract Object getKey();
-
-    /**
-     * Engage a Module at this level
-     *
-     * @param axisModule the Module to engage
-     * @throws AxisFault if there's a problem engaging
-     */
-    public void engageModule(AxisModule axisModule) throws AxisFault {
-        engageModule(axisModule, this);
-    }
-
+       public void removeChild(Object key) {
+               children.remove(key);
+       }
+
+       /**
+        * This method sets the policy as the default of this AxisDescription
+        * instance. Further more this method does the followings. <p/> (1) 
Engage
+        * whatever modules necessary to execute new the effective policy of 
this
+        * AxisDescription instance. (2) Disengage whatever modules that are not
+        * necessary to execute the new effective policy of this AxisDescription
+        * instance. (3) Check whether each module can execute the new effective
+        * policy of this AxisDescription instance. (4) If not throw an 
AxisFault to
+        * notify the user. (5) Else notify each module about the new effective
+        * policy.
+        * 
+        * @param policy
+        *            the new policy of this AxisDescription instance. The 
effective
+        *            policy is the merge of this argument with effective 
policy of
+        *            parent of this AxisDescription.
+        * @throws AxisFault
+        *             if any module is unable to execute the effective policy 
of
+        *             this AxisDescription instance successfully or no module 
to
+        *             execute some portion (one or more PrimtiveAssertions ) of
+        *             that effective policy.
+        */
+       public void applyPolicy(Policy policy) throws AxisFault {
+               AxisConfiguration configuration = getAxisConfiguration();
+
+               if (configuration == null) {
+                       // FIXME return or throw an Exception?
+                       return;
+               }
+
+               // sets AxisDescription policy
+               getPolicyInclude().setPolicy(policy);
+
+               /*
+                * now we should take the effective one .. it is necessary since
+                * AxisDescription.applyPolicy(..) doesn't override policies at 
the
+                * Upper levels.
+                */
+               Policy effPolicy = getPolicyInclude().getEffectivePolicy();
+
+               /*
+                * for the moment we consider policies with only one 
alternative. If the
+                * policy contains multiple alternatives only the first 
alternative will
+                * be considered.
+                */
+               Iterator iterator = effPolicy.getAlternatives();
+               if (!iterator.hasNext()) {
+                       throw new AxisFault(
+                                       "Policy doesn't contain any policy 
alternatives");
+               }
+
+               List assertionList = (List) iterator.next();
+
+               Assertion assertion;
+               String namespaceURI;
+
+               List moduleList;
+
+               List namespaceList = new ArrayList();
+               List modulesToEngage = new ArrayList();
+
+               for (Iterator assertions = assertionList.iterator(); assertions
+                               .hasNext();) {
+                       assertion = (Assertion) assertions.next();
+                       namespaceURI = assertion.getName().getNamespaceURI();
+
+                       moduleList = configuration
+                                       
.getModulesForPolicyNamesapce(namespaceURI);
+
+                       if (moduleList == null) {
+                               log.debug("can't find any module to process "
+                                               + assertion.getName() + " type 
assertions");
+                               continue;
+                       }
+
+                       if (!canSupportAssertion(assertion, moduleList)) {
+                               throw new AxisFault("atleast one module can't 
support "
+                                               + assertion.getName());
+                       }
+
+                       if (!namespaceList.contains(namespaceURI)) {
+                               namespaceList.add(namespaceURI);
+                               modulesToEngage.addAll(moduleList);
+                       }
+               }
+
+               /*
+                * FIXME We need to disengage any modules that are already 
engaged *but*
+                * has nothing to do with the policy to apply
+                */
+
+               engageModulesToAxisDescription(modulesToEngage, this);
+       }
+
+       /**
+        * Applies the policies on the Description Hierarchy recursively.
+        * 
+        * @throws AxisFault
+        *             an error occurred applying the policy
+        */
+       public void applyPolicy() throws AxisFault {
+
+               AxisConfiguration configuration = getAxisConfiguration();
+               if (configuration == null) {
+                       return; // CHECKME: May be we need to throw an 
Exception ??
+               }
+
+               Policy effPolicy = getApplicablePolicy(this);
+
+               if (effPolicy != null) {
+
+                       /*
+                        * for the moment we consider policies with only one 
alternative. If
+                        * the policy contains multiple alternatives only the 
first
+                        * alternative will be considered.
+                        */
+                       Iterator iterator = effPolicy.getAlternatives();
+                       if (!iterator.hasNext()) {
+                               throw new AxisFault(
+                                               "Policy doesn't contain any 
policy alternatives");
+                       }
+
+                       List assertionList = (List) iterator.next();
+
+                       Assertion assertion;
+                       String namespaceURI;
+
+                       List moduleList;
+
+                       List namespaceList = new ArrayList();
+                       List modulesToEngage = new ArrayList();
+
+                       for (Iterator assertions = assertionList.iterator(); 
assertions
+                                       .hasNext();) {
+                               assertion = (Assertion) assertions.next();
+                               namespaceURI = 
assertion.getName().getNamespaceURI();
+
+                               moduleList = configuration
+                                               
.getModulesForPolicyNamesapce(namespaceURI);
+
+                               if (moduleList == null) {
+                                       log.debug("can't find any module to 
process "
+                                                       + assertion.getName() + 
" type assertions");
+                                       continue;
+                               }
+
+                               if (!canSupportAssertion(assertion, 
moduleList)) {
+                                       throw new AxisFault("atleast one module 
can't support "
+                                                       + assertion.getName());
+                               }
+
+                               if (!namespaceList.contains(namespaceURI)) {
+                                       namespaceList.add(namespaceURI);
+                                       modulesToEngage.addAll(moduleList);
+                               }
+                       }
+
+                       /*
+                        * FIXME We need to disengage any modules that are 
already engaged
+                        * *but* has nothing to do with the policy to apply
+                        */
+
+                       engageModulesToAxisDescription(modulesToEngage, this);
+
+               }
+
+               AxisDescription child;
+
+               for (Iterator children = getChildren(); children.hasNext();) {
+                       child = (AxisDescription) children.next();
+                       child.applyPolicy();
+               }
+       }
+
+       private boolean canSupportAssertion(Assertion assertion, List 
moduleList) {
+
+               AxisModule axisModule;
+               Module module;
+
+               for (Iterator iterator = moduleList.iterator(); 
iterator.hasNext();) {
+                       axisModule = (AxisModule) iterator.next();
+                       // FIXME is this step really needed ??
+                       // Shouldn't axisMoudle.getModule always return 
not-null value ??
+                       module = axisModule.getModule();
+
+                       if (!(module == null || 
module.canSupportAssertion(assertion))) {
+                               log.debug(axisModule.getName() + " says it 
can't support "
+                                               + assertion.getName());
+                               return false;
+                       }
+               }
+
+               return true;
+       }
+
+       private void engageModulesToAxisDescription(List moduleList,
+                       AxisDescription description) throws AxisFault {
+
+               AxisModule axisModule;
+               Module module;
+
+               for (Iterator iterator = moduleList.iterator(); 
iterator.hasNext();) {
+                       axisModule = (AxisModule) iterator.next();
+                       // FIXME is this step really needed ??
+                       // Shouldn't axisMoudle.getModule always return 
not-null value ??
+                       module = axisModule.getModule();
+
+                       if (!(module == null || 
description.isEngaged(axisModule.getName()))) {
+                               // engages the module to AxisDescription
+                               description.engageModule(axisModule);
+                               // notifies the module about the engagement
+                               
axisModule.getModule().engageNotify(description);
+                       }
+               }
+       }
+
+       public AxisConfiguration getAxisConfiguration() {
+
+               if (this instanceof AxisConfiguration) {
+                       return (AxisConfiguration) this;
+               }
+
+               if (this.parent != null) {
+                       return this.parent.getAxisConfiguration();
+               }
+
+               return null;
+       }
+
+       public abstract Object getKey();
+
+
+       /**
+        * Engage a Module at this level
+        * 
+        * @param axisModule
+        *            the Module to engage
+        * @throws AxisFault
+        *             if there's a problem engaging
+        */
+       public void engageModule(AxisModule axisModule) throws AxisFault {
+               engageModule(axisModule, this);
+       }
+       
     /**
      * Engage a Module at this level, keeping track of which level the engage 
was originally
      * called from.  This is meant for internal use only.
@@ -525,93 +538,109 @@
         engagedModules.put(Utils.getModuleName(axisModule.getName(), 
axisModule.getVersion()),
                            axisModule);
     }
-
-    protected void onEngage(AxisModule module, AxisDescription engager) throws 
AxisFault {
-        // Default version does nothing, feel free to override
-    }
-
-    static Collection NULL_MODULES = new ArrayList(0);
     
-    public Collection getEngagedModules() {
-        return engagedModules == null ? NULL_MODULES : engagedModules.values();
-    }
-
-    /**
-     * Check if a given module is engaged at this level.
-     *
-     * @param moduleName module to investigate.
-     * @return true if engaged, false if not.
-     * TODO: Handle versions?  isEngaged("addressing") should be true even for 
versioned modulename...
-     */
-    public boolean isEngaged(String moduleName) {
-        return engagedModules != null && 
engagedModules.keySet().contains(moduleName);
-    }
-
-    public boolean isEngaged(AxisModule axisModule) {
-        String id = Utils.getModuleName(axisModule.getName(), 
axisModule.getVersion());
-        return engagedModules != null && engagedModules.keySet().contains(id);
-    }
-
-    public void disengageModule(AxisModule module) throws AxisFault {
-        if (module == null || engagedModules == null) return;
-//        String id = Utils.getModuleName(module.getName(), 
module.getVersion());
-        if (isEngaged(module)) {
-            onDisengage(module);
-            engagedModules.remove(Utils.getModuleName(module.getName(), 
module.getVersion()));
-        }
-    }
-
-    protected void onDisengage(AxisModule module) throws AxisFault {
-        // Base version does nothing
-    }
+       protected void onEngage(AxisModule module, AxisDescription engager)
+                       throws AxisFault {
+               // Default version does nothing, feel free to override
+       }
+
+       static Collection NULL_MODULES = new ArrayList(0);
+
+       public Collection getEngagedModules() {
+               return engagedModules == null ? NULL_MODULES : 
engagedModules.values();
+       }
+
+       /**
+        * Check if a given module is engaged at this level.
+        * 
+        * @param moduleName
+        *            module to investigate.
+        * @return true if engaged, false if not. TODO: Handle versions?
+        *         isEngaged("addressing") should be true even for versioned
+        *         modulename...
+        */
+       public boolean isEngaged(String moduleName) {
+               return engagedModules != null
+                               && engagedModules.keySet().contains(moduleName);
+       }
+
+       public boolean isEngaged(AxisModule axisModule) {
+               String id = Utils.getModuleName(axisModule.getName(), axisModule
+                               .getVersion());
+               return engagedModules != null && 
engagedModules.keySet().contains(id);
+       }
+
+       public void disengageModule(AxisModule module) throws AxisFault {
+               if (module == null || engagedModules == null)
+                       return;
+               // String id = Utils.getModuleName(module.getName(),
+               // module.getVersion());
+               if (isEngaged(module)) {
+                       onDisengage(module);
+                       
engagedModules.remove(Utils.getModuleName(module.getName(), module
+                                       .getVersion()));
+               }
+       }
+
+       protected void onDisengage(AxisModule module) throws AxisFault {
+               // Base version does nothing
+       }
+
+       private Policy getApplicablePolicy(AxisDescription axisDescription) {
+
+               if (axisDescription instanceof AxisOperation) {
+                       AxisOperation operation = (AxisOperation) 
axisDescription;
+                       AxisService service = operation.getAxisService();
+
+                       if (service != null) {
+
+                               AxisEndpoint axisEndpoint = 
service.getEndpoint(service
+                                               .getEndpointName());
+
+                               AxisBinding axisBinding = null;
+
+                               if (axisEndpoint != null) {
+                                       axisBinding = axisEndpoint.getBinding();
+                               }
+
+                               AxisBindingOperation axisBindingOperation = 
null;
+
+                               if (axisBinding != null) {
+                                       axisBindingOperation = 
(AxisBindingOperation) axisBinding
+                                                       
.getChild(operation.getName());
+                               }
+
+                               if (axisBindingOperation != null) {
+                                       return 
axisBindingOperation.getEffectivePolicy();
+                               }
+                       }
+
+                       return 
operation.getPolicyInclude().getEffectivePolicy();
+
+               } else if (axisDescription instanceof AxisService) {
+                       AxisService service = (AxisService) axisDescription;
+
+                       AxisEndpoint axisEndpoint = service.getEndpoint(service
+                                       .getEndpointName());
+                       AxisBinding axisBinding = null;
+
+                       if (axisEndpoint != null) {
+                               axisBinding = axisEndpoint.getBinding();
+                       }
+
+                       if (axisBinding != null) {
+                               return axisBinding.getEffectivePolicy();
+                       }
+
+                       return service.getPolicyInclude().getEffectivePolicy();
+
+               } else {
+                       return 
axisDescription.getPolicyInclude().getEffectivePolicy();
+               }
+       }
+
+       public PolicySubject getPolicySubject() {
+               return policySubject;
+       }
 
-    private Policy getApplicablePolicy(AxisDescription axisDescription) {
-
-        if (axisDescription instanceof AxisOperation) {
-            AxisOperation operation = (AxisOperation) axisDescription;
-            AxisService service = operation.getAxisService();
-
-            if (service != null) {
-
-                AxisEndpoint axisEndpoint = 
service.getEndpoint(service.getEndpointName());
-
-                AxisBinding axisBinding = null;
-
-                if (axisEndpoint != null) {
-                    axisBinding = axisEndpoint.getBinding();
-                }
-
-                AxisBindingOperation axisBindingOperation = null;
-
-                if (axisBinding != null) {
-                    axisBindingOperation = (AxisBindingOperation) 
axisBinding.getChild(operation.getName());
-                }
-
-                if (axisBindingOperation != null) {
-                    return axisBindingOperation.getEffectivePolicy();
-                }
-            }
-
-            return operation.getPolicyInclude().getEffectivePolicy();
-
-        } else if (axisDescription instanceof AxisService) {
-            AxisService service = (AxisService) axisDescription;
-
-            AxisEndpoint axisEndpoint = 
service.getEndpoint(service.getEndpointName());
-            AxisBinding axisBinding = null;
-
-            if (axisEndpoint != null) {
-                axisBinding = axisEndpoint.getBinding();
-            }
-
-            if (axisBinding != null) {
-                return axisBinding.getEffectivePolicy();
-            }
-
-            return service.getPolicyInclude().getEffectivePolicy();
-
-        } else {
-            return axisDescription.getPolicyInclude().getEffectivePolicy();
-        }
-    }
 }

Modified: 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisEndpoint.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisEndpoint.java?rev=633485&r1=633484&r2=633485&view=diff
==============================================================================
--- 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisEndpoint.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisEndpoint.java
 Tue Mar  4 06:31:32 2008
@@ -23,126 +23,188 @@
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.transport.TransportListener;
+import org.apache.axis2.transport.http.server.HttpUtils;
 import org.apache.axis2.util.WSDLSerializationUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
+import java.net.SocketException;
 import java.util.HashMap;
 import java.util.Map;
 
 public class AxisEndpoint extends AxisDescription {
 
-    // The name of the endpoint
-    private String name;
+       private static final Log logger = LogFactory.getLog(AxisEndpoint.class);
 
-    // The binding reffered to by the endpoint
-    private AxisBinding binding;
+       // The name of the endpoint
+       private String name;
 
-    // The address of the endpoint
-    private String endpointURL;
+       // The binding reffered to by the endpoint
+       private AxisBinding binding;
 
-    // The alias used for the endpoint
-    private String alias;
-
-    private Map options;
-
-
-    public String getEndpointURL() {
-        return endpointURL;
-    }
-
-    public void setEndpointURL(String endpointURL) {
-        this.endpointURL = endpointURL;
-    }
-
-    public AxisEndpoint() {
-        options = new HashMap();
-    }
-
-    public void setProperty(String name, Object value) {
-        options.put(name, value);
-    }
-
-    /**
-     * @param name name of the property to search for
-     * @return the value of the property, or null if the property is not found
-     */
-    public Object getProperty(String name) {
-        Object obj = options.get(name);
-        if (obj != null) {
-            return obj;
-        }
-
-        return null;
-    }
-
-    public String getAlias() {
-        return alias;
-    }
-
-    public void setAlias(String alias) {
-        this.alias = alias;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public AxisBinding getBinding() {
-        return binding;
-    }
-
-    public void setBinding(AxisBinding binding) {
-        this.binding = binding;
-    }
-
-    public Object getKey() {
-        //ToDO
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-    }
-
-    public void engageModule(AxisModule axisModule) throws AxisFault {
-        throw new UnsupportedOperationException("Sorry we do not support 
this");
-    }
-
-    public boolean isEngaged(String moduleName) {
-        throw new UnsupportedOperationException("axisMessage.isEngaged() is 
not supported");
-    }
-
-    public OMElement toWSDL20(OMNamespace wsdl, OMNamespace tns, OMNamespace 
whttp, String epr) {
-        String property;
-        String name;
-        if (epr.startsWith("https://";)) {
-            // The reason to do this is to have camel case
-            String endpointName = this.getName();
-            name = WSDL2Constants.DEFAULT_HTTPS_PREFIX + 
endpointName.substring(0,1).toUpperCase() + endpointName.substring(1);
-        } else {
-            name = this.getName();
-        }
-        OMFactory omFactory = OMAbstractFactory.getOMFactory();
-        OMElement endpointElement = 
omFactory.createOMElement(WSDL2Constants.ENDPOINT_LOCAL_NAME, wsdl);
-        
endpointElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_NAME,
 null, name));
-        
endpointElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.BINDING_LOCAL_NAME,
 null, tns.getPrefix() + ":" + getBinding().getName().getLocalPart()));
-        
endpointElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_ADDRESS,
 null, epr));
-        Object authenticationScheme = 
this.options.get(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_TYPE);
-        if (authenticationScheme != null) {
-           
endpointElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_AUTHENTICATION_TYPE,
 whttp, authenticationScheme.toString()));
-        }
-        property = 
(String)options.get(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_REALM);
-        if (property != null) {
-           
endpointElement.addAttribute(omFactory.createOMAttribute(WSDL2Constants.ATTRIBUTE_AUTHENTICATION_REALM,
 whttp, property));
-        }
-        WSDLSerializationUtil.addWSDLDocumentationElement(this, 
endpointElement, omFactory, wsdl);
-        return endpointElement;
-    }
-
-    public AxisService getAxisService() {
-        return (AxisService)parent;
-    }
-
-    public void setParent(AxisService service) {
-        parent = service;
-    }
+       // The address of the endpoint
+       private String endpointURL;
+
+       // The alias used for the endpoint
+       private String alias;
+
+       private Map options;
+
+       private String transportInDescName;
+
+       public String getEndpointURL() {
+               if (endpointURL == null) {
+                       endpointURL = calculateEndpointURL();
+               }
+               return endpointURL;
+       }
+
+       public void setEndpointURL(String endpointURL) {
+               this.endpointURL = endpointURL;
+       }
+
+       public AxisEndpoint() {
+               options = new HashMap();
+       }
+
+       public void setProperty(String name, Object value) {
+               options.put(name, value);
+       }
+
+       /**
+        * @param name
+        *            name of the property to search for
+        * @return the value of the property, or null if the property is not 
found
+        */
+       public Object getProperty(String name) {
+               Object obj = options.get(name);
+               if (obj != null) {
+                       return obj;
+               }
+
+               return null;
+       }
+
+       public String getAlias() {
+               return alias;
+       }
+
+       public void setAlias(String alias) {
+               this.alias = alias;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       public AxisBinding getBinding() {
+               return binding;
+       }
+
+       public void setBinding(AxisBinding binding) {
+               this.binding = binding;
+       }
+
+       public Object getKey() {
+               // ToDO
+               return null; // To change body of implemented methods use File |
+               // Settings | File Templates.
+       }
+
+       public void engageModule(AxisModule axisModule) throws AxisFault {
+               throw new UnsupportedOperationException("Sorry we do not 
support this");
+       }
+
+       public boolean isEngaged(String moduleName) {
+               throw new UnsupportedOperationException(
+                               "axisMessage.isEngaged() is not supported");
+       }
+
+       public OMElement toWSDL20(OMNamespace wsdl, OMNamespace tns,
+                       OMNamespace whttp, String epr) {
+               String property;
+               String name;
+               if (epr.startsWith("https://";)) {
+                       // The reason to do this is to have camel case
+                       String endpointName = this.getName();
+                       name = WSDL2Constants.DEFAULT_HTTPS_PREFIX
+                                       + endpointName.substring(0, 
1).toUpperCase()
+                                       + endpointName.substring(1);
+               } else {
+                       name = this.getName();
+               }
+               OMFactory omFactory = OMAbstractFactory.getOMFactory();
+               OMElement endpointElement = omFactory.createOMElement(
+                               WSDL2Constants.ENDPOINT_LOCAL_NAME, wsdl);
+               endpointElement.addAttribute(omFactory.createOMAttribute(
+                               WSDL2Constants.ATTRIBUTE_NAME, null, name));
+               endpointElement.addAttribute(omFactory.createOMAttribute(
+                               WSDL2Constants.BINDING_LOCAL_NAME, null, 
tns.getPrefix() + ":"
+                                               + 
getBinding().getName().getLocalPart()));
+               endpointElement.addAttribute(omFactory.createOMAttribute(
+                               WSDL2Constants.ATTRIBUTE_ADDRESS, null, epr));
+               Object authenticationScheme = this.options
+                               
.get(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_TYPE);
+               if (authenticationScheme != null) {
+                       
endpointElement.addAttribute(omFactory.createOMAttribute(
+                                       
WSDL2Constants.ATTRIBUTE_AUTHENTICATION_TYPE, whttp,
+                                       authenticationScheme.toString()));
+               }
+               property = (String) options
+                               
.get(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_REALM);
+               if (property != null) {
+                       
endpointElement.addAttribute(omFactory.createOMAttribute(
+                                       
WSDL2Constants.ATTRIBUTE_AUTHENTICATION_REALM, whttp,
+                                       property));
+               }
+               WSDLSerializationUtil.addWSDLDocumentationElement(this,
+                               endpointElement, omFactory, wsdl);
+               return endpointElement;
+       }
+
+       public AxisService getAxisService() {
+               return (AxisService) parent;
+       }
+
+       public void setParent(AxisService service) {
+               parent = service;
+       }
+
+       public void setTransportInDescription(String transportInDescName) {
+               this.transportInDescName = transportInDescName;
+       }
+
+       private String calculateEndpointURL() {
+               if (transportInDescName != null && parent != null) {
+                       AxisConfiguration axisConfiguration = 
getAxisConfiguration();
+                       if (axisConfiguration != null) {
+                               try {
+                                       String serviceName = ((AxisService) 
parent).getName();
+                                       TransportInDescription in = 
axisConfiguration
+                                                       
.getTransportIn(transportInDescName);
+                                       TransportListener listener = 
in.getReceiver();
+                                       String ip = 
HttpUtils.getIpAddress(axisConfiguration);
+                                       EndpointReference[] eprsForService = 
listener
+                                                       
.getEPRsForService(serviceName, ip);
+                                       // we consider only the first address 
return by the listener
+                                       if (eprsForService != null && 
eprsForService.length > 0) {
+                                               return 
eprsForService[0].getAddress();
+                                       }
+                               } catch (SocketException e) {
+                                       logger.warn("", e);
+                               } catch (AxisFault e) {
+                                       logger.warn("", e);
+                               }
+                       }
+               }
+               
+               return null;
+       }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to