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/

Reply via email to