[ 
https://issues.apache.org/jira/browse/AXIS2-4114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12650968#action_12650968
 ] 

Detelin Yordanov commented on AXIS2-4114:
-----------------------------------------

Hi guys,
  It seems we have a chicken-and-egg problem here - we need to obtain the name 
of the operation to invoke so that we get the binding operation and binding 
message policies and compute the effective policy.

However, the operation to invoke could be populated in the Transport phase 
(before Security) only if it is identified by means of a SOAP Action, request 
URI and/or Addressing info in the request, but if such info is not available, 
these dispatchers won't be able to identify the operation and populate it in 
the message context.

After the Transport phase, Rampart will be invoked and it will request the 
effective policy but won't be able to get the binding-level policies if the 
operation is not identified.
After Security, in the Dispatch phase, the operation is normally identified 
from the SOAP message body, but this cannot be done before the Security phase 
since the body might be encrypted and the operation not visible.
So it seems that if we want to support the binding operation & binding 
operation message level security policies, we will have to instruct the client 
to use Soap Action/ Request URI or addressing so that we can identify the 
operation before Rampart.

Are these assumptions correct or there is some workaround we can use here?

Regards,
   Detelin


> 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
>            Assignee: Nandana Mihindukulasooriya
>         Attachments: MessageContext_effectivePolicy.patch
>
>
> 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]

Reply via email to