public static void addAckMessage()

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);
	}