Hi Deepal,

    I have added the code in the handler class like

        if(msgContext.getFLOW()==1)
        {
                 logger.info("This is inFlow");
                 System.out.println("This is inFlow");
                 MessageContext faultContext =                                 
                         
MessageContextBuilder.createFaultMessageContext(msgContext, new                
AxisFault("validation failed error", new QName("validation error", "wsa"))); 
                         AxisEngine.sendFault(faultContext); 
                                 
        }

  I am using the same handler class for inflow and outfault flow thats why i
am checking if(msgContext.getFLOW()==1). At client console i am getting
error like 

org.apache.axis2.AxisFault: validation failed error
        at
org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:512)
        at
org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:370)
        at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
        at
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
        at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
        at
org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:548)
        at
org.apache.rahas.client.STSClient.requestSecurityToken(STSClient.java:127)
        at org.apache.rampart.util.RampartUtil.getToken(RampartUtil.java:486)
        at
org.apache.rampart.util.RampartUtil.getSecConvToken(RampartUtil.java:396)
        at
org.apache.rampart.builder.SymmetricBindingBuilder.initializeTokens(SymmetricBindingBuilder.java:670)
        at
org.apache.rampart.builder.SymmetricBindingBuilder.build(SymmetricBindingBuilder.java:73)
        at org.apache.rampart.MessageBuilder.build(MessageBuilder.java:128)
        at 
org.apache.rampart.handler.RampartSender.invoke(RampartSender.java:64)
        at org.apache.axis2.engine.Phase.invoke(Phase.java:317)
        at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264)
        at org.apache.axis2.engine.AxisEngine.resumeSend(AxisEngine.java:370)
        at org.apache.sandesha2.workers.SenderWorker.run(SenderWorker.java:287)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
        at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
        at java.lang.Thread.run(Thread.java:735)

and its keep on executing the handler, Because i am able to see the log
message i am printing in inflow if condition again and again. I am printing
the message context in OutFaultFlow. i am getting the message like 
                        
This is OutFaultFlow
 messagecontext==<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
xmlns:s
oapenv="http://www.w3.org/2003/05/soap-envelope";><soapenv:Body><soapenv:Fault
xm
lns:axis2ns5="validation
error"><soapenv:Code><soapenv:Value>axis2ns5:wsa</soape
nv:Value></soapenv:Code><soapenv:Reason><soapenv:Text
xml:lang="en-US">validatio
n failed error</soapenv:Text></soapenv:Reason><soapenv:Detail
/></soapenv:Fault>
</soapenv:Body></soapenv:Envelope>

Thanks,
Swapna Soni.

Deepal Jayasinghe-2 wrote:
> 
> Try this,
> 
> MessageContext faultContext =                                
> MessageContextBuilder.createFaultMessageContext(messageCtx, e);
> AxisEngine.sendFault(faultContext);
> 
> - Deepal
>> Hi Deepal,
>>
>>    Thanks for your reply. If we set the AxisEngine.sendFault(msgContext)
>> in
>> inflow handler, it will execute the outFaultFlow but client program wotn
>> get
>> any response and we are getting org.apache.axis2.AxisFault: Read timed
>> out
>> exception. And its again and again executing the inflow handler. For
>> testing
>> purpose i have written 
>>      if(msgContext.getFLOW()==1)
>>         {
>>               logger.info("This is inFlow");
>> }
>>  in the inFlowhandler class and its getting execute again and again. But
>> i
>> want it should get execute only once when request comes from client and
>> it
>> should do validation of that request message, if something is wrong then
>> outflow or OutFaultFlow should get execute and send the proper error
>> response to client and should get terminate there only. Once we get any
>> validation error in inFlow handler, it should not process further engaged
>> module and request should terminate in inFlow and from there client
>> should
>> get response via outFlow or outFaultFlow.
>>
>>    We are engaging the sandesha and rampart from in the client program
>> only.
>>
>>                      sender.engageModule("addressing"); 
>>                      sender.engageModule("sandesha2");
>>                      
>> options.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,
>> "Yash_Seq");
>>                      sender.engageModule("rampart");
>>              
>>                      
>> options.setProperty(RampartMessageData.KEY_RAMPART_POLICY,                   
>>    
>> loadPolicy("C:/WS-X/misc/20090427/WTPTestRM2Client/WebContent/WEB-INF/conf/policy.xml"));
>>
>> Could you please let us know how to achieve this functionality. 
>>
>> Thanks,
>> Swapna Soni.
>>
>> Deepal Jayasinghe-2 wrote:
>>   
>>> Behavior will be different based on the dispatch status, but you can
>>> simply call.
>>>
>>> AxisEngine.sendFault(messageContext)
>>>
>>> Then it will send  the fault
>>>
>>> -  Deepal
>>>     
>>>> Hi Axis Team,
>>>>
>>>>     I have one very urgent requirement. One client program invokes the
>>>> service in which sandesha, rampart and one custom module is engaged. In
>>>> custom Inflow handler we do some validation. If something is wrong in
>>>> that
>>>> validation, then we want it to start the outFlow and send the custom
>>>> response to client back without executing further engaged modules and
>>>> without invoking service. 
>>>>
>>>>    Could anyone please tell me how can i do this using axis2 api. Its
>>>> very
>>>> very urgent requirement for us. 
>>>>
>>>> Thanks,
>>>> swapna soni
>>>>   
>>>>       
>>> -- 
>>> Thank you!
>>>
>>>
>>> http://blogs.deepal.org
>>> http://deepal.org
>>>
>>>
>>>
>>>     
>>
>>   
> 
> 
> -- 
> Thank you!
> 
> 
> http://blogs.deepal.org
> http://deepal.org
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23523940.html
Sent from the Axis - Dev mailing list archive at Nabble.com.

Reply via email to