/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF 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.apache.axis2.description;

public interface DescriptionConstants {

    /**
     * Field EXECUTION_CHAIN_KEY
     */
    public static final String EXECUTION_CHAIN_KEY = "EXECUTION_CHAIN_KEY";

    /**
     * Field EXECUTION_OUT_CHAIN_KEY
     */
    public static final String EXECUTION_OUT_CHAIN_KEY = "EXECUTION_OUT_CHAIN_KEY";

    /**
     * Field EXECUTION_FAULT_CHAIN_KEY
     */
    public static final String EXECUTION_FAULT_CHAIN_KEY = "EXECUTION_FAULT_CHAIN_KEY";

    /**
     * Field MODULEREF_KEY
     */
    public static final String MODULEREF_KEY = "MODULEREF_KEY";

    /**
     * Field OPERATION_KEY
     */
    public static final String OPERATION_KEY = "OPERATION_KEY";

    /**
     * Field MESSAGE_RECEIVER_KEY
     */
    public static final String MESSAGE_RECEIVER_KEY = "PROVIDER_KEY";

    /**
     * Field CONTEXTPATH_KEY
     */
    public static final String CONTEXTPATH_KEY = "CONTEXTPATH_KEY";

    /**
     * Field CLASSLOADER_KEY
     */
    public static final String CLASSLOADER_KEY = "CLASSLOADER_KEY";

    /**
     * Field STYLE_KEY
     */
    public static final String STYLE_KEY = "STYLE_KEY";

    /**
     * Field SERVICE_CLASS_NAME
     */
    public static final String SERVICE_CLASS_NAME = "SERVICE_CLASS_NAME";

    /**
     * Field PHASES_KEY
     */
    public static final String PHASES_KEY = "PHASES_KEY";

    /**
     * Field PARAMETER_KEY
     */
    public static final String PARAMETER_KEY = "PARAMETER_KEY";
    public static final String OUT_FAULTFLOW_KEY = "OUT_FAULTFLOW_KEY";

    /**
     * Field OUTFLOW_KEY
     */
    public static final String OUTFLOW_KEY = "OUTFLOW_KEY";

    /**
     * Field IN_FAULTFLOW_KEY
     */
    public static final String IN_FAULTFLOW_KEY = "IN_FAULTFLOW_KEY";

    /**
     * Field INFLOW_KEY
     */
    public static final String INFLOW_KEY = "INFLOW_KEY";
}
