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

Jeff Thomas edited comment on AXIS2-5721 at 1/14/20 11:33 PM:
--------------------------------------------------------------

Here is the full implementation of the method _invoke(MessageContext)_ I went 
with...seems to be working.  

Switched to this approach because some handlers do not have parent Modules - 
for example, if they are defined directly on the phase in _axis2.xml_.

 

 

public final InvocationResponse invoke(MessageContext msgctx) throws AxisFault {
 
  if (isDebugEnabled) {
    log.debug(msgctx.getLogIDString() + " Checking pre-condition for Phase \"" 
+ phaseName + "\"");
  }

  int currentIndex = msgctx.getCurrentPhaseIndex();

  if (currentIndex == 0) {
    checkPreconditions(msgctx);
  }

  if (isDebugEnabled) {
    log.debug(msgctx.getLogIDString() + " Invoking phase \"" + phaseName + 
"\"");
  }

  int handlersSize = handlers.size();
 
  for (int i= currentIndex; i < handlersSize; i++) {

    boolean doInvoke = true;

    Handler handler = (Handler) handlers.get(i);

    ParameterInclude handlerParent = handler.getHandlerDesc().getParent();

    if (handlerParent instanceof AxisModule) {

      AxisModule module = (AxisModule) handlerParent;

      if (!msgctx.isEngaged(module.getName())) {
        doInvoke = false;
      }

    }

    if (doInvoke) {

       InvocationResponse pi = invokeHandler(handler, msgctx);

      if (!pi.equals(InvocationResponse.CONTINUE)) {
        return pi;
      }

    }

    // Set phase index to the next handler
    msgctx.setCurrentPhaseIndex(i+1);

 }

 

Edit: sorry but I am having a horrible time posting code in this editor...adds 
all these silly brackets.

 


was (Author: jwt007):
Here is the full implementation of the method _invoke(MessageContext)_ I went 
with...seems to be working.  

Switched to this approach because some handlers do not have parent Modules - 
for example, if they are defined directly on the phase in _axis2.xml_.

{{public final InvocationResponse invoke(MessageContext msgctx) throws 
AxisFault {}}

{{  if (isDebugEnabled) {}}
{{    log.debug(msgctx.getLogIDString() + " Checking pre-condition for Phase 
\"" + phaseName + "\"");}}
{{  }}}

{{  int currentIndex = msgctx.getCurrentPhaseIndex();}}

{{  if (currentIndex == 0) {}}
{{    checkPreconditions(msgctx);}}
{{  }}}

{{  if (isDebugEnabled) {}}
{{    log.debug(msgctx.getLogIDString() + " Invoking phase \"" + phaseName + 
"\"");}}
{{  }}}

{{  int handlersSize = handlers.size();}}

{{  for (int i= currentIndex; i < handlersSize; i++) {}}

{{    boolean doInvoke = true;}}

{{    Handler handler = (Handler) handlers.get(i);}}

{{    ParameterInclude handlerParent = handler.getHandlerDesc().getParent();}}

{{    if (handlerParent instanceof AxisModule) {}}

{{      AxisModule module = (AxisModule) handlerParent;}}

{{      if (!msgctx.isEngaged(module.getName())) {}}
{{        doInvoke = false;}}
{{      }}}

{{    }}}

{{    if (doInvoke) {}}

{{      InvocationResponse pi = invokeHandler(handler, msgctx);}}

{{      if (!pi.equals(InvocationResponse.CONTINUE)) {}}
{{        return pi;}}
{{      }}}

{{    }}}

{{    // Set phase index to the next handler}}
{{   msgctx.setCurrentPhaseIndex(i+1);}}

{{ }}}

 

> Module engaged at the service level is used globally
> ----------------------------------------------------
>
>                 Key: AXIS2-5721
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5721
>             Project: Axis2
>          Issue Type: Bug
>          Components: modules
>    Affects Versions: 1.6.3
>            Reporter: Victor
>            Priority: Major
>
> Hi,
> Maybe I misunderstood how Axis2 was meant to work, but I have addressing and 
> rampart present in my modules directory, they are made available in the 
> AxisConfiguration object, then addressing is globally engaged because it is 
> present in the axis2.xml file.
> Later I engage rampart manually on a specific service (by calling 
> engageModule() on the AxisService object) and then the rampart handlers are 
> executed for every request, even not those of the aforementioned service.
> I looked at the code and apparently, engageModule() goes down to call 
> PhaseResolver.engageModuleToOperation(AxisOperation, AxisModule, int) on all 
> the operations of the AxisService, gather all the phases from the global 
> AxisConfiguration object and then add the Handler to the needed phases 
> (Security in this case) within the method 
> PhaseHolder.addHandler(HandlerDescription).
> Obviously, being in an Object-Oriented language, modifying the Phase without 
> cloning it first will impact also the global AxisConfiguration that have 
> references to them as well as all the other PhaseHolder for all the 
> operations that have references to them…
> Is that meant to be? I don't think so but I may be mistaken :)
> Thank you



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to