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]