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 06:17:52 GMT

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


Mime
View raw message