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