/* * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.wso2.carbon.registry.event.ws.internal.builders; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFactory; import org.apache.axis2.context.MessageContext; import org.apache.axis2.databinding.utils.ConverterUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.registry.event.ws.internal.builders.exceptions.BuilderException; import org.wso2.carbon.registry.event.ws.internal.builders.exceptions.InvalidMessageException; import org.wso2.carbon.registry.event.ws.internal.util.EventingConstants; import org.wso2.carbon.registry.event.core.subscription.Subscription; public class GetStatusCommandBuilder extends CommandBuilderConstants { private static final Log log = LogFactory.getLog(SubscribeCommandBuilder.class); private SOAPFactory factory; public GetStatusCommandBuilder(MessageContext messageCtx) { factory = (SOAPFactory) messageCtx.getEnvelope().getOMFactory(); } /** * create request for get status request * (01) <s12:Envelope * (02) xmlns:s12="http://www.w3.org/2003/05/soap-envelope" * (03) xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" * (04) xmlns:wse="http://schemas.xmlsoap.org/ws/2004/08/eventing" * (05) xmlns:ow="http://www.example.org/oceanwatch" > * (06) <s12:Header> * (07) <wsa:Action> * (08) http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus * (09) </wsa:Action> * (10) <wsa:MessageID> * (11) uuid:bd88b3df-5db4-4392-9621-aee9160721f6 * (12) </wsa:MessageID> * (13) <wsa:ReplyTo> * (14) <wsa:Address>http://www.example.com/MyEventSink</wsa:Address> * (15) </wsa:ReplyTo> * (16) <wsa:To> * (17) http://www.example.org/oceanwatch/SubscriptionManager * (18) </wsa:To> * (19) <wse:Identifier> * (20) uuid:22e8a584-0d18-4228-b2a8-3716fa2097fa * (21) </wse:Identifier> * (22) </s12:Header> * (23) <s12:Body> * (24) <wse:GetStatus /> * (25) </s12:Body> * (26) </s12:Envelope> * * @param envelope The soap envelope containing the get status request * @return The subscription for which the status was requested * @throws InvalidMessageException */ public Subscription toSubscription(SOAPEnvelope envelope) throws InvalidMessageException { if (envelope == null) { log.error("No SOAP envelope was provided."); throw new BuilderException("No SOAP envelope was provided."); } Subscription subscription = new Subscription(); OMElement elem = null; if (envelope.getHeader() != null) { elem = envelope.getHeader().getFirstChildWithName(IDENTIFIER); } if (elem == null) { log.error( "Subscription Identifier is required as a header of the subscription message."); throw new InvalidMessageException( "Subscription Identifier is required as a header of the subscription message."); } String id = elem.getText().trim(); subscription.setId(id); return subscription; } /** * (01) <s12:Envelope * (02) xmlns:s12="http://www.w3.org/2003/05/soap-envelope" * (03) xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" * (04) xmlns:wse="http://schemas.xmlsoap.org/ws/2004/08/eventing" * (05) xmlns:ow="http://www.example.org/oceanwatch" > * (06) <s12:Header> * (07) <wsa:Action> * (08) http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatusResponse * (09) </wsa:Action> * (10) <wsa:RelatesTo> * (11) uuid:bd88b3df-5db4-4392-9621-aee9160721f6 * (12) </wsa:RelatesTo> * (13) <wsa:To>http://www.example.com/MyEventSink</wsa:To> * (14) </s12:Header> * (15) <s12:Body> * (16) <wse:GetStatusResponse> * (17) <wse:Expires>2004-06-26T12:00:00.000-00:00</wse:Expires> * (18) </wse:GetStatusResponse> * (19) </s12:Body> * (20) </s12:Envelope> * * @param subscription The subscription for which status must be obtained. * @return The response envelope for the get status request. */ public SOAPEnvelope fromSubscription(Subscription subscription) { SOAPEnvelope message = factory.getDefaultEnvelope(); OMNamespace eventingNamespace = factory.createOMNamespace(EventingConstants.WSE_EVENTING_NS, EventingConstants.WSE_EVENTING_PREFIX); OMElement getStatusResponseElement = factory.createOMElement( EventingConstants.WSE_EN_GET_STATUS_RESPONSE, eventingNamespace); OMElement expiresElement = factory.createOMElement(EventingConstants.WSE_EN_EXPIRES, eventingNamespace); if (subscription.getExpires() != null) { factory.createOMText(expiresElement, ConverterUtil.convertToString(subscription.getExpires())); } else { factory.createOMText(expiresElement, "*"); } getStatusResponseElement.addChild(expiresElement); message.getBody().addChild(getStatusResponseElement); return message; } }