axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Senthil Sona <sws...@cisco.com>
Subject Re: How to terminate InFlow and start OutFlow in the custom handler of axis2
Date Thu, 14 May 2009 15:16:18 GMT

Hi Amila,
  If we dont engage the Rampart and Sandesha at client side. Then the
functionality is working fine. Its terminating the inFlow and sending the
outFaultFlow response. If we engage sandesha the problem we are getting is,
sandesha is not getting acknowledge for the request thats why its sending
the request again and again. And if we are engaging rampart, its giving
unable to find token error. But engaging both the modules are mandatory for
us. So could you please help how to resolve these sandesha and rampart
related errors also.

Thanks,
Swapna Soni.


Amila Suriarachchi wrote:
> 
> On Thu, May 14, 2009 at 7:20 PM, Senthil Sona <swsoni@cisco.com> wrote:
> 
>>
>> Hi Deepal,
>>
>>  I am having a if condition in my handler class. I have uploaded the
>> handler class and client class to this forum. Could you please look in to
>> those and let me me know if i am doing anything wrong? As i mentioned in
>> my
>> last reply i am getting "AxisFault error saying first element must
>> contain
>> localname Envelope but found html".
> 
> 
> Can you check your response with a tcpmon. Then you can see the actual
> problem. I think you send the message to wrong epr.
> 
> 
> I want client should get fault response.
>> Sandesha
> 
> 
> I think it is better to test step by step. first test with out sandesa if
> you get the correct error message without sandesha then you can sure about
> it. Then try with sandesha.
> 
> thanks,
> Amila.
> 
>> is also keep on sending the request because its not getting
>> acknowledgement.
>>   Could you please have a webex session with us if possible. So that we
>> can
>> explain you our problem very clearly. I have been trying this
>> functionality
>> from past 20 days. Its consuming lot of time. Please hlep me out.
>>   In axis2.xml file also i am calling custom module phase first and then
>> RMphase bothin INFlow and OutFaultFlow.
>>
>> Thanks,
>> Swapna Soni.
>>
>>
>>
>> Deepal Jayasinghe-2 wrote:
>> >
>> > Hi,
>> >
>> > I think what Amila suggested is correct too (and easy as well), just
>> > throw the exception from the handler then transport receiver will
>> handle
>> > the sending part. I think that is the easiest way.  If you are using
>> > same handler for both in-flow and in-fault flow then just have a "if"
>> > condition and handle the logic.
>> >
>> > Deepal
>> >> 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 <swsoni@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 <swsoni@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
>> >
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/How-to-terminate-InFlow-and-start-OutFlow-in-the-custom-handler-of-axis2-tp23521710p23540933.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-tp23521710p23542714.html
Sent from the Axis - Dev mailing list archive at Nabble.com.


Mime
View raw message