axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Senthil Sona <sws...@cisco.com>
Subject Re: How to terminate InFlow and start OutFlow in the custom handler of axis2
Date Thu, 14 May 2009 13:50:39 GMT

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 <swsoni@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 <swsoni@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.


Mime
View raw message