java.lang.IllegalStateException: Response already committed (during
SequenceAcknowledgement)
---------------------------------------------------------------------------------------------
Key: SANDESHA2-147
URL: https://issues.apache.org/jira/browse/SANDESHA2-147
Project: Sandesha2
Issue Type: Bug
Affects Versions: 1.3
Environment: Fedora Core 7
Reporter: Enric Jaen
When Sandesha2 receives an RM request with an AckRequested header block, the
AckRequestedProcessor.processAckRequestedHeader invokes the AxisEngine.send()
and then tries to set setResponseWritten(true), but here comes the problem, as
it doesn't find the RequestResponseTransport, so it cannot put
setResponseWritten to true.
As a consequence, later on the SequenceProcessor wrongly thinks that the
AckResp has not been sent and sends it again the AckResp doing sendAckNow() ,
throwing an:
org.apache.axis2.AxisFault: Sandesha2 got an exception when processing an in
message: java.lang.IllegalStateException: Response already committed.
I think that the problem is that normally the "In" MessageContext inside
RequestResponseTransport is set after the Dispatch phase (specificaly in
checkPostConditions), but the AckRequestedProcessor handler is executed
*before* finishing the Dispatch phase, so the "in" MessageContext has not been
set yet.
I solved this issue by changing the following line of code in
AckRequestedProcessor.processAckRequestedHeader():
TransportUtils.setResponseWritten(ackMsgCtx, true);
to:
TransportUtils.setResponseWritten(rmMsgCtx.getMessageContext(), true);
and it works. Notice that I changed ackMsgCtx (which is an OutOnly message) to
rmMsgCtx (which is an InOut message)
Cheers,
/Enric
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]