Example #1
0
  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);
    }
  }