You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Senthil Sona <sw...@cisco.com> on 2009/05/13 15:26:58 UTC

How to terminate InFlow and start OutFlow in the custom handler of axis2

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
-- 
View this message in context: http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23521710.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Deepal/Amila,

   Could you please reply to my previous mail.

Thanks,
Swapna Soni.


Senthil Sona wrote:
> 
> I Tried that also, its behaving the same
> 
> Deepal Jayasinghe-2 wrote:
>> 
>> 
>>>
>>> org.apache.axis2.AxisFault: validation failed error with complete stack
>>> trace. And its printing again and again. 
>> Thats correct right?
>> Because whenever message comes to the server it sends a fault, so client
>> keeps on getting faults. The solution would be do have some condition in
>> the in-flow handler and throw the exception only if something went wrong.
>>> this  is becuase we are engaging
>>> sandesha and its not getting acknowledge thats why its sending teh
>>> request
>>> again and again. How to stop this and send the fault response to client.
>>> Please help me.
>>>   
>> I think you might have put the handler in the wrong place, how about
>> putting the handler after the sandesha handlers ?
>> 
>> Deepal
>>> Thanks,
>>> Swapna Soni.
>>>
>>>
>>> Deepal Jayasinghe-2 wrote:
>>>   
>>>> As I can see the problem is, in the faultflow you abort the execution,
>>>> so you get such an error. try to use two handlers for in-flow and
>>>> fault-flow
>>>>
>>>> Deepal
>>>>     
>>>>> Hi Amila,
>>>>>
>>>>>    I have written the below code in handler this time.
>>>>>
>>>>> 	public InvocationResponse invoke(MessageContext msgContext) throws
>>>>> AxisFault {
>>>>> 		if(msgContext.getFLOW()==1)
>>>>>         	 {
>>>>> 			throw new AxisFault("validation failed error");
>>>>> 		  }
>>>>>  	 return InvocationResponse.ABORT;
>>>>> 	}
>>>>> Now when i am running the client, i am getting the below exception
>>>>> instead
>>>>> of fault response message.
>>>>>
>>>>> org.apache.axis2.AxisFault: First Element must contain the local name,
>>>>> Envelope , but found html
>>>>> 	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
>>>>> 	at
>>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
>>>>> 	at
>>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>>> 	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)
>>>>> Caused by: org.apache.axiom.soap.SOAPProcessingException: First
>>>>> Element
>>>>> must
>>>>> contain the local name, Envelope , but found html
>>>>> 	at
>>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
>>>>> 	at
>>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
>>>>> 	at
>>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java
>>>>>
>>>>> Thanks,
>>>>> Swapna Soni.
>>>>>
>>>>>
>>>>> Amila Suriarachchi wrote:
>>>>>   
>>>>>       
>>>>>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com>
>>>>>> wrote:
>>>>>>
>>>>>>     
>>>>>>         
>>>>>>> Hi Amila,
>>>>>>>
>>>>>>>    I have set the written the below code in my custom module.
>>>>>>>
>>>>>>>         public InvocationResponse invoke(MessageContext msgContext)
>>>>>>> throws
>>>>>>> AxisFault {
>>>>>>>                if(msgContext.getFLOW()==1)
>>>>>>>                  {
>>>>>>>                         MessageContext faultContext =
>>>>>>>
>>>>>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>>>>>> AxisFault("validation failed error", new QName("validation error",
>>>>>>> "wsa")));
>>>>>>>                         AxisEngine.sendFault(faultContext);
>>>>>>>
>>>>>>>       
>>>>>>>           
>>>>>> here as I told you earlier try to throw the AxisFault()
>>>>>>
>>>>>> i.e throw new AxisFault("validation error");
>>>>>>
>>>>>> then the fault sending part is done at the transport level.
>>>>>>
>>>>>> thanks,
>>>>>> Amila.
>>>>>>
>>>>>>     
>>>>>>         
>>>>>>>                  }
>>>>>>>          return InvocationResponse.ABORT;
>>>>>>>        }
>>>>>>>
>>>>>>> But when running the client program i am getting error at client
>>>>>>> console
>>>>>>> like
>>>>>>>
>>>>>>> org.apache.axis2.AxisFault: The input stream for an incoming message
>>>>>>> is
>>>>>>> null.
>>>>>>>        at
>>>>>>>
>>>>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>>>>>        at
>>>>>>>
>>>>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>>>>>         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)
>>>>>>>
>>>>>>> For outFaultFlow i am calling same handler and wrote the code like
>>>>>>>
>>>>>>>           if(msgContext.getFLOW()==4) {
>>>>>>>                System.out.println("This is OutFaultFlow");
>>>>>>>                System.out.println("
>>>>>>> messagecontext=="+msgContext.getEnvelope());
>>>>>>>           }
>>>>>>> So its printing the fault soap resonse
>>>>>>>
>>>>>>> <?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>
>>>>>>>
>>>>>>> I want this response should be printed at client console. How can i
>>>>>>> do
>>>>>>> this,
>>>>>>> please help me. Its stopping our  productivity.
>>>>>>>
>>>>>>> I have uploaded the Handler class and client class. Could you please
>>>>>>> have
>>>>>>> a
>>>>>>> webex session with us. So that we can show you our complete code and
>>>>>>> how
>>>>>>> the
>>>>>>> program is behaving when we run the client. It will help us to
>>>>>>> resolve
>>>>>>> the
>>>>>>> problem soon.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Swapna Soni.
>>>>>>>
>>>>>>>
>>>>>>> Amila Suriarachchi wrote:
>>>>>>>       
>>>>>>>           
>>>>>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>         
>>>>>>>>             
>>>>>>>>> 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);
>>>>>>>>>           
>>>>>>>>>               
>>>>>>>> it is bit difficult to answer your question without looking all
>>>>>>>> your
>>>>>>>>         
>>>>>>>>             
>>>>>>> code.
>>>>>>>       
>>>>>>>           
>>>>>>>> But try this.
>>>>>>>>
>>>>>>>>
>>>>>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>>>>>         
>>>>>>>>             
>>>>>>> here.
>>>>>>>       
>>>>>>>           
>>>>>>>> When you throw an AxisFault it is caught at the transport level and
>>>>>>>> it
>>>>>>>> sends
>>>>>>>> the fault message by calling to fault flow.
>>>>>>>>
>>>>>>>> if you want to send a normal soap message do this,
>>>>>>>>
>>>>>>>> MessageContext outMsgContext =
>>>>>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>>>>>> AxisEngine.send(outMsgContext);
>>>>>>>> return InvocationResponse.ABORT
>>>>>>>>
>>>>>>>> here it is important to return InvocationResponse.ABORT to
>>>>>>>> terminate
>>>>>>>>         
>>>>>>>>             
>>>>>>> the
>>>>>>>       
>>>>>>>           
>>>>>>>> inFlow.
>>>>>>>>
>>>>>>>> thanks,
>>>>>>>> Amila.
>>>>>>>>
>>>>>>>>         
>>>>>>>>             
>>>>>>>>>        }
>>>>>>>>>
>>>>>>>>>  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.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>           
>>>>>>>>>               
>>>>>>>> --
>>>>>>>> Amila Suriarachchi
>>>>>>>> WSO2 Inc.
>>>>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>>>>
>>>>>>>>
>>>>>>>>         
>>>>>>>>             
>>>>>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>>>>>> http://www.nabble.com/file/p23534995/client.java client.java
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>>>>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>>>>>
>>>>>>>
>>>>>>>       
>>>>>>>           
>>>>>> -- 
>>>>>> Amila Suriarachchi
>>>>>> WSO2 Inc.
>>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>>
>>>>>>
>>>>>>     
>>>>>>         
>>>>>   
>>>>>       
>>>> -- 
>>>> 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-tp23521710p23560612.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
I Tried that also, its behaving the same

Deepal Jayasinghe-2 wrote:
> 
> 
>>
>> org.apache.axis2.AxisFault: validation failed error with complete stack
>> trace. And its printing again and again. 
> Thats correct right?
> Because whenever message comes to the server it sends a fault, so client
> keeps on getting faults. The solution would be do have some condition in
> the in-flow handler and throw the exception only if something went wrong.
>> this  is becuase we are engaging
>> sandesha and its not getting acknowledge thats why its sending teh
>> request
>> again and again. How to stop this and send the fault response to client.
>> Please help me.
>>   
> I think you might have put the handler in the wrong place, how about
> putting the handler after the sandesha handlers ?
> 
> Deepal
>> Thanks,
>> Swapna Soni.
>>
>>
>> Deepal Jayasinghe-2 wrote:
>>   
>>> As I can see the problem is, in the faultflow you abort the execution,
>>> so you get such an error. try to use two handlers for in-flow and
>>> fault-flow
>>>
>>> Deepal
>>>     
>>>> Hi Amila,
>>>>
>>>>    I have written the below code in handler this time.
>>>>
>>>> 	public InvocationResponse invoke(MessageContext msgContext) throws
>>>> AxisFault {
>>>> 		if(msgContext.getFLOW()==1)
>>>>         	 {
>>>> 			throw new AxisFault("validation failed error");
>>>> 		  }
>>>>  	 return InvocationResponse.ABORT;
>>>> 	}
>>>> Now when i am running the client, i am getting the below exception
>>>> instead
>>>> of fault response message.
>>>>
>>>> org.apache.axis2.AxisFault: First Element must contain the local name,
>>>> Envelope , but found html
>>>> 	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
>>>> 	at
>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
>>>> 	at
>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>> 	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)
>>>> Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element
>>>> must
>>>> contain the local name, Envelope , but found html
>>>> 	at
>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
>>>> 	at
>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
>>>> 	at
>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java
>>>>
>>>> Thanks,
>>>> Swapna Soni.
>>>>
>>>>
>>>> Amila Suriarachchi wrote:
>>>>   
>>>>       
>>>>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com>
>>>>> wrote:
>>>>>
>>>>>     
>>>>>         
>>>>>> Hi Amila,
>>>>>>
>>>>>>    I have set the written the below code in my custom module.
>>>>>>
>>>>>>         public InvocationResponse invoke(MessageContext msgContext)
>>>>>> throws
>>>>>> AxisFault {
>>>>>>                if(msgContext.getFLOW()==1)
>>>>>>                  {
>>>>>>                         MessageContext faultContext =
>>>>>>
>>>>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>>>>> AxisFault("validation failed error", new QName("validation error",
>>>>>> "wsa")));
>>>>>>                         AxisEngine.sendFault(faultContext);
>>>>>>
>>>>>>       
>>>>>>           
>>>>> here as I told you earlier try to throw the AxisFault()
>>>>>
>>>>> i.e throw new AxisFault("validation error");
>>>>>
>>>>> then the fault sending part is done at the transport level.
>>>>>
>>>>> thanks,
>>>>> Amila.
>>>>>
>>>>>     
>>>>>         
>>>>>>                  }
>>>>>>          return InvocationResponse.ABORT;
>>>>>>        }
>>>>>>
>>>>>> But when running the client program i am getting error at client
>>>>>> console
>>>>>> like
>>>>>>
>>>>>> org.apache.axis2.AxisFault: The input stream for an incoming message
>>>>>> is
>>>>>> null.
>>>>>>        at
>>>>>>
>>>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>>>>        at
>>>>>>
>>>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>>>>         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)
>>>>>>
>>>>>> For outFaultFlow i am calling same handler and wrote the code like
>>>>>>
>>>>>>           if(msgContext.getFLOW()==4) {
>>>>>>                System.out.println("This is OutFaultFlow");
>>>>>>                System.out.println("
>>>>>> messagecontext=="+msgContext.getEnvelope());
>>>>>>           }
>>>>>> So its printing the fault soap resonse
>>>>>>
>>>>>> <?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>
>>>>>>
>>>>>> I want this response should be printed at client console. How can i
>>>>>> do
>>>>>> this,
>>>>>> please help me. Its stopping our  productivity.
>>>>>>
>>>>>> I have uploaded the Handler class and client class. Could you please
>>>>>> have
>>>>>> a
>>>>>> webex session with us. So that we can show you our complete code and
>>>>>> how
>>>>>> the
>>>>>> program is behaving when we run the client. It will help us to
>>>>>> resolve
>>>>>> the
>>>>>> problem soon.
>>>>>>
>>>>>> Thanks,
>>>>>> Swapna Soni.
>>>>>>
>>>>>>
>>>>>> Amila Suriarachchi wrote:
>>>>>>       
>>>>>>           
>>>>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>         
>>>>>>>             
>>>>>>>> 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);
>>>>>>>>           
>>>>>>>>               
>>>>>>> it is bit difficult to answer your question without looking all your
>>>>>>>         
>>>>>>>             
>>>>>> code.
>>>>>>       
>>>>>>           
>>>>>>> But try this.
>>>>>>>
>>>>>>>
>>>>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>>>>         
>>>>>>>             
>>>>>> here.
>>>>>>       
>>>>>>           
>>>>>>> When you throw an AxisFault it is caught at the transport level and
>>>>>>> it
>>>>>>> sends
>>>>>>> the fault message by calling to fault flow.
>>>>>>>
>>>>>>> if you want to send a normal soap message do this,
>>>>>>>
>>>>>>> MessageContext outMsgContext =
>>>>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>>>>> AxisEngine.send(outMsgContext);
>>>>>>> return InvocationResponse.ABORT
>>>>>>>
>>>>>>> here it is important to return InvocationResponse.ABORT to terminate
>>>>>>>         
>>>>>>>             
>>>>>> the
>>>>>>       
>>>>>>           
>>>>>>> inFlow.
>>>>>>>
>>>>>>> thanks,
>>>>>>> Amila.
>>>>>>>
>>>>>>>         
>>>>>>>             
>>>>>>>>        }
>>>>>>>>
>>>>>>>>  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.
>>>>>>>>
>>>>>>>>
>>>>>>>>           
>>>>>>>>               
>>>>>>> --
>>>>>>> Amila Suriarachchi
>>>>>>> WSO2 Inc.
>>>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>>>
>>>>>>>
>>>>>>>         
>>>>>>>             
>>>>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>>>>> http://www.nabble.com/file/p23534995/client.java client.java
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>>>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>>       
>>>>>>           
>>>>> -- 
>>>>> Amila Suriarachchi
>>>>> WSO2 Inc.
>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>
>>>>>
>>>>>     
>>>>>         
>>>>   
>>>>       
>>> -- 
>>> 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-tp23521710p23542256.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Deepal jayasinghe <de...@gmail.com>.
>
> org.apache.axis2.AxisFault: validation failed error with complete stack
> trace. And its printing again and again. 
Thats correct right?
Because whenever message comes to the server it sends a fault, so client
keeps on getting faults. The solution would be do have some condition in
the in-flow handler and throw the exception only if something went wrong.
> this  is becuase we are engaging
> sandesha and its not getting acknowledge thats why its sending teh request
> again and again. How to stop this and send the fault response to client.
> Please help me.
>   
I think you might have put the handler in the wrong place, how about
putting the handler after the sandesha handlers ?

Deepal
> Thanks,
> Swapna Soni.
>
>
> Deepal Jayasinghe-2 wrote:
>   
>> As I can see the problem is, in the faultflow you abort the execution,
>> so you get such an error. try to use two handlers for in-flow and
>> fault-flow
>>
>> Deepal
>>     
>>> Hi Amila,
>>>
>>>    I have written the below code in handler this time.
>>>
>>> 	public InvocationResponse invoke(MessageContext msgContext) throws
>>> AxisFault {
>>> 		if(msgContext.getFLOW()==1)
>>>         	 {
>>> 			throw new AxisFault("validation failed error");
>>> 		  }
>>>  	 return InvocationResponse.ABORT;
>>> 	}
>>> Now when i am running the client, i am getting the below exception
>>> instead
>>> of fault response message.
>>>
>>> org.apache.axis2.AxisFault: First Element must contain the local name,
>>> Envelope , but found html
>>> 	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
>>> 	at
>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
>>> 	at
>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>> 	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)
>>> Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element
>>> must
>>> contain the local name, Envelope , but found html
>>> 	at
>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
>>> 	at
>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
>>> 	at
>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java
>>>
>>> Thanks,
>>> Swapna Soni.
>>>
>>>
>>> Amila Suriarachchi wrote:
>>>   
>>>       
>>>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
>>>>
>>>>     
>>>>         
>>>>> Hi Amila,
>>>>>
>>>>>    I have set the written the below code in my custom module.
>>>>>
>>>>>         public InvocationResponse invoke(MessageContext msgContext)
>>>>> throws
>>>>> AxisFault {
>>>>>                if(msgContext.getFLOW()==1)
>>>>>                  {
>>>>>                         MessageContext faultContext =
>>>>>
>>>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>>>> AxisFault("validation failed error", new QName("validation error",
>>>>> "wsa")));
>>>>>                         AxisEngine.sendFault(faultContext);
>>>>>
>>>>>       
>>>>>           
>>>> here as I told you earlier try to throw the AxisFault()
>>>>
>>>> i.e throw new AxisFault("validation error");
>>>>
>>>> then the fault sending part is done at the transport level.
>>>>
>>>> thanks,
>>>> Amila.
>>>>
>>>>     
>>>>         
>>>>>                  }
>>>>>          return InvocationResponse.ABORT;
>>>>>        }
>>>>>
>>>>> But when running the client program i am getting error at client
>>>>> console
>>>>> like
>>>>>
>>>>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>>>>> null.
>>>>>        at
>>>>>
>>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>>>        at
>>>>>
>>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>>>         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)
>>>>>
>>>>> For outFaultFlow i am calling same handler and wrote the code like
>>>>>
>>>>>           if(msgContext.getFLOW()==4) {
>>>>>                System.out.println("This is OutFaultFlow");
>>>>>                System.out.println("
>>>>> messagecontext=="+msgContext.getEnvelope());
>>>>>           }
>>>>> So its printing the fault soap resonse
>>>>>
>>>>> <?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>
>>>>>
>>>>> I want this response should be printed at client console. How can i do
>>>>> this,
>>>>> please help me. Its stopping our  productivity.
>>>>>
>>>>> I have uploaded the Handler class and client class. Could you please
>>>>> have
>>>>> a
>>>>> webex session with us. So that we can show you our complete code and
>>>>> how
>>>>> the
>>>>> program is behaving when we run the client. It will help us to resolve
>>>>> the
>>>>> problem soon.
>>>>>
>>>>> Thanks,
>>>>> Swapna Soni.
>>>>>
>>>>>
>>>>> Amila Suriarachchi wrote:
>>>>>       
>>>>>           
>>>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>>>>>> wrote:
>>>>>>
>>>>>>         
>>>>>>             
>>>>>>> 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);
>>>>>>>           
>>>>>>>               
>>>>>> it is bit difficult to answer your question without looking all your
>>>>>>         
>>>>>>             
>>>>> code.
>>>>>       
>>>>>           
>>>>>> But try this.
>>>>>>
>>>>>>
>>>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>>>         
>>>>>>             
>>>>> here.
>>>>>       
>>>>>           
>>>>>> When you throw an AxisFault it is caught at the transport level and it
>>>>>> sends
>>>>>> the fault message by calling to fault flow.
>>>>>>
>>>>>> if you want to send a normal soap message do this,
>>>>>>
>>>>>> MessageContext outMsgContext =
>>>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>>>> AxisEngine.send(outMsgContext);
>>>>>> return InvocationResponse.ABORT
>>>>>>
>>>>>> here it is important to return InvocationResponse.ABORT to terminate
>>>>>>         
>>>>>>             
>>>>> the
>>>>>       
>>>>>           
>>>>>> inFlow.
>>>>>>
>>>>>> thanks,
>>>>>> Amila.
>>>>>>
>>>>>>         
>>>>>>             
>>>>>>>        }
>>>>>>>
>>>>>>>  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.
>>>>>>>
>>>>>>>
>>>>>>>           
>>>>>>>               
>>>>>> --
>>>>>> Amila Suriarachchi
>>>>>> WSO2 Inc.
>>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>>
>>>>>>
>>>>>>         
>>>>>>             
>>>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>>>> http://www.nabble.com/file/p23534995/client.java client.java
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>>       
>>>>>           
>>>> -- 
>>>> Amila Suriarachchi
>>>> WSO2 Inc.
>>>> blog: http://amilachinthaka.blogspot.com/
>>>>
>>>>
>>>>     
>>>>         
>>>   
>>>       
>> -- 
>> Thank you!
>>
>>
>> http://blogs.deepal.org
>> http://deepal.org
>>
>>
>>
>>     
>
>   


-- 
Thank you!


http://blogs.deepal.org
http://deepal.org


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Deepal,

  I am using two handlers now one for inflow and one for outflow. In Inflow
handler i am using "return InvocationResponse.ABORT" and in out flow handler
i am using "return InvocationResponse.CONTINUE". When i am runnning the
client i am getting error like

org.apache.axis2.AxisFault: validation failed error with complete stack
trace. And its printing again and again. this  is becuase we are engaging
sandesha and its not getting acknowledge thats why its sending teh request
again and again. How to stop this and send the fault response to client.
Please help me.

Thanks,
Swapna Soni.


Deepal Jayasinghe-2 wrote:
> 
> As I can see the problem is, in the faultflow you abort the execution,
> so you get such an error. try to use two handlers for in-flow and
> fault-flow
> 
> Deepal
>> Hi Amila,
>>
>>    I have written the below code in handler this time.
>>
>> 	public InvocationResponse invoke(MessageContext msgContext) throws
>> AxisFault {
>> 		if(msgContext.getFLOW()==1)
>>         	 {
>> 			throw new AxisFault("validation failed error");
>> 		  }
>>  	 return InvocationResponse.ABORT;
>> 	}
>> Now when i am running the client, i am getting the below exception
>> instead
>> of fault response message.
>>
>> org.apache.axis2.AxisFault: First Element must contain the local name,
>> Envelope , but found html
>> 	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
>> 	at
>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
>> 	at
>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>> 	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)
>> Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element
>> must
>> contain the local name, Envelope , but found html
>> 	at
>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
>> 	at
>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
>> 	at
>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java
>>
>> Thanks,
>> Swapna Soni.
>>
>>
>> Amila Suriarachchi wrote:
>>   
>>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
>>>
>>>     
>>>> Hi Amila,
>>>>
>>>>    I have set the written the below code in my custom module.
>>>>
>>>>         public InvocationResponse invoke(MessageContext msgContext)
>>>> throws
>>>> AxisFault {
>>>>                if(msgContext.getFLOW()==1)
>>>>                  {
>>>>                         MessageContext faultContext =
>>>>
>>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>>> AxisFault("validation failed error", new QName("validation error",
>>>> "wsa")));
>>>>                         AxisEngine.sendFault(faultContext);
>>>>
>>>>       
>>> here as I told you earlier try to throw the AxisFault()
>>>
>>> i.e throw new AxisFault("validation error");
>>>
>>> then the fault sending part is done at the transport level.
>>>
>>> thanks,
>>> Amila.
>>>
>>>     
>>>>                  }
>>>>          return InvocationResponse.ABORT;
>>>>        }
>>>>
>>>> But when running the client program i am getting error at client
>>>> console
>>>> like
>>>>
>>>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>>>> null.
>>>>        at
>>>>
>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>>        at
>>>>
>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>>         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)
>>>>
>>>> For outFaultFlow i am calling same handler and wrote the code like
>>>>
>>>>           if(msgContext.getFLOW()==4) {
>>>>                System.out.println("This is OutFaultFlow");
>>>>                System.out.println("
>>>> messagecontext=="+msgContext.getEnvelope());
>>>>           }
>>>> So its printing the fault soap resonse
>>>>
>>>> <?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>
>>>>
>>>> I want this response should be printed at client console. How can i do
>>>> this,
>>>> please help me. Its stopping our  productivity.
>>>>
>>>> I have uploaded the Handler class and client class. Could you please
>>>> have
>>>> a
>>>> webex session with us. So that we can show you our complete code and
>>>> how
>>>> the
>>>> program is behaving when we run the client. It will help us to resolve
>>>> the
>>>> problem soon.
>>>>
>>>> Thanks,
>>>> Swapna Soni.
>>>>
>>>>
>>>> Amila Suriarachchi wrote:
>>>>       
>>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>>>>> wrote:
>>>>>
>>>>>         
>>>>>> 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);
>>>>>>           
>>>>> it is bit difficult to answer your question without looking all your
>>>>>         
>>>> code.
>>>>       
>>>>> But try this.
>>>>>
>>>>>
>>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>>         
>>>> here.
>>>>       
>>>>> When you throw an AxisFault it is caught at the transport level and it
>>>>> sends
>>>>> the fault message by calling to fault flow.
>>>>>
>>>>> if you want to send a normal soap message do this,
>>>>>
>>>>> MessageContext outMsgContext =
>>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>>> AxisEngine.send(outMsgContext);
>>>>> return InvocationResponse.ABORT
>>>>>
>>>>> here it is important to return InvocationResponse.ABORT to terminate
>>>>>         
>>>> the
>>>>       
>>>>> inFlow.
>>>>>
>>>>> thanks,
>>>>> Amila.
>>>>>
>>>>>         
>>>>>>        }
>>>>>>
>>>>>>  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.
>>>>>>
>>>>>>
>>>>>>           
>>>>> --
>>>>> Amila Suriarachchi
>>>>> WSO2 Inc.
>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>
>>>>>
>>>>>         
>>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>>> http://www.nabble.com/file/p23534995/client.java client.java
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>>
>>>>
>>>>       
>>> -- 
>>> Amila Suriarachchi
>>> WSO2 Inc.
>>> blog: http://amilachinthaka.blogspot.com/
>>>
>>>
>>>     
>>
>>   
> 
> 
> -- 
> 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-tp23521710p23541351.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Deepal jayasinghe <de...@gmail.com>.
As I can see the problem is, in the faultflow you abort the execution,
so you get such an error. try to use two handlers for in-flow and fault-flow

Deepal
> Hi Amila,
>
>    I have written the below code in handler this time.
>
> 	public InvocationResponse invoke(MessageContext msgContext) throws
> AxisFault {
> 		if(msgContext.getFLOW()==1)
>         	 {
> 			throw new AxisFault("validation failed error");
> 		  }
>  	 return InvocationResponse.ABORT;
> 	}
> Now when i am running the client, i am getting the below exception instead
> of fault response message.
>
> org.apache.axis2.AxisFault: First Element must contain the local name,
> Envelope , but found html
> 	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
> 	at
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
> 	at
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
> 	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)
> Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must
> contain the local name, Envelope , but found html
> 	at
> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
> 	at
> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
> 	at
> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java
>
> Thanks,
> Swapna Soni.
>
>
> Amila Suriarachchi wrote:
>   
>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
>>
>>     
>>> Hi Amila,
>>>
>>>    I have set the written the below code in my custom module.
>>>
>>>         public InvocationResponse invoke(MessageContext msgContext)
>>> throws
>>> AxisFault {
>>>                if(msgContext.getFLOW()==1)
>>>                  {
>>>                         MessageContext faultContext =
>>>
>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>> AxisFault("validation failed error", new QName("validation error",
>>> "wsa")));
>>>                         AxisEngine.sendFault(faultContext);
>>>
>>>       
>> here as I told you earlier try to throw the AxisFault()
>>
>> i.e throw new AxisFault("validation error");
>>
>> then the fault sending part is done at the transport level.
>>
>> thanks,
>> Amila.
>>
>>     
>>>                  }
>>>          return InvocationResponse.ABORT;
>>>        }
>>>
>>> But when running the client program i am getting error at client console
>>> like
>>>
>>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>>> null.
>>>        at
>>>
>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>        at
>>>
>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>         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)
>>>
>>> For outFaultFlow i am calling same handler and wrote the code like
>>>
>>>           if(msgContext.getFLOW()==4) {
>>>                System.out.println("This is OutFaultFlow");
>>>                System.out.println("
>>> messagecontext=="+msgContext.getEnvelope());
>>>           }
>>> So its printing the fault soap resonse
>>>
>>> <?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>
>>>
>>> I want this response should be printed at client console. How can i do
>>> this,
>>> please help me. Its stopping our  productivity.
>>>
>>> I have uploaded the Handler class and client class. Could you please have
>>> a
>>> webex session with us. So that we can show you our complete code and how
>>> the
>>> program is behaving when we run the client. It will help us to resolve
>>> the
>>> problem soon.
>>>
>>> Thanks,
>>> Swapna Soni.
>>>
>>>
>>> Amila Suriarachchi wrote:
>>>       
>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:
>>>>
>>>>         
>>>>> 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);
>>>>>           
>>>> it is bit difficult to answer your question without looking all your
>>>>         
>>> code.
>>>       
>>>> But try this.
>>>>
>>>>
>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>         
>>> here.
>>>       
>>>> When you throw an AxisFault it is caught at the transport level and it
>>>> sends
>>>> the fault message by calling to fault flow.
>>>>
>>>> if you want to send a normal soap message do this,
>>>>
>>>> MessageContext outMsgContext =
>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>> AxisEngine.send(outMsgContext);
>>>> return InvocationResponse.ABORT
>>>>
>>>> here it is important to return InvocationResponse.ABORT to terminate
>>>>         
>>> the
>>>       
>>>> inFlow.
>>>>
>>>> thanks,
>>>> Amila.
>>>>
>>>>         
>>>>>        }
>>>>>
>>>>>  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.
>>>>>
>>>>>
>>>>>           
>>>> --
>>>> Amila Suriarachchi
>>>> WSO2 Inc.
>>>> blog: http://amilachinthaka.blogspot.com/
>>>>
>>>>
>>>>         
>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>> http://www.nabble.com/file/p23534995/client.java client.java
>>> --
>>> View this message in context:
>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>
>>>
>>>       
>> -- 
>> Amila Suriarachchi
>> WSO2 Inc.
>> blog: http://amilachinthaka.blogspot.com/
>>
>>
>>     
>
>   


-- 
Thank you!


http://blogs.deepal.org
http://deepal.org


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Amila,

   I have written the below code in handler this time.

	public InvocationResponse invoke(MessageContext msgContext) throws
AxisFault {
		if(msgContext.getFLOW()==1)
        	 {
			throw new AxisFault("validation failed error");
		  }
 	 return InvocationResponse.ABORT;
	}
Now when i am running the client, i am getting the below exception instead
of fault response message.

org.apache.axis2.AxisFault: First Element must contain the local name,
Envelope , but found html
	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
	at
org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
	at
org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
	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)
Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must
contain the local name, Envelope , but found html
	at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
	at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
	at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java

Thanks,
Swapna Soni.


Amila Suriarachchi wrote:
> 
> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
> 
>>
>> Hi Amila,
>>
>>    I have set the written the below code in my custom module.
>>
>>         public InvocationResponse invoke(MessageContext msgContext)
>> throws
>> AxisFault {
>>                if(msgContext.getFLOW()==1)
>>                  {
>>                         MessageContext faultContext =
>>
>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>> AxisFault("validation failed error", new QName("validation error",
>> "wsa")));
>>                         AxisEngine.sendFault(faultContext);
>>
> 
> here as I told you earlier try to throw the AxisFault()
> 
> i.e throw new AxisFault("validation error");
> 
> then the fault sending part is done at the transport level.
> 
> thanks,
> Amila.
> 
>>
>>                  }
>>          return InvocationResponse.ABORT;
>>        }
>>
>> But when running the client program i am getting error at client console
>> like
>>
>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>> null.
>>        at
>>
>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>        at
>>
>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>         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)
>>
>> For outFaultFlow i am calling same handler and wrote the code like
>>
>>           if(msgContext.getFLOW()==4) {
>>                System.out.println("This is OutFaultFlow");
>>                System.out.println("
>> messagecontext=="+msgContext.getEnvelope());
>>           }
>> So its printing the fault soap resonse
>>
>> <?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>
>>
>> I want this response should be printed at client console. How can i do
>> this,
>> please help me. Its stopping our  productivity.
>>
>> I have uploaded the Handler class and client class. Could you please have
>> a
>> webex session with us. So that we can show you our complete code and how
>> the
>> program is behaving when we run the client. It will help us to resolve
>> the
>> problem soon.
>>
>> Thanks,
>> Swapna Soni.
>>
>>
>> Amila Suriarachchi wrote:
>> >
>> > On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:
>> >
>> >>
>> >> 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);
>> >
>> >
>> > it is bit difficult to answer your question without looking all your
>> code.
>> > But try this.
>> >
>> >
>> > if you want to send a soap fault to client side, throw an AxisFault
>> here.
>> > When you throw an AxisFault it is caught at the transport level and it
>> > sends
>> > the fault message by calling to fault flow.
>> >
>> > if you want to send a normal soap message do this,
>> >
>> > MessageContext outMsgContext =
>> > MessageContextBuilder.createOutMessageContext(msgContext);
>> > AxisEngine.send(outMsgContext);
>> > return InvocationResponse.ABORT
>> >
>> > here it is important to return InvocationResponse.ABORT to terminate
>> the
>> > inFlow.
>> >
>> > thanks,
>> > Amila.
>> >
>> >>
>> >>
>> >>        }
>> >>
>> >>  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.
>> >>
>> >>
>> >
>> >
>> > --
>> > Amila Suriarachchi
>> > WSO2 Inc.
>> > blog: http://amilachinthaka.blogspot.com/
>> >
>> >
>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>> http://www.nabble.com/file/p23534995/client.java client.java
>> --
>> View this message in context:
>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Amila Suriarachchi
> WSO2 Inc.
> blog: http://amilachinthaka.blogspot.com/
> 
> 

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


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Amila,
  If we dont engage the Rampart and Sandesha at client side. Then the
functionality is working fine. Its terminating the inFlow and sending the
outFaultFlow response. If we engage sandesha the problem we are getting is,
sandesha is not getting acknowledge for the request thats why its sending
the request again and again. And if we are engaging rampart, its giving
unable to find token error. But engaging both the modules are mandatory for
us. So could you please help how to resolve these sandesha and rampart
related errors also.

Thanks,
Swapna Soni.


Amila Suriarachchi wrote:
> 
> On Thu, May 14, 2009 at 7:20 PM, Senthil Sona <sw...@cisco.com> wrote:
> 
>>
>> Hi Deepal,
>>
>>  I am having a if condition in my handler class. I have uploaded the
>> handler class and client class to this forum. Could you please look in to
>> those and let me me know if i am doing anything wrong? As i mentioned in
>> my
>> last reply i am getting "AxisFault error saying first element must
>> contain
>> localname Envelope but found html".
> 
> 
> Can you check your response with a tcpmon. Then you can see the actual
> problem. I think you send the message to wrong epr.
> 
> 
> I want client should get fault response.
>> Sandesha
> 
> 
> I think it is better to test step by step. first test with out sandesa if
> you get the correct error message without sandesha then you can sure about
> it. Then try with sandesha.
> 
> thanks,
> Amila.
> 
>> is also keep on sending the request because its not getting
>> acknowledgement.
>>   Could you please have a webex session with us if possible. So that we
>> can
>> explain you our problem very clearly. I have been trying this
>> functionality
>> from past 20 days. Its consuming lot of time. Please hlep me out.
>>   In axis2.xml file also i am calling custom module phase first and then
>> RMphase bothin INFlow and OutFaultFlow.
>>
>> Thanks,
>> Swapna Soni.
>>
>>
>>
>> Deepal Jayasinghe-2 wrote:
>> >
>> > Hi,
>> >
>> > I think what Amila suggested is correct too (and easy as well), just
>> > throw the exception from the handler then transport receiver will
>> handle
>> > the sending part. I think that is the easiest way.  If you are using
>> > same handler for both in-flow and in-fault flow then just have a "if"
>> > condition and handle the logic.
>> >
>> > Deepal
>> >> Hi Deepal/Amila,
>> >>
>> >>      Could you please reply me, how to resolve this exception. This
>> task
>> >> is
>> >> very urgent for me.
>> >>
>> >> Thanks,
>> >> Swapna Soni.
>> >>
>> >> Amila Suriarachchi wrote:
>> >>
>> >>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com>
>> wrote:
>> >>>
>> >>>
>> >>>> Hi Amila,
>> >>>>
>> >>>>    I have set the written the below code in my custom module.
>> >>>>
>> >>>>         public InvocationResponse invoke(MessageContext msgContext)
>> >>>> throws
>> >>>> AxisFault {
>> >>>>                if(msgContext.getFLOW()==1)
>> >>>>                  {
>> >>>>                         MessageContext faultContext =
>> >>>>
>> >>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>> >>>> AxisFault("validation failed error", new QName("validation error",
>> >>>> "wsa")));
>> >>>>                         AxisEngine.sendFault(faultContext);
>> >>>>
>> >>>>
>> >>> here as I told you earlier try to throw the AxisFault()
>> >>>
>> >>> i.e throw new AxisFault("validation error");
>> >>>
>> >>> then the fault sending part is done at the transport level.
>> >>>
>> >>> thanks,
>> >>> Amila.
>> >>>
>> >>>
>> >>>>                  }
>> >>>>          return InvocationResponse.ABORT;
>> >>>>        }
>> >>>>
>> >>>> But when running the client program i am getting error at client
>> >>>> console
>> >>>> like
>> >>>>
>> >>>> org.apache.axis2.AxisFault: The input stream for an incoming message
>> is
>> >>>> null.
>> >>>>        at
>> >>>>
>> >>>>
>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>> >>>>        at
>> >>>>
>> >>>>
>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>> >>>>         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)
>> >>>>
>> >>>> For outFaultFlow i am calling same handler and wrote the code like
>> >>>>
>> >>>>           if(msgContext.getFLOW()==4) {
>> >>>>                System.out.println("This is OutFaultFlow");
>> >>>>                System.out.println("
>> >>>> messagecontext=="+msgContext.getEnvelope());
>> >>>>           }
>> >>>> So its printing the fault soap resonse
>> >>>>
>> >>>> <?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>
>> >>>>
>> >>>> I want this response should be printed at client console. How can i
>> do
>> >>>> this,
>> >>>> please help me. Its stopping our  productivity.
>> >>>>
>> >>>> I have uploaded the Handler class and client class. Could you please
>> >>>> have
>> >>>> a
>> >>>> webex session with us. So that we can show you our complete code and
>> >>>> how
>> >>>> the
>> >>>> program is behaving when we run the client. It will help us to
>> resolve
>> >>>> the
>> >>>> problem soon.
>> >>>>
>> >>>> Thanks,
>> >>>> Swapna Soni.
>> >>>>
>> >>>>
>> >>>> Amila Suriarachchi wrote:
>> >>>>
>> >>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>> >>>>> wrote:
>> >>>>>
>> >>>>>
>> >>>>>> 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);
>> >>>>>>
>> >>>>> it is bit difficult to answer your question without looking all
>> your
>> >>>>>
>> >>>> code.
>> >>>>
>> >>>>> But try this.
>> >>>>>
>> >>>>>
>> >>>>> if you want to send a soap fault to client side, throw an AxisFault
>> >>>>>
>> >>>> here.
>> >>>>
>> >>>>> When you throw an AxisFault it is caught at the transport level and
>> it
>> >>>>> sends
>> >>>>> the fault message by calling to fault flow.
>> >>>>>
>> >>>>> if you want to send a normal soap message do this,
>> >>>>>
>> >>>>> MessageContext outMsgContext =
>> >>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>> >>>>> AxisEngine.send(outMsgContext);
>> >>>>> return InvocationResponse.ABORT
>> >>>>>
>> >>>>> here it is important to return InvocationResponse.ABORT to
>> terminate
>> >>>>>
>> >>>> the
>> >>>>
>> >>>>> inFlow.
>> >>>>>
>> >>>>> thanks,
>> >>>>> Amila.
>> >>>>>
>> >>>>>
>> >>>>>>        }
>> >>>>>>
>> >>>>>>  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.
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>> --
>> >>>>> Amila Suriarachchi
>> >>>>> WSO2 Inc.
>> >>>>> blog: http://amilachinthaka.blogspot.com/
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>> >>>> http://www.nabble.com/file/p23534995/client.java client.java
>> >>>> --
>> >>>> View this message in context:
>> >>>>
>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>> >>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>> >>>>
>> >>>>
>> >>>>
>> >>> --
>> >>> Amila Suriarachchi
>> >>> WSO2 Inc.
>> >>> blog: http://amilachinthaka.blogspot.com/
>> >>>
>> >>>
>> >>>
>> >>
>> >>
>> >
>> >
>> > --
>> > 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-tp23521710p23540933.html
>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Amila Suriarachchi
> WSO2 Inc.
> blog: http://amilachinthaka.blogspot.com/
> 
> 

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


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Amila/Deepal,

    Could you please have a webex session with us once. I request you.
Because if i am engaging the sandesha and rampart, the functionality is not
working properly. But its mandatory to engage botht eh modules. If we can
have a conf call once, we can explain you our problem very clearly.

Thanks,
Swapna Soni.

Amila Suriarachchi wrote:
> 
> On Thu, May 14, 2009 at 7:20 PM, Senthil Sona <sw...@cisco.com> wrote:
> 
>>
>> Hi Deepal,
>>
>>  I am having a if condition in my handler class. I have uploaded the
>> handler class and client class to this forum. Could you please look in to
>> those and let me me know if i am doing anything wrong? As i mentioned in
>> my
>> last reply i am getting "AxisFault error saying first element must
>> contain
>> localname Envelope but found html".
> 
> 
> Can you check your response with a tcpmon. Then you can see the actual
> problem. I think you send the message to wrong epr.
> 
> 
> I want client should get fault response.
>> Sandesha
> 
> 
> I think it is better to test step by step. first test with out sandesa if
> you get the correct error message without sandesha then you can sure about
> it. Then try with sandesha.
> 
> thanks,
> Amila.
> 
>> is also keep on sending the request because its not getting
>> acknowledgement.
>>   Could you please have a webex session with us if possible. So that we
>> can
>> explain you our problem very clearly. I have been trying this
>> functionality
>> from past 20 days. Its consuming lot of time. Please hlep me out.
>>   In axis2.xml file also i am calling custom module phase first and then
>> RMphase bothin INFlow and OutFaultFlow.
>>
>> Thanks,
>> Swapna Soni.
>>
>>
>>
>> Deepal Jayasinghe-2 wrote:
>> >
>> > Hi,
>> >
>> > I think what Amila suggested is correct too (and easy as well), just
>> > throw the exception from the handler then transport receiver will
>> handle
>> > the sending part. I think that is the easiest way.  If you are using
>> > same handler for both in-flow and in-fault flow then just have a "if"
>> > condition and handle the logic.
>> >
>> > Deepal
>> >> Hi Deepal/Amila,
>> >>
>> >>      Could you please reply me, how to resolve this exception. This
>> task
>> >> is
>> >> very urgent for me.
>> >>
>> >> Thanks,
>> >> Swapna Soni.
>> >>
>> >> Amila Suriarachchi wrote:
>> >>
>> >>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com>
>> wrote:
>> >>>
>> >>>
>> >>>> Hi Amila,
>> >>>>
>> >>>>    I have set the written the below code in my custom module.
>> >>>>
>> >>>>         public InvocationResponse invoke(MessageContext msgContext)
>> >>>> throws
>> >>>> AxisFault {
>> >>>>                if(msgContext.getFLOW()==1)
>> >>>>                  {
>> >>>>                         MessageContext faultContext =
>> >>>>
>> >>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>> >>>> AxisFault("validation failed error", new QName("validation error",
>> >>>> "wsa")));
>> >>>>                         AxisEngine.sendFault(faultContext);
>> >>>>
>> >>>>
>> >>> here as I told you earlier try to throw the AxisFault()
>> >>>
>> >>> i.e throw new AxisFault("validation error");
>> >>>
>> >>> then the fault sending part is done at the transport level.
>> >>>
>> >>> thanks,
>> >>> Amila.
>> >>>
>> >>>
>> >>>>                  }
>> >>>>          return InvocationResponse.ABORT;
>> >>>>        }
>> >>>>
>> >>>> But when running the client program i am getting error at client
>> >>>> console
>> >>>> like
>> >>>>
>> >>>> org.apache.axis2.AxisFault: The input stream for an incoming message
>> is
>> >>>> null.
>> >>>>        at
>> >>>>
>> >>>>
>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>> >>>>        at
>> >>>>
>> >>>>
>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>> >>>>         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)
>> >>>>
>> >>>> For outFaultFlow i am calling same handler and wrote the code like
>> >>>>
>> >>>>           if(msgContext.getFLOW()==4) {
>> >>>>                System.out.println("This is OutFaultFlow");
>> >>>>                System.out.println("
>> >>>> messagecontext=="+msgContext.getEnvelope());
>> >>>>           }
>> >>>> So its printing the fault soap resonse
>> >>>>
>> >>>> <?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>
>> >>>>
>> >>>> I want this response should be printed at client console. How can i
>> do
>> >>>> this,
>> >>>> please help me. Its stopping our  productivity.
>> >>>>
>> >>>> I have uploaded the Handler class and client class. Could you please
>> >>>> have
>> >>>> a
>> >>>> webex session with us. So that we can show you our complete code and
>> >>>> how
>> >>>> the
>> >>>> program is behaving when we run the client. It will help us to
>> resolve
>> >>>> the
>> >>>> problem soon.
>> >>>>
>> >>>> Thanks,
>> >>>> Swapna Soni.
>> >>>>
>> >>>>
>> >>>> Amila Suriarachchi wrote:
>> >>>>
>> >>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>> >>>>> wrote:
>> >>>>>
>> >>>>>
>> >>>>>> 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);
>> >>>>>>
>> >>>>> it is bit difficult to answer your question without looking all
>> your
>> >>>>>
>> >>>> code.
>> >>>>
>> >>>>> But try this.
>> >>>>>
>> >>>>>
>> >>>>> if you want to send a soap fault to client side, throw an AxisFault
>> >>>>>
>> >>>> here.
>> >>>>
>> >>>>> When you throw an AxisFault it is caught at the transport level and
>> it
>> >>>>> sends
>> >>>>> the fault message by calling to fault flow.
>> >>>>>
>> >>>>> if you want to send a normal soap message do this,
>> >>>>>
>> >>>>> MessageContext outMsgContext =
>> >>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>> >>>>> AxisEngine.send(outMsgContext);
>> >>>>> return InvocationResponse.ABORT
>> >>>>>
>> >>>>> here it is important to return InvocationResponse.ABORT to
>> terminate
>> >>>>>
>> >>>> the
>> >>>>
>> >>>>> inFlow.
>> >>>>>
>> >>>>> thanks,
>> >>>>> Amila.
>> >>>>>
>> >>>>>
>> >>>>>>        }
>> >>>>>>
>> >>>>>>  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.
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>> --
>> >>>>> Amila Suriarachchi
>> >>>>> WSO2 Inc.
>> >>>>> blog: http://amilachinthaka.blogspot.com/
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>> >>>> http://www.nabble.com/file/p23534995/client.java client.java
>> >>>> --
>> >>>> View this message in context:
>> >>>>
>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>> >>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>> >>>>
>> >>>>
>> >>>>
>> >>> --
>> >>> Amila Suriarachchi
>> >>> WSO2 Inc.
>> >>> blog: http://amilachinthaka.blogspot.com/
>> >>>
>> >>>
>> >>>
>> >>
>> >>
>> >
>> >
>> > --
>> > 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-tp23521710p23540933.html
>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Amila Suriarachchi
> WSO2 Inc.
> blog: http://amilachinthaka.blogspot.com/
> 
> 

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


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Amila Suriarachchi <am...@gmail.com>.
On Thu, May 14, 2009 at 7:20 PM, Senthil Sona <sw...@cisco.com> wrote:

>
> Hi Deepal,
>
>  I am having a if condition in my handler class. I have uploaded the
> handler class and client class to this forum. Could you please look in to
> those and let me me know if i am doing anything wrong? As i mentioned in my
> last reply i am getting "AxisFault error saying first element must contain
> localname Envelope but found html".


Can you check your response with a tcpmon. Then you can see the actual
problem. I think you send the message to wrong epr.


I want client should get fault response.
> Sandesha


I think it is better to test step by step. first test with out sandesa if
you get the correct error message without sandesha then you can sure about
it. Then try with sandesha.

thanks,
Amila.

> is also keep on sending the request because its not getting
> acknowledgement.
>   Could you please have a webex session with us if possible. So that we can
> explain you our problem very clearly. I have been trying this functionality
> from past 20 days. Its consuming lot of time. Please hlep me out.
>   In axis2.xml file also i am calling custom module phase first and then
> RMphase bothin INFlow and OutFaultFlow.
>
> Thanks,
> Swapna Soni.
>
>
>
> Deepal Jayasinghe-2 wrote:
> >
> > Hi,
> >
> > I think what Amila suggested is correct too (and easy as well), just
> > throw the exception from the handler then transport receiver will handle
> > the sending part. I think that is the easiest way.  If you are using
> > same handler for both in-flow and in-fault flow then just have a "if"
> > condition and handle the logic.
> >
> > Deepal
> >> Hi Deepal/Amila,
> >>
> >>      Could you please reply me, how to resolve this exception. This task
> >> is
> >> very urgent for me.
> >>
> >> Thanks,
> >> Swapna Soni.
> >>
> >> Amila Suriarachchi wrote:
> >>
> >>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com>
> wrote:
> >>>
> >>>
> >>>> Hi Amila,
> >>>>
> >>>>    I have set the written the below code in my custom module.
> >>>>
> >>>>         public InvocationResponse invoke(MessageContext msgContext)
> >>>> throws
> >>>> AxisFault {
> >>>>                if(msgContext.getFLOW()==1)
> >>>>                  {
> >>>>                         MessageContext faultContext =
> >>>>
> >>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
> >>>> AxisFault("validation failed error", new QName("validation error",
> >>>> "wsa")));
> >>>>                         AxisEngine.sendFault(faultContext);
> >>>>
> >>>>
> >>> here as I told you earlier try to throw the AxisFault()
> >>>
> >>> i.e throw new AxisFault("validation error");
> >>>
> >>> then the fault sending part is done at the transport level.
> >>>
> >>> thanks,
> >>> Amila.
> >>>
> >>>
> >>>>                  }
> >>>>          return InvocationResponse.ABORT;
> >>>>        }
> >>>>
> >>>> But when running the client program i am getting error at client
> >>>> console
> >>>> like
> >>>>
> >>>> org.apache.axis2.AxisFault: The input stream for an incoming message
> is
> >>>> null.
> >>>>        at
> >>>>
> >>>>
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
> >>>>        at
> >>>>
> >>>>
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
> >>>>         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)
> >>>>
> >>>> For outFaultFlow i am calling same handler and wrote the code like
> >>>>
> >>>>           if(msgContext.getFLOW()==4) {
> >>>>                System.out.println("This is OutFaultFlow");
> >>>>                System.out.println("
> >>>> messagecontext=="+msgContext.getEnvelope());
> >>>>           }
> >>>> So its printing the fault soap resonse
> >>>>
> >>>> <?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>
> >>>>
> >>>> I want this response should be printed at client console. How can i do
> >>>> this,
> >>>> please help me. Its stopping our  productivity.
> >>>>
> >>>> I have uploaded the Handler class and client class. Could you please
> >>>> have
> >>>> a
> >>>> webex session with us. So that we can show you our complete code and
> >>>> how
> >>>> the
> >>>> program is behaving when we run the client. It will help us to resolve
> >>>> the
> >>>> problem soon.
> >>>>
> >>>> Thanks,
> >>>> Swapna Soni.
> >>>>
> >>>>
> >>>> Amila Suriarachchi wrote:
> >>>>
> >>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
> >>>>> wrote:
> >>>>>
> >>>>>
> >>>>>> 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);
> >>>>>>
> >>>>> it is bit difficult to answer your question without looking all your
> >>>>>
> >>>> code.
> >>>>
> >>>>> But try this.
> >>>>>
> >>>>>
> >>>>> if you want to send a soap fault to client side, throw an AxisFault
> >>>>>
> >>>> here.
> >>>>
> >>>>> When you throw an AxisFault it is caught at the transport level and
> it
> >>>>> sends
> >>>>> the fault message by calling to fault flow.
> >>>>>
> >>>>> if you want to send a normal soap message do this,
> >>>>>
> >>>>> MessageContext outMsgContext =
> >>>>> MessageContextBuilder.createOutMessageContext(msgContext);
> >>>>> AxisEngine.send(outMsgContext);
> >>>>> return InvocationResponse.ABORT
> >>>>>
> >>>>> here it is important to return InvocationResponse.ABORT to terminate
> >>>>>
> >>>> the
> >>>>
> >>>>> inFlow.
> >>>>>
> >>>>> thanks,
> >>>>> Amila.
> >>>>>
> >>>>>
> >>>>>>        }
> >>>>>>
> >>>>>>  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.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>> --
> >>>>> Amila Suriarachchi
> >>>>> WSO2 Inc.
> >>>>> blog: http://amilachinthaka.blogspot.com/
> >>>>>
> >>>>>
> >>>>>
> >>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
> >>>> http://www.nabble.com/file/p23534995/client.java client.java
> >>>> --
> >>>> View this message in context:
> >>>>
> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
> >>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
> >>>>
> >>>>
> >>>>
> >>> --
> >>> Amila Suriarachchi
> >>> WSO2 Inc.
> >>> blog: http://amilachinthaka.blogspot.com/
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
> > --
> > 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-tp23521710p23540933.html
> Sent from the Axis - Dev mailing list archive at Nabble.com.
>
>


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Deepal,

  I am having a if condition in my handler class. I have uploaded the
handler class and client class to this forum. Could you please look in to
those and let me me know if i am doing anything wrong? As i mentioned in my
last reply i am getting "AxisFault error saying first element must contain
localname Envelope but found html". I want client should get fault response.
Sandesha is also keep on sending the request because its not getting
acknowledgement.
   Could you please have a webex session with us if possible. So that we can
explain you our problem very clearly. I have been trying this functionality
from past 20 days. Its consuming lot of time. Please hlep me out.
   In axis2.xml file also i am calling custom module phase first and then
RMphase bothin INFlow and OutFaultFlow.

Thanks,
Swapna Soni.



Deepal Jayasinghe-2 wrote:
> 
> Hi,
> 
> I think what Amila suggested is correct too (and easy as well), just
> throw the exception from the handler then transport receiver will handle
> the sending part. I think that is the easiest way.  If you are using
> same handler for both in-flow and in-fault flow then just have a "if"
> condition and handle the logic.
> 
> Deepal
>> Hi Deepal/Amila,
>>
>>      Could you please reply me, how to resolve this exception. This task
>> is
>> very urgent for me.
>>
>> Thanks,
>> Swapna Soni.
>>
>> Amila Suriarachchi wrote:
>>   
>>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
>>>
>>>     
>>>> Hi Amila,
>>>>
>>>>    I have set the written the below code in my custom module.
>>>>
>>>>         public InvocationResponse invoke(MessageContext msgContext)
>>>> throws
>>>> AxisFault {
>>>>                if(msgContext.getFLOW()==1)
>>>>                  {
>>>>                         MessageContext faultContext =
>>>>
>>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>>> AxisFault("validation failed error", new QName("validation error",
>>>> "wsa")));
>>>>                         AxisEngine.sendFault(faultContext);
>>>>
>>>>       
>>> here as I told you earlier try to throw the AxisFault()
>>>
>>> i.e throw new AxisFault("validation error");
>>>
>>> then the fault sending part is done at the transport level.
>>>
>>> thanks,
>>> Amila.
>>>
>>>     
>>>>                  }
>>>>          return InvocationResponse.ABORT;
>>>>        }
>>>>
>>>> But when running the client program i am getting error at client
>>>> console
>>>> like
>>>>
>>>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>>>> null.
>>>>        at
>>>>
>>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>>        at
>>>>
>>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>>         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)
>>>>
>>>> For outFaultFlow i am calling same handler and wrote the code like
>>>>
>>>>           if(msgContext.getFLOW()==4) {
>>>>                System.out.println("This is OutFaultFlow");
>>>>                System.out.println("
>>>> messagecontext=="+msgContext.getEnvelope());
>>>>           }
>>>> So its printing the fault soap resonse
>>>>
>>>> <?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>
>>>>
>>>> I want this response should be printed at client console. How can i do
>>>> this,
>>>> please help me. Its stopping our  productivity.
>>>>
>>>> I have uploaded the Handler class and client class. Could you please
>>>> have
>>>> a
>>>> webex session with us. So that we can show you our complete code and
>>>> how
>>>> the
>>>> program is behaving when we run the client. It will help us to resolve
>>>> the
>>>> problem soon.
>>>>
>>>> Thanks,
>>>> Swapna Soni.
>>>>
>>>>
>>>> Amila Suriarachchi wrote:
>>>>       
>>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com>
>>>>> wrote:
>>>>>
>>>>>         
>>>>>> 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);
>>>>>>           
>>>>> it is bit difficult to answer your question without looking all your
>>>>>         
>>>> code.
>>>>       
>>>>> But try this.
>>>>>
>>>>>
>>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>>         
>>>> here.
>>>>       
>>>>> When you throw an AxisFault it is caught at the transport level and it
>>>>> sends
>>>>> the fault message by calling to fault flow.
>>>>>
>>>>> if you want to send a normal soap message do this,
>>>>>
>>>>> MessageContext outMsgContext =
>>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>>> AxisEngine.send(outMsgContext);
>>>>> return InvocationResponse.ABORT
>>>>>
>>>>> here it is important to return InvocationResponse.ABORT to terminate
>>>>>         
>>>> the
>>>>       
>>>>> inFlow.
>>>>>
>>>>> thanks,
>>>>> Amila.
>>>>>
>>>>>         
>>>>>>        }
>>>>>>
>>>>>>  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.
>>>>>>
>>>>>>
>>>>>>           
>>>>> --
>>>>> Amila Suriarachchi
>>>>> WSO2 Inc.
>>>>> blog: http://amilachinthaka.blogspot.com/
>>>>>
>>>>>
>>>>>         
>>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>>> http://www.nabble.com/file/p23534995/client.java client.java
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>>
>>>>
>>>>       
>>> -- 
>>> Amila Suriarachchi
>>> WSO2 Inc.
>>> blog: http://amilachinthaka.blogspot.com/
>>>
>>>
>>>     
>>
>>   
> 
> 
> -- 
> 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-tp23521710p23540933.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Deepal jayasinghe <de...@gmail.com>.
Hi,

I think what Amila suggested is correct too (and easy as well), just
throw the exception from the handler then transport receiver will handle
the sending part. I think that is the easiest way.  If you are using
same handler for both in-flow and in-fault flow then just have a "if"
condition and handle the logic.

Deepal
> Hi Deepal/Amila,
>
>      Could you please reply me, how to resolve this exception. This task is
> very urgent for me.
>
> Thanks,
> Swapna Soni.
>
> Amila Suriarachchi wrote:
>   
>> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
>>
>>     
>>> Hi Amila,
>>>
>>>    I have set the written the below code in my custom module.
>>>
>>>         public InvocationResponse invoke(MessageContext msgContext)
>>> throws
>>> AxisFault {
>>>                if(msgContext.getFLOW()==1)
>>>                  {
>>>                         MessageContext faultContext =
>>>
>>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>>> AxisFault("validation failed error", new QName("validation error",
>>> "wsa")));
>>>                         AxisEngine.sendFault(faultContext);
>>>
>>>       
>> here as I told you earlier try to throw the AxisFault()
>>
>> i.e throw new AxisFault("validation error");
>>
>> then the fault sending part is done at the transport level.
>>
>> thanks,
>> Amila.
>>
>>     
>>>                  }
>>>          return InvocationResponse.ABORT;
>>>        }
>>>
>>> But when running the client program i am getting error at client console
>>> like
>>>
>>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>>> null.
>>>        at
>>>
>>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>>        at
>>>
>>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>>         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)
>>>
>>> For outFaultFlow i am calling same handler and wrote the code like
>>>
>>>           if(msgContext.getFLOW()==4) {
>>>                System.out.println("This is OutFaultFlow");
>>>                System.out.println("
>>> messagecontext=="+msgContext.getEnvelope());
>>>           }
>>> So its printing the fault soap resonse
>>>
>>> <?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>
>>>
>>> I want this response should be printed at client console. How can i do
>>> this,
>>> please help me. Its stopping our  productivity.
>>>
>>> I have uploaded the Handler class and client class. Could you please have
>>> a
>>> webex session with us. So that we can show you our complete code and how
>>> the
>>> program is behaving when we run the client. It will help us to resolve
>>> the
>>> problem soon.
>>>
>>> Thanks,
>>> Swapna Soni.
>>>
>>>
>>> Amila Suriarachchi wrote:
>>>       
>>>> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:
>>>>
>>>>         
>>>>> 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);
>>>>>           
>>>> it is bit difficult to answer your question without looking all your
>>>>         
>>> code.
>>>       
>>>> But try this.
>>>>
>>>>
>>>> if you want to send a soap fault to client side, throw an AxisFault
>>>>         
>>> here.
>>>       
>>>> When you throw an AxisFault it is caught at the transport level and it
>>>> sends
>>>> the fault message by calling to fault flow.
>>>>
>>>> if you want to send a normal soap message do this,
>>>>
>>>> MessageContext outMsgContext =
>>>> MessageContextBuilder.createOutMessageContext(msgContext);
>>>> AxisEngine.send(outMsgContext);
>>>> return InvocationResponse.ABORT
>>>>
>>>> here it is important to return InvocationResponse.ABORT to terminate
>>>>         
>>> the
>>>       
>>>> inFlow.
>>>>
>>>> thanks,
>>>> Amila.
>>>>
>>>>         
>>>>>        }
>>>>>
>>>>>  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.
>>>>>
>>>>>
>>>>>           
>>>> --
>>>> Amila Suriarachchi
>>>> WSO2 Inc.
>>>> blog: http://amilachinthaka.blogspot.com/
>>>>
>>>>
>>>>         
>>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>>> http://www.nabble.com/file/p23534995/client.java client.java
>>> --
>>> View this message in context:
>>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>>
>>>
>>>       
>> -- 
>> Amila Suriarachchi
>> WSO2 Inc.
>> blog: http://amilachinthaka.blogspot.com/
>>
>>
>>     
>
>   


-- 
Thank you!


http://blogs.deepal.org
http://deepal.org


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Deepal/Amila,

     Could you please reply me, how to resolve this exception. This task is
very urgent for me.

Thanks,
Swapna Soni.

Amila Suriarachchi wrote:
> 
> On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:
> 
>>
>> Hi Amila,
>>
>>    I have set the written the below code in my custom module.
>>
>>         public InvocationResponse invoke(MessageContext msgContext)
>> throws
>> AxisFault {
>>                if(msgContext.getFLOW()==1)
>>                  {
>>                         MessageContext faultContext =
>>
>> MessageContextBuilder.createFaultMessageContext(msgContext, new
>> AxisFault("validation failed error", new QName("validation error",
>> "wsa")));
>>                         AxisEngine.sendFault(faultContext);
>>
> 
> here as I told you earlier try to throw the AxisFault()
> 
> i.e throw new AxisFault("validation error");
> 
> then the fault sending part is done at the transport level.
> 
> thanks,
> Amila.
> 
>>
>>                  }
>>          return InvocationResponse.ABORT;
>>        }
>>
>> But when running the client program i am getting error at client console
>> like
>>
>> org.apache.axis2.AxisFault: The input stream for an incoming message is
>> null.
>>        at
>>
>> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>>        at
>>
>> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>>         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)
>>
>> For outFaultFlow i am calling same handler and wrote the code like
>>
>>           if(msgContext.getFLOW()==4) {
>>                System.out.println("This is OutFaultFlow");
>>                System.out.println("
>> messagecontext=="+msgContext.getEnvelope());
>>           }
>> So its printing the fault soap resonse
>>
>> <?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>
>>
>> I want this response should be printed at client console. How can i do
>> this,
>> please help me. Its stopping our  productivity.
>>
>> I have uploaded the Handler class and client class. Could you please have
>> a
>> webex session with us. So that we can show you our complete code and how
>> the
>> program is behaving when we run the client. It will help us to resolve
>> the
>> problem soon.
>>
>> Thanks,
>> Swapna Soni.
>>
>>
>> Amila Suriarachchi wrote:
>> >
>> > On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:
>> >
>> >>
>> >> 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);
>> >
>> >
>> > it is bit difficult to answer your question without looking all your
>> code.
>> > But try this.
>> >
>> >
>> > if you want to send a soap fault to client side, throw an AxisFault
>> here.
>> > When you throw an AxisFault it is caught at the transport level and it
>> > sends
>> > the fault message by calling to fault flow.
>> >
>> > if you want to send a normal soap message do this,
>> >
>> > MessageContext outMsgContext =
>> > MessageContextBuilder.createOutMessageContext(msgContext);
>> > AxisEngine.send(outMsgContext);
>> > return InvocationResponse.ABORT
>> >
>> > here it is important to return InvocationResponse.ABORT to terminate
>> the
>> > inFlow.
>> >
>> > thanks,
>> > Amila.
>> >
>> >>
>> >>
>> >>        }
>> >>
>> >>  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.
>> >>
>> >>
>> >
>> >
>> > --
>> > Amila Suriarachchi
>> > WSO2 Inc.
>> > blog: http://amilachinthaka.blogspot.com/
>> >
>> >
>> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
>> http://www.nabble.com/file/p23534995/client.java client.java
>> --
>> View this message in context:
>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
>> Sent from the Axis - Dev mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Amila Suriarachchi
> WSO2 Inc.
> blog: http://amilachinthaka.blogspot.com/
> 
> 

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


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Amila Suriarachchi <am...@gmail.com>.
On Thu, May 14, 2009 at 11:47 AM, Senthil Sona <sw...@cisco.com> wrote:

>
> Hi Amila,
>
>    I have set the written the below code in my custom module.
>
>         public InvocationResponse invoke(MessageContext msgContext) throws
> AxisFault {
>                if(msgContext.getFLOW()==1)
>                  {
>                         MessageContext faultContext =
>
> MessageContextBuilder.createFaultMessageContext(msgContext, new
> AxisFault("validation failed error", new QName("validation error",
> "wsa")));
>                         AxisEngine.sendFault(faultContext);
>

here as I told you earlier try to throw the AxisFault()

i.e throw new AxisFault("validation error");

then the fault sending part is done at the transport level.

thanks,
Amila.

>
>                  }
>          return InvocationResponse.ABORT;
>        }
>
> But when running the client program i am getting error at client console
> like
>
> org.apache.axis2.AxisFault: The input stream for an incoming message is
> null.
>        at
>
> org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
>        at
>
> org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
>         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)
>
> For outFaultFlow i am calling same handler and wrote the code like
>
>           if(msgContext.getFLOW()==4) {
>                System.out.println("This is OutFaultFlow");
>                System.out.println("
> messagecontext=="+msgContext.getEnvelope());
>           }
> So its printing the fault soap resonse
>
> <?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>
>
> I want this response should be printed at client console. How can i do
> this,
> please help me. Its stopping our  productivity.
>
> I have uploaded the Handler class and client class. Could you please have a
> webex session with us. So that we can show you our complete code and how
> the
> program is behaving when we run the client. It will help us to resolve the
> problem soon.
>
> Thanks,
> Swapna Soni.
>
>
> Amila Suriarachchi wrote:
> >
> > On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:
> >
> >>
> >> 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);
> >
> >
> > it is bit difficult to answer your question without looking all your
> code.
> > But try this.
> >
> >
> > if you want to send a soap fault to client side, throw an AxisFault here.
> > When you throw an AxisFault it is caught at the transport level and it
> > sends
> > the fault message by calling to fault flow.
> >
> > if you want to send a normal soap message do this,
> >
> > MessageContext outMsgContext =
> > MessageContextBuilder.createOutMessageContext(msgContext);
> > AxisEngine.send(outMsgContext);
> > return InvocationResponse.ABORT
> >
> > here it is important to return InvocationResponse.ABORT to terminate the
> > inFlow.
> >
> > thanks,
> > Amila.
> >
> >>
> >>
> >>        }
> >>
> >>  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.
> >>
> >>
> >
> >
> > --
> > Amila Suriarachchi
> > WSO2 Inc.
> > blog: http://amilachinthaka.blogspot.com/
> >
> >
> http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java
> http://www.nabble.com/file/p23534995/client.java client.java
> --
> View this message in context:
> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
> Sent from the Axis - Dev mailing list archive at Nabble.com.
>
>


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
Hi Amila,

    I have set the written the below code in my custom module.
		
	 public InvocationResponse invoke(MessageContext msgContext) throws
AxisFault {
		if(msgContext.getFLOW()==1)
        	 {
			 MessageContext faultContext =                                 
        		 MessageContextBuilder.createFaultMessageContext(msgContext, new 			 			
AxisFault("validation failed error", new QName("validation error", "wsa"))); 
        		 AxisEngine.sendFault(faultContext);  
		  }
 	 return InvocationResponse.ABORT;
	}

But when running the client program i am getting error at client console
like

org.apache.axis2.AxisFault: The input stream for an incoming message is
null.
	at
org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:72)
	at
org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
	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)

For outFaultFlow i am calling same handler and wrote the code like

	   if(msgContext.getFLOW()==4) {
        	System.out.println("This is OutFaultFlow");
        	System.out.println(" messagecontext=="+msgContext.getEnvelope());
           }
So its printing the fault soap resonse

<?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>

I want this response should be printed at client console. How can i do this,
please help me. Its stopping our  productivity.

I have uploaded the Handler class and client class. Could you please have a
webex session with us. So that we can show you our complete code and how the
program is behaving when we run the client. It will help us to resolve the
problem soon.

Thanks,
Swapna Soni.


Amila Suriarachchi wrote:
> 
> On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:
> 
>>
>> 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);
> 
> 
> it is bit difficult to answer your question without looking all your code.
> But try this.
> 
> 
> if you want to send a soap fault to client side, throw an AxisFault here.
> When you throw an AxisFault it is caught at the transport level and it
> sends
> the fault message by calling to fault flow.
> 
> if you want to send a normal soap message do this,
> 
> MessageContext outMsgContext =
> MessageContextBuilder.createOutMessageContext(msgContext);
> AxisEngine.send(outMsgContext);
> return InvocationResponse.ABORT
> 
> here it is important to return InvocationResponse.ABORT to terminate the
> inFlow.
> 
> thanks,
> Amila.
> 
>>
>>
>>        }
>>
>>  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.
>>
>>
> 
> 
> -- 
> Amila Suriarachchi
> WSO2 Inc.
> blog: http://amilachinthaka.blogspot.com/
> 
> 
http://www.nabble.com/file/p23534995/LogHandler.java LogHandler.java 
http://www.nabble.com/file/p23534995/client.java client.java 
-- 
View this message in context: http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23534995.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Amila Suriarachchi <am...@gmail.com>.
On Wed, May 13, 2009 at 8:48 PM, Senthil Sona <sw...@cisco.com> wrote:

>
> 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);


it is bit difficult to answer your question without looking all your code.
But try this.


if you want to send a soap fault to client side, throw an AxisFault here.
When you throw an AxisFault it is caught at the transport level and it sends
the fault message by calling to fault flow.

if you want to send a normal soap message do this,

MessageContext outMsgContext =
MessageContextBuilder.createOutMessageContext(msgContext);
AxisEngine.send(outMsgContext);
return InvocationResponse.ABORT

here it is important to return InvocationResponse.ABORT to terminate the
inFlow.

thanks,
Amila.

>
>
>        }
>
>  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.
>
>


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
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.


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Deepal jayasinghe <de...@gmail.com>.
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


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Senthil Sona <sw...@cisco.com>.
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
> 
> 
> 

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


Re: How to terminate InFlow and start OutFlow in the custom handler of axis2

Posted by Deepal jayasinghe <de...@gmail.com>.
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