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