Search in sources :

Example 1 with TerminateSequenceResponseType

use of org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType in project cxf by apache.

the class Servant method terminateSequence.

public Object terminateSequence(Message message) {
    LOG.fine("Terminating sequence");
    final ProtocolVariation protocol = RMContextUtils.getProtocolVariation(message);
    EncoderDecoder codec = protocol.getCodec();
    TerminateSequenceType terminate = codec.convertReceivedTerminateSequence(getParameter(message));
    // check if the terminated sequence was created in response to a a createSequence
    // request
    Destination destination = reliableEndpoint.getDestination();
    Identifier sid = terminate.getIdentifier();
    DestinationSequence terminatedSeq = destination.getSequence(sid);
    if (null != terminatedSeq) {
        destination.terminateSequence(terminatedSeq);
    }
    // the following may be necessary if the last message for this sequence was a oneway
    // request and hence there was no response to which a last message could have been added
    // REVISIT: A last message for the correlated sequence should have been sent by the time
    // the last message for the underlying sequence was received.
    Source source = reliableEndpoint.getSource();
    for (SourceSequence outboundSeq : source.getAllSequences()) {
        if (outboundSeq.offeredBy(sid) && !outboundSeq.isLastMessage()) {
            if (outboundSeq.getCurrentMessageNr() == 0) {
                source.removeSequence(outboundSeq);
            }
            break;
        }
    }
    TerminateSequenceResponseType terminateResponse = null;
    if (RM11Constants.NAMESPACE_URI.equals(protocol.getWSRMNamespace())) {
        AddressingProperties maps = RMContextUtils.retrieveMAPs(message, false, false);
        Message outMessage = message.getExchange().getOutMessage();
        if (null == outMessage) {
            // outMessage may be null e.g. if ReplyTo is not set for TS
            outMessage = ContextUtils.createMessage(message.getExchange());
            message.getExchange().setOutMessage(outMessage);
        }
        if (null != outMessage) {
            RMContextUtils.storeMAPs(maps, outMessage, false, false);
        }
        terminateResponse = new TerminateSequenceResponseType();
        terminateResponse.setIdentifier(sid);
    }
    return terminateResponse;
}
Also used : TerminateSequenceResponseType(org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType) Identifier(org.apache.cxf.ws.rm.v200702.Identifier) Message(org.apache.cxf.message.Message) TerminateSequenceType(org.apache.cxf.ws.rm.v200702.TerminateSequenceType) AddressingProperties(org.apache.cxf.ws.addressing.AddressingProperties)

Example 2 with TerminateSequenceResponseType

use of org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType in project cxf by apache.

the class ServantTest method verifyTerminateSequenceDefault.

private void verifyTerminateSequenceDefault(Servant servant, RMManager manager, String sidstr, ProtocolVariation protocol) throws SequenceFault {
    DestinationPolicyType dp = RMMANGER_FACTORY.createDestinationPolicyType();
    AcksPolicyType ap = RMMANGER_FACTORY.createAcksPolicyType();
    dp.setAcksPolicy(ap);
    manager.setDestinationPolicy(dp);
    Message message = createTestTerminateSequenceMessage(sidstr, protocol);
    Object tsr = servant.terminateSequence(message);
    if (ProtocolVariation.RM10WSA200408.getWSRMNamespace().equals(protocol.getWSRMNamespace())) {
        // rm 1.0
        assertNull(tsr);
    } else {
        // rm 1.1
        assertTrue(tsr instanceof TerminateSequenceResponseType);
        org.apache.cxf.ws.rm.v200702.Identifier sid = ((TerminateSequenceResponseType) tsr).getIdentifier();
        assertNotNull(sid);
        assertEquals(sidstr, sid.getValue());
    }
}
Also used : TerminateSequenceResponseType(org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType) AcksPolicyType(org.apache.cxf.ws.rm.manager.AcksPolicyType) Message(org.apache.cxf.message.Message) DestinationPolicyType(org.apache.cxf.ws.rm.manager.DestinationPolicyType)

Aggregations

Message (org.apache.cxf.message.Message)2 TerminateSequenceResponseType (org.apache.cxf.ws.rm.v200702.TerminateSequenceResponseType)2 AddressingProperties (org.apache.cxf.ws.addressing.AddressingProperties)1 AcksPolicyType (org.apache.cxf.ws.rm.manager.AcksPolicyType)1 DestinationPolicyType (org.apache.cxf.ws.rm.manager.DestinationPolicyType)1 Identifier (org.apache.cxf.ws.rm.v200702.Identifier)1 TerminateSequenceType (org.apache.cxf.ws.rm.v200702.TerminateSequenceType)1