Problem to retrieve the effective policy from MessageContext when we have policy attachment at binding level ------------------------------------------------------------------------------------------------------------
Key: AXIS2-4114 URL: https://issues.apache.org/jira/browse/AXIS2-4114 Project: Axis 2.0 (Axis2) Issue Type: Bug Components: kernel Reporter: Dobri Kitipov Hi, I have a problem when I try to get the effective policy from a MessageContext when I have a policy attached at the binding level of a Web Service. I am using Axis2 1.4.0 Let me explain a little bit the scenario I have. I am using an AAR that has into its services.xml: <parameter name="useOriginalwsdl">true</parameter> and a PolicyAttachment at its service level: <wsp:PolicyAttachment xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <wsp:AppliesTo> <policy-subject identifier="binding:soap11"/> <policy-subject identifier="binding:soap12"/> </wsp:AppliesTo> <wsp:Policy wsu:Id="User" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">... </wsp:PolicyAttachment> As a result the WSDL generated has the policy specified and policy reference at the binding subject level. Here is an excerpt from the wsdl for the SOAP11Binding: <wsdl:binding name="MTOMServiceSOAP11Binding" type="tns:MTOMServicePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsp:PolicyReference URI="#User"/> At client side I have a dynamic client. So the issue is that when I invoke the service and the WSDL is read and the corresponding AxisService object is crated at the client side I have some modules' handlers that take palce. One of them is a custom one in which I have the following invocation: Policy policy = msgCtx.getEffectivePolicy(); The problem is that this returns "null"! I debugged this and it came out that msgCtx is not null. When the method is invoked it tries to calculate the effective policy as given below. AxisBindingMessage bindingMessage = (AxisBindingMessage) getProperty(Constants.AXIS_BINDING_MESSAGE); if (bindingMessage != null) { return bindingMessage.getEffectivePolicy(); } else { if (axisMessage != null) { return axisMessage.getEffectivePolicy(); } else { return null; } } where bindingMessage is null and axisMessage.getEffectivePolicy(); returns null, too. When I dig through the AxisService -> AxisEndpoint -> AxisBinding -> here the PolicySubject is in fact a PolicyReference to the Policy that is set into the AxisService policyMap. So as a result axisMessage.getEffectivePolicy() returns null and I can not get the Policy I need. I saw that I need something like the AxisDescription.getApplicablePolicy in order to locate the real Policy of a given PolicyReference. You can see the patch applied that I have tested and seem to me that works fine. Thank you in advance, Dobri -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]