blob: 2d4e318ba74431a02a36c69c395a819fe9d60af6 [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed 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.apache.sandesha2.util;
import org.apache.axis2.context.MessageContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.SandeshaException;
import org.apache.sandesha2.wsrm.RMElements;
/**
* This class is used to create an RMMessageContext out of an MessageContext.
*
* @author Chamikara Jayalath <chamikaramj@gmail.com>
*/
public class MsgInitializer {
public static RMMsgContext initializeMessage(MessageContext ctx)
throws SandeshaException {
RMMsgContext rmMsgCtx = new RMMsgContext(ctx);
populateRMMsgContext(ctx, rmMsgCtx);
validateMessage(rmMsgCtx);
return rmMsgCtx;
}
/**
* Adds the message parts the the RMMessageContext.
*
* @param msgCtx
* @param rmMsgContext
*/
private static void populateRMMsgContext(MessageContext msgCtx,
RMMsgContext rmMsgContext) {
RMElements elements = new RMElements();
elements.fromSOAPEnvelope(msgCtx.getEnvelope());
if (elements.getCreateSequence() != null)
rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ,
elements.getCreateSequence());
if (elements.getCreateSequenceResponse() != null)
rmMsgContext.setMessagePart(
Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE, elements
.getCreateSequenceResponse());
if (elements.getSequence() != null)
rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE,
elements.getSequence());
if (elements.getSequenceAcknowledgement() != null)
rmMsgContext.setMessagePart(
Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT, elements
.getSequenceAcknowledgement());
if (elements.getTerminateSequence() != null)
rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ,
elements.getTerminateSequence());
if (elements.getAckRequested() != null)
rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST,
elements.getAckRequested());
}
/**
* This is used to validate the message.
* Also set an Message type. Possible types are given in the Sandesha2Constants.MessageTypes interface.
*
* @param rmMsgCtx
* @return
* @throws SandeshaException
*/
private static boolean validateMessage(RMMsgContext rmMsgCtx)
throws SandeshaException {
//Setting message type.
if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ) != null)
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ);
else if (rmMsgCtx
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE) != null)
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE);
else if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ) != null)
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.TERMINATE_SEQ);
else if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE) != null)
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
else if (rmMsgCtx
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT) != null)
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK);
else
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.UNKNOWN);
return true;
}
}