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/ > > -- View this message in context: http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23539036.html Sent from the Axis - Dev mailing list archive at Nabble.com.