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/