public OMElement getOriginalSequenceAckElement() {
return originalSequenceAckElement;
}
public void toHeader(SOAPHeader header) throws SandeshaException{
SOAPHeaderBlock sequenceAcknowledgementHeaderBlock = header.addHeaderBlock(
Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK,omNamespace);
if (identifier == null)
throw new OMException(
SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.invalidIdentifier,
header.toString()));
// SequenceACK messages should always have the MustUnderstand flag set to true
// Unless it is a piggybacked ack
if(piggybacked){
sequenceAcknowledgementHeaderBlock.setMustUnderstand(false);
} else {
sequenceAcknowledgementHeaderBlock.setMustUnderstand(true);
}
identifier.toOMElement(sequenceAcknowledgementHeaderBlock, omNamespace);
Iterator<Range> ackRangeIt = acknowledgementRangeList.iterator();
while (ackRangeIt.hasNext()) {
Range ackRange = (Range) ackRangeIt.next();
if (ackRange.upperValue <= 0 || ackRange.lowerValue <= 0 || ackRange.lowerValue > ackRange.upperValue)
throw new OMException(
SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.ackRandDoesNotHaveCorrectValues,
ackRange.upperValue + ":" + ackRange.lowerValue));
OMFactory factory = sequenceAcknowledgementHeaderBlock.getOMFactory();
OMAttribute lowerAttrib = factory.createOMAttribute(
Sandesha2Constants.WSRM_COMMON.LOWER, null, Long.toString(ackRange.lowerValue));
OMAttribute upperAttrib = factory.createOMAttribute(
Sandesha2Constants.WSRM_COMMON.UPPER, null, Long.toString(ackRange.upperValue));
OMElement acknowledgementRangeElement = factory.createOMElement(Sandesha2Constants.WSRM_COMMON.ACK_RANGE, omNamespace);
acknowledgementRangeElement.addAttribute(lowerAttrib);
acknowledgementRangeElement.addAttribute(upperAttrib);
sequenceAcknowledgementHeaderBlock.addChild(acknowledgementRangeElement);
}
Iterator<Long> nackIt = nackList.iterator();
while (nackIt.hasNext()) {
Long nack = (Long) nackIt.next();
if (nack.longValue()<=0)
throw new OMException (SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.nackDoesNotContainValidLongValue));
OMElement nackElement = sequenceAcknowledgementHeaderBlock.getOMFactory().createOMElement(Sandesha2Constants.WSRM_COMMON.NACK,omNamespace);
nackElement.setText(nack.toString());
sequenceAcknowledgementHeaderBlock.addChild(nackElement);
}
String rmSpecVersion = SpecSpecificConstants.getSpecVersionString(namespaceValue);
//setting a 'None' when nothing is there (for the correct RM version)
if (ackNone==false && acknowledgementRangeList.size()==0 && nackList.size()==0 && SpecSpecificConstants.isAckNoneAllowed(rmSpecVersion)) {
ackNone = true;
}
if (ackNone!=false) {
if (!SpecSpecificConstants.isAckNoneAllowed(rmSpecVersion)) {
throw new SandeshaException (SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.noneNotAllowedNamespace,
rmSpecVersion));
}
if (acknowledgementRangeList.size()>0) {
throw new SandeshaException (SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.noneNotAllowedAckRangesPresent));
}
if (nackList.size()>0) {
throw new SandeshaException (SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.noneNotAllowedNackPresent));
}
OMElement noneElement = sequenceAcknowledgementHeaderBlock.getOMFactory().createOMElement(Sandesha2Constants.WSRM_COMMON.NONE, omNamespace);
sequenceAcknowledgementHeaderBlock.addChild(noneElement);
}
if (ackFinal!=false) {
if (!SpecSpecificConstants.isAckFinalAllowed(rmSpecVersion)) {
throw new SandeshaException (SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.finalNotAllowedNamespace));
}
if (nackList.size()>0) {
throw new SandeshaException (SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.cannotHaveFinalWithNack));
}
OMElement finalElement = sequenceAcknowledgementHeaderBlock.getOMFactory().createOMElement(Sandesha2Constants.WSRM_COMMON.FINAL, omNamespace);
sequenceAcknowledgementHeaderBlock.addChild(finalElement);
}
}