> > 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 <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 >> >> >> >> > > -- Thank you! http://blogs.deepal.org http://deepal.org