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 <[email protected]> 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 <[email protected]> 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