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

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

Hi guys,
  It happens that in some cases the "axisOperation" field in the MessageContext 
is null, which causes a NPE in getApplicablePolicy() when trying to get the 
operation's name. 
This occurred by me when trying to execute the "RahasSAMLTokenV1205Test" test 
case from the rampart-integration module.
I examined it and found out that the request dispatcher could identify the 
service (SecureService in this case), but could not identify the operation to 
execute (issue). 
The problem seems to be that the action mapping of the Rahas module for the 
Issue operation is:
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue (see rahas module.xml)
while the action set on the client is:
http://docs.oasis-open.org/ws-sx/ws-trust/200512 (see 
RahasSAMLTokenV1205Test#getRequestAction())

Since these are obviously different, the SOAPActionBasedDispatcher does not 
find the operation to invoke and thus the MC's axisOperation remains null. It 
is interesting that without this patch the test case runs successfully.

Nandana, do you have an idea why this happens?

> 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