private void handleSubscriptionRequest()

in modules/core/src/main/java/org/apache/savan/eventing/EventingMessageReceiverDelegator.java [59:127]


    private void handleSubscriptionRequest(SavanMessageContext subscriptionMessage,
                                           MessageContext outMessage) throws SavanException {

        if (outMessage == null)
            throw new SavanException("Missing outMessage for Subscribe");

        MessageContext subscriptionMsgCtx = subscriptionMessage.getMessageContext();

        SOAPEnvelope outMessageEnvelope = outMessage.getEnvelope();
        SOAPFactory factory;

        if (outMessageEnvelope != null) {
            factory = (SOAPFactory)outMessageEnvelope.getOMFactory();
        } else {
            factory = (SOAPFactory)subscriptionMsgCtx.getEnvelope().getOMFactory();
            outMessageEnvelope = factory.getDefaultEnvelope();

            try {
                outMessage.setEnvelope(outMessageEnvelope);
            } catch (AxisFault e) {
                throw new SavanException(e);
            }
        }

        //setting the action
        outMessage.getOptions().setAction(EventingConstants.Actions.SubscribeResponse);

        //sending the subscription response message.
        String address = subscriptionMsgCtx.getOptions().getTo().getAddress();
        EndpointReference subscriptionManagerEPR = new EndpointReference(address);

        String id = (String)subscriptionMessage
                .getProperty(EventingConstants.TransferedProperties.SUBSCRIBER_UUID);
        if (id == null)
            throw new SavanException("Subscription UUID is not set");

        subscriptionManagerEPR.addReferenceParameter(
                new QName(EventingConstants.EVENTING_NAMESPACE,
                          EventingConstants.ElementNames.Identifier,
                          EventingConstants.EVENTING_PREFIX),
                id);

        OMNamespace ens = factory.createOMNamespace(EventingConstants.EVENTING_NAMESPACE,
                                                    EventingConstants.EVENTING_PREFIX);
        OMElement subscribeResponseElement =
                factory.createOMElement(EventingConstants.ElementNames.SubscribeResponse, ens);
        OMElement subscriptionManagerElement;
        try {
            subscriptionManagerElement = EndpointReferenceHelper.toOM(
                    subscribeResponseElement.getOMFactory(),
                    subscriptionManagerEPR,
                    new QName(EventingConstants.EVENTING_NAMESPACE,
                              EventingConstants.ElementNames.SubscriptionManager,
                              EventingConstants.EVENTING_PREFIX),
                    AddressingConstants.Submission.WSA_NAMESPACE);
        } catch (AxisFault e) {
            throw new SavanException(e);
        }

        //TODO set expires

        subscribeResponseElement.addChild(subscriptionManagerElement);
        outMessageEnvelope.getBody().addChild(subscribeResponseElement);

        //setting the message type
        outMessage.setProperty(SavanConstants.MESSAGE_TYPE,
                               SavanConstants.MessageTypes.SUBSCRIPTION_RESPONSE_MESSAGE);

    }