Package org.apache.sandesha2

Source Code of org.apache.sandesha2.MessageValidator

/*
* 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;

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.WSDL2Constants;
import org.apache.sandesha2.client.SandeshaClientConstants;
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.policy.SandeshaPolicyBean;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.storage.beans.RMSBean;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SpecSpecificConstants;

/**
* Used to validate RM messages. This include both application messages and RM
* control messages.
*/
public class MessageValidator {

  public static void validateIncomingMessage(RMMsgContext rmMsg,
      StorageManager storageManager) throws SandeshaException {

    int type = rmMsg.getMessageType();
    if (type != Sandesha2Constants.MessageTypes.CREATE_SEQ  && type != Sandesha2Constants.MessageTypes.UNKNOWN) {

      String sequenceID = SandeshaUtil.getSequenceIDFromRMMessage(rmMsg);

      if (sequenceID != null) {
        String rmVersionOfSequence = null;

        RMSBean rmsBean = SandeshaUtil.getRMSBeanFromSequenceId(
            storageManager, sequenceID);
        if (rmsBean != null)
          rmVersionOfSequence = rmsBean.getRMVersion();
        else {
          RMDBean rmdBean = SandeshaUtil.getRMDBeanFromSequenceId(
              storageManager, sequenceID);
          if (rmdBean != null)
            rmVersionOfSequence = rmdBean.getRMVersion();
        }

        String rmNamespaceOfMsg = rmMsg.getRMNamespaceValue();
        String rmNamespaceOfSequence = null;
        if (rmVersionOfSequence != null)
          rmNamespaceOfSequence = SpecSpecificConstants
              .getRMNamespaceValue(rmVersionOfSequence);

        if (rmNamespaceOfSequence != null
            && !rmNamespaceOfSequence.equals(rmNamespaceOfMsg)) {
          String message = SandeshaMessageHelper
              .getMessage(
                  SandeshaMessageKeys.rmNamespaceNotMatchSequence,
                  rmNamespaceOfMsg, rmNamespaceOfSequence,
                  sequenceID);
          throw new SandeshaException(message);
        }

      }
    } else if (type == Sandesha2Constants.MessageTypes.UNKNOWN) {

      // checking if policies hv been set to enforceRM.
      // If this is set and this message is not an RM message, validation
      // will fail here.

      SandeshaPolicyBean propertyBean = SandeshaUtil
          .getPropertyBean(rmMsg.getMessageContext()
              .getAxisOperation());
      if (propertyBean.isEnforceRM()) {
        String message = SandeshaMessageHelper.getMessage(
            SandeshaMessageKeys.rmEnforceFailure, rmMsg
                .getMessageId());
        throw new SandeshaException(message);
      }
    }

    // TODO do validation based on states
   
  }
 
  public static void validateOutgoingMessage (RMMsgContext rmMsgContext) throws SandeshaException {
   
    MessageContext msgContext = rmMsgContext.getMessageContext();
    if (!msgContext.isServerSide()) {
      //validating messages from the client.
     
      //if sync InOut and NoOffer and RM 1.0 an exception should be thrown
      String mep = msgContext.getAxisOperation().getMessageExchangePattern();
      String offer = (String) msgContext.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID);
     
      EndpointReference replyTo = rmMsgContext.getMessageContext().getOptions().getReplyTo();
      boolean anonReplyTo = false;
      if (replyTo==null || replyTo.hasAnonymousAddress())
        anonReplyTo = true;
     
      //For RM 1.0 there must be an offer to get an Anon response.
      if (!Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(rmMsgContext.getRMSpecVersion()) &&
        WSDL2Constants.MEP_URI_OUT_IN.equals(mep) &&
        offer==null && anonReplyTo) {
       
        String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.offerRequiredForAnon);
        throw new SandeshaException(message);
       
      }
     
    }
  }
}
TOP

Related Classes of org.apache.sandesha2.MessageValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.