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

public class DeploymentErrorMsgs {
    public static final String ADDING_NEW_MODULE = "addingnewmodule";
    public static final String BAD_MODULE_FROM_OPERATION = "badModuleFromOperation";
    public static final String BAD_MODULE_FROM_SERVICE = "badModuleFromService";
    public static final String BAD_PARAMETER_ARGUMENT = "badparaagu";
    public static final String CONFIG_NOT_FOUND = "confignotfound";
    public static final String CLASS_NOT_FOUND = "classnotfound";
    public static final String DEPLOYING_MODULE = "deployingmodule";
    public static final String DEPLOYING_WS = "deployingws";
    public static final String DEPLOYING_POJO = "deployingpojo";
    public static final String ELEMENT_IS_NOT_ALLOWED = "elementisnotallow";
    public static final String ERROR_IN_LOADING_MESSAGE_RECEIVER = "errorinloadingmr";
    public static final String FLOWTYPE_IS_REQUIRED = "flowtypeisrequird";
    public static final String FILE_NOT_FOUND = "fileNotFound";
    public static final String INFLOW_NOT_ALLOWED_IN_TRS_OUT = "inflownotallowedintrout";
    public static final String INVALID_HANDLER = "invalidhandler";
    public static final String INVALID_MODULE = "invalidmodule";
    public static final String INVALID_MODULE_CONFIG = "invalidmoduleconfig";
    public static final String INVALID_MODULE_REF = "invalidmodulerefbyconfig";
    public static final String INVALID_OP = "invalid_op";
    public static final String INVALID_PHASE = "invalidphase";
    public static final String INVALID_SERVICE = "invalidservice";
    public static final String INVALID_STORAGE_CLASS = "invalid_storage";
    public static final String MODULE_CANNOT_HAVE_BOTH_NAME_AND_REFERENCE =
            "modulecannothavrbothnameandref";
    public static final String DISPATCH_PHASE_NOT_FOUND = "dispatchPhaseNotFoundOnInflow";
    public static final String MODULE_NOT_FOUND = "modulenotfound";
    public static final String MODULE_VALIDATION_FAILED = "modulevalfailed";
    public static final String MODULE_XML_MISSING = "modulexmlnotfound";
    public static final String META_INF_MISSING = "noMetaInf";
    public static final String OBSERVER_ERROR = "obsererror";
    public static final String OPERATION_PROCESS_ERROR = "op_error";
    public static final String OUTFLOW_NOT_ALLOWED_IN_TRS_IN =
            "outflownotallowedintrin";
    public static final String PARAMETER_LOCKED = "parameterlockederror";
    public static final String PATH_TO_CONFIG_CANNOT_BE_NULL = "pathtoconfigcanotnull";
    public static final String REPOSITORY_CANNOT_BE_NULL = "repocannotbebull";
    public static final String SERVICE_MODULE_CANNOT_REFER_GLOBAL_PHASE =
            "servicemodulecannothaveglobal";
    public static final String SERVICE_NAME_ERROR = "servicenameeror";
    public static final String SERVICE_REMOVED = "serviceremoved";
    public static final String SERVICE_XML_NOT_FOUND = "servicexmlnotfound";
    public static final String ERROR_SETTING_CLIENT_HOME = "settingcl";
    public static final String TRANSPORT_SENDER_ERROR = "transportSenderError";
    public static final String XML_STREAM_EXCEPTION = "StreamException";
    public static final String ERROR_LOADING_MESSAGE_BUILDER = "errorloadingbuilder";
    public static final String ERROR_LOADING_MESSAGE_FORMATTER = "errorloadingformatter";
    public static final String DEPLOYING_EXCEPTION = "deployingexception";
    public static final String STORING_FAULTY_SERVICE = "stroringfaultyservice";
    public static final String JAXWS_JARS_MISSING = "jaxwsjarsmissing";
    public static final String FAULTY_SERVICE_REMOVAL = "faultyserviceremoval";
}
