in modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java [491:549]
public static void addAckMessage(RMMsgContext applicationMsg, String sequenceId, RMDBean rmdBean, boolean addToEnvelope,
boolean isPiggybacked)
throws SandeshaException {
if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
log.debug("Entry: RMMsgCreator::addAckMessage " + sequenceId);
String rmVersion = rmdBean.getRMVersion();
String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(rmVersion);
ArrayList<Range> ackRangeArrayList = SandeshaUtil.getAckRangeArrayList(rmdBean.getServerCompletedMessages(), rmNamespaceValue);
if(ackRangeArrayList!=null && ackRangeArrayList.size()!=0){
if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
log.debug("RMMsgCreator::addAckMessage : there are messages to ack " + ackRangeArrayList);
//there are actually messages to ack
SequenceAcknowledgement sequenceAck = new SequenceAcknowledgement(rmNamespaceValue, isPiggybacked);
Identifier id = new Identifier(rmNamespaceValue);
id.setIndentifer(sequenceId);
sequenceAck.setIdentifier(id);
sequenceAck.setAckRanges(ackRangeArrayList);
if (rmdBean.isClosed()) {
// sequence is closed. so add the 'Final' part.
if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
log.debug("RMMsgCreator::addAckMessage : sequence closed");
if (SpecSpecificConstants.isAckFinalAllowed(rmVersion)) {
sequenceAck.setAckFinal(true);
}
}
applicationMsg.addSequenceAcknowledgement(sequenceAck);
if (applicationMsg.getWSAAction()==null) {
applicationMsg.setAction(SpecSpecificConstants.getSequenceAcknowledgementAction(rmVersion));
applicationMsg.setSOAPAction(SpecSpecificConstants.getSequenceAcknowledgementSOAPAction(rmVersion));
}
if(applicationMsg.getMessageId() == null) {
applicationMsg.setMessageId(SandeshaUtil.getUUID());
}
if(addToEnvelope){
// Write the ack into the soap envelope
try {
applicationMsg.addSOAPEnvelope();
} catch(AxisFault e) {
if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Caught AxisFault", e);
throw new SandeshaException(e.getMessage(), e);
}
}else{
// Should use a constant in the final fix.
applicationMsg.setProperty(ACK_TO_BE_WRITTEN, Boolean.TRUE);
}
// Ensure the message also contains the token that needs to be used
secureOutboundMessage(rmdBean, applicationMsg.getMessageContext());
}
if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
log.debug("Exit: RMMsgCreator::addAckMessage " + applicationMsg);
}