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

#include <stdlib.h>
#include <string.h>
#include "axutil_error_default.h"

#define AXIS2_ERROR_MESSAGE_ARRAY_SIZE AXUTIL_ERROR_MAX


/**
 * Array to hold error messages corresponding to the pre-defined error codes.
 * Note that array has capacity for additional error messages. These are 
 * reserved for modules.
 *
 * TODO: We have to review and change the following definition and also 
 * need to come up with a reserve strategy for module error code blocks.
 *
 * In writing a module following steps must be followed in extending Axis2/C
 * errors
 * 1. Declare and register the start of error messages for the new
 *    module. 
 * 2. New module can use up to 1000 messages for its errors.
 * 3. In axis2c documentation an entry about new modules error range must
 *    be inserted so that another new module can know about the already
 *    occupied spaces. 
 */

AXIS2_EXPORT const axis2_char_t*
axutil_error_messages[AXIS2_ERROR_MESSAGE_ARRAY_SIZE];

AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_error_init()
{
    int i = 0;
    for (i = 0; i < AXIS2_ERROR_MESSAGE_ARRAY_SIZE ; i++)
    {
        axutil_error_messages[i] = "Unknown Error :(";
    }

    /* Common Errors */
    axutil_error_messages[AXIS2_ERROR_NONE] = "No Error";
    axutil_error_messages[AXIS2_ERROR_NO_MEMORY] = "Out of memory";
    axutil_error_messages[AXIS2_ERROR_INVALID_NULL_PARAM] =
        "NULL parameter was passed when a non NULL parameter was expected";
    /* core:addr */

    /* core:clientapi */
    axutil_error_messages[AXIS2_ERROR_BLOCKING_INVOCATION_EXPECTS_RESPONSE] =
        "Blocking invocation expects response";
    axutil_error_messages[AXIS2_ERROR_CANNOT_INFER_TRANSPORT] =
        "Cannot infer transport from URL";
    axutil_error_messages[AXIS2_ERROR_CLIENT_SIDE_SUPPORT_ONLY_ONE_CONF_CTX] =
        "Client side support only one configuration context";
    axutil_error_messages[AXIS2_ERROR_MEP_CANNOT_BE_NULL_IN_MEP_CLIENT] =
        "MEP cannot be NULL in MEP client";
    axutil_error_messages[AXIS2_ERROR_MEP_MISMATCH_IN_MEP_CLIENT] =
        "MEP mismatch";
    axutil_error_messages[AXIS2_ERROR_TWO_WAY_CHANNEL_NEEDS_ADDRESSING] =
        "Two way channel needs addressing module to be engaged";
    axutil_error_messages[AXIS2_ERROR_UNKNOWN_TRANSPORT] = "Unknown transport";
    axutil_error_messages[AXIS2_ERROR_UNSUPPORTED_TYPE] =
        "Type is not supported";
    axutil_error_messages[AXIS2_ERROR_OPTIONS_OBJECT_IS_NOT_SET] =
        "Options object is not set";
    /* core:clientapi:diclient */

    /* core:context */
    axutil_error_messages[AXIS2_ERROR_INVALID_SOAP_ENVELOPE_STATE] =
        "Invalid SOAP envelope state";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_MSG_CTX] =
        "Invalid message context state";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_SVC] =
        "Service accessed has invalid state";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_SVC_GRP] =
        "Service group accessed has invalid state";
    axutil_error_messages[AXIS2_ERROR_SERVICE_NOT_YET_FOUND] =
        "Service not yet found";
    /* core:deployment */
    axutil_error_messages[AXI2_ERROR_INVALID_PHASE] =
        "Invalid phase found in phase validation*";
    axutil_error_messages[AXIS2_ERROR_CONFIG_NOT_FOUND] =
        "Configuration file cannot be found";
    axutil_error_messages[AXIS2_ERROR_DATA_ELEMENT_IS_NULL] =
        "Data element of the OM Node is NULL";
    axutil_error_messages[AXIS2_ERROR_IN_FLOW_NOT_ALLOWED_IN_TRS_OUT] =
        "In transport sender, Inflow is not allowed";
    axutil_error_messages[AXIS2_ERROR_INVALID_HANDLER_STATE] =
        "Invalid handler state";
    axutil_error_messages[AXIS2_ERROR_INVALID_MODUELE_REF] =
        "Invalid module reference encountered";
    axutil_error_messages[AXIS2_ERROR_INVALID_MODUELE_REF_BY_OP] =
        "Invalid module referenced by operation";
    axutil_error_messages[AXIS2_ERROR_INVALID_MODULE_CONF] =
        "Invalid module configuration";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_DESC_BUILDER] =
        "Description builder is found to be in invalid state";
    axutil_error_messages[AXIS2_ERROR_MODULE_NOT_FOUND] = "Module not found";
    axutil_error_messages[AXIS2_ERROR_MODULE_VALIDATION_FAILED] =
        "Module validation failed";
    axutil_error_messages[AXIS2_ERROR_MODULE_XML_NOT_FOUND_FOR_THE_MODULE] =
        "Module XML file is not found in the given path";
    axutil_error_messages[AXIS2_ERROR_NO_DISPATCHER_FOUND] =
        "No dispatcher found";
    axutil_error_messages[AXIS2_ERROR_OP_NAME_MISSING] =
        "Operation name is missing";
    axutil_error_messages[AXIS2_ERROR_OUT_FLOW_NOT_ALLOWED_IN_TRS_IN] =
        "In transport receiver, outflow is not allowed";
    axutil_error_messages[AXIS2_ERROR_REPO_CAN_NOT_BE_NULL] =
        "Repository name cannot be NULL";
    axutil_error_messages[AXIS2_ERROR_REPOSITORY_NOT_EXIST] =
        "Repository in path does not exist";
    axutil_error_messages[AXIS2_ERROR_REPOS_LISTENER_INIT_FAILED] =
        "Repository listener initialization failed";
    axutil_error_messages[AXIS2_ERROR_SERVICE_XML_NOT_FOUND] =
        "Service XML file is not found in the given path";
    axutil_error_messages[AXIS2_ERROR_SVC_NAME_ERROR] = "Service name error";
    axutil_error_messages[AXIS2_ERROR_TRANSPORT_SENDER_ERROR] =
        "Transport sender error";
    axutil_error_messages[AXIS2_PATH_TO_CONFIG_CAN_NOT_BE_NULL] =
        "Path to configuration file can not be NULL";
    axutil_error_messages[AXIS2_ERROR_INVALID_SVC] = "Invalid service";
    /* core:description */
    axutil_error_messages[AXIS2_ERROR_CANNOT_CORRELATE_MSG] =
        "Cannot correlate message";
    axutil_error_messages[AXIS2_ERROR_COULD_NOT_MAP_MEP_URI_TO_MEP_CONSTANT] =
        "Could not map the MEP URI to an Axis2/C MEP constant value";
    axutil_error_messages[AXIS2_ERROR_INVALID_MESSAGE_ADDITION] =
        "Invalid message addition operation context completed";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_MODULE_DESC] =
        "Module description accessed has invalid state";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER] =
        "Parameter container not set";
    axutil_error_messages[AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_OP] =
        "Module has already been engaged to the operation";
    axutil_error_messages[AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC] =
        "Module has already been engaged on the service.";
    axutil_error_messages[AXIS2_ERROR_MODULE_ALREADY_ENGAGED_TO_SVC_GRP] =
        "Module has already been engaged on the service.";
    axutil_error_messages[AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE] =
        "Parameter locked, cannot override";
    axutil_error_messages[AXIS2_ERROR_EMPTY_SCHEMA_LIST] =
        "Schema list is empty or NULL in service";
    /* core:engine */
    axutil_error_messages[AXIS2_ERROR_BEFORE_AFTER_HANDLERS_SAME] =
        "Both before and after handlers cannot be the same";
    axutil_error_messages[AXIS2_ERROR_INVALID_HANDLER_RULES] =
        "Invalid handler rules";
    axutil_error_messages[AXIS2_ERROR_INVALID_MODULE] = "Invalid module";
    axutil_error_messages[AXIS2_ERROR_INVALID_PHASE_FIRST_HANDLER] =
        "Invalid first handler for phase";
    axutil_error_messages[AXIS2_ERROR_INVALID_PHASE_LAST_HANDLER] =
        "Invalid last handler for phase";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_CONF] =
        "Invalid engine configuration state";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_PROCESSING_FAULT_ALREADY] =
        "Message context processing a fault already";
    axutil_error_messages[AXIS2_ERROR_NOWHERE_TO_SEND_FAULT] =
        "fault to field not specified in message context";
    axutil_error_messages[AXIS2_ERROR_PHASE_ADD_HANDLER_INVALID] =
        "Only one handler allowed for phase, adding another handler is not allowed";
    axutil_error_messages[AXIS2_ERROR_PHASE_FIRST_HANDLER_ALREADY_SET] =
        "First handler of phase already set";
    axutil_error_messages[AXIS2_ERROR_PHASE_LAST_HANDLER_ALREADY_SET] =
        "Last handler of phase already set";
    axutil_error_messages[AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME] =
        "Two service can not have same name, a service with same name already";
    /* core:phaseresolver */
    axutil_error_messages[AXIS2_ERROR_INVALID_MODULE_REF] =
        "Invalid module reference";
    axutil_error_messages[AXIS2_ERROR_INVALID_PHASE] = "Invalid Phase";
    axutil_error_messages[AXIS2_ERROR_NO_TRANSPORT_IN_CONFIGURED] =
        "There are no in transport chains configured";
    axutil_error_messages[AXIS2_ERROR_NO_TRANSPORT_OUT_CONFIGURED] =
        "There are no out transport chains configured";
    axutil_error_messages[AXIS2_ERROR_PHASE_IS_NOT_SPECIFED] =
        "Phase is not specified";
    axutil_error_messages[AXIS2_ERROR_SERVICE_MODULE_CAN_NOT_REFER_GLOBAL_PHASE]
        = "Service module can not refer global phase";
    /* core:wsdl */
    axutil_error_messages[AXIS2_ERROR_WSDL_SCHEMA_IS_NULL] = "Schema is NULL";
    /* core:receivers */
    axutil_error_messages[AXIS2_ERROR_OM_ELEMENT_INVALID_STATE] =
        "AXIOM element has invalid state";
    axutil_error_messages[AXIS2_ERROR_OM_ELEMENT_MISMATCH] =
        "AXIOM elements do not match";
    axutil_error_messages[AXIS2_ERROR_RPC_NEED_MATCHING_CHILD] =
        "RPC style SOAP body don't have a child element";
    axutil_error_messages[AXIS2_ERROR_UNKNOWN_STYLE] =
        "Operation description has unknown operation style";
    axutil_error_messages[AXIS2_ERROR_STRING_DOES_NOT_REPRESENT_A_VALID_NC_NAME]
        = "String does not represent a valid NCName";
    /* core:transport */

    /* core:transport:http */
    axutil_error_messages[AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR] =
        "Error occurred in transport";
    axutil_error_messages[AXIS2_ERROR_HTTP_REQUEST_NOT_SENT] =
        "A read attempt(HTTP) for the reply without sending the request";
    axutil_error_messages[AXIS2_ERROR_INVALID_HEADER] =
        "Invalid string passed as a HTTP header";
    axutil_error_messages[AXIS2_ERROR_INVALID_HTTP_HEADER_START_LINE] =
        "Invalid status line or invalid request line";
    axutil_error_messages[AXIS2_ERROR_INVALID_TRANSPORT_PROTOCOL] =
        "Transport protocol is unsupported by axis2";
    axutil_error_messages[AXIS2_ERROR_NULL_BODY] =
        "No body present in the request or the response";
    axutil_error_messages[AXIS2_ERROR_NULL_CONFIGURATION_CONTEXT] =
        "A valid configuration context is required for the HTTP worker";
    axutil_error_messages[AXIS2_ERROR_NULL_HTTP_VERSION] =
        "HTTP version cannot be NULL in the status/request line";
    axutil_error_messages[AXIS2_ERROR_NULL_IN_STREAM_IN_MSG_CTX] =
        "Input stream is NULL in message context";
    axutil_error_messages[AXIS2_ERROR_NULL_OM_OUTPUT] = "OM output is NULL";
    axutil_error_messages[AXIS2_ERROR_NULL_SOAP_ENVELOPE_IN_MSG_CTX] =
        "NULL SOAP envelope in message context";
    axutil_error_messages[AXIS2_ERROR_NULL_STREAM_IN_CHUNKED_STREAM] =
        "NULL stream in the HTTP chucked stream";
    axutil_error_messages[AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY] =
        "NULL stream in the response body";
    axutil_error_messages[AXIS2_ERROR_NULL_URL] = "URL NULL in HTTP client";
    axutil_error_messages[AXIS2_ERROR_OUT_TRNSPORT_INFO_NULL] =
        "Transport information must be set in message context";
    axutil_error_messages[AXIS2_ERROR_RESPONSE_CONTENT_TYPE_MISSING] =
        "Content-Type header missing in HTTP response";
    axutil_error_messages[AXIS2_ERROR_RESPONSE_TIMED_OUT] =
        "Response timed out";
    axutil_error_messages[AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL] =
        "SOAP envelope or SOAP body NULL";
    axutil_error_messages[AXIS2_ERROR_SSL_ENGINE] =
        "Error occurred in SSL engine";
    axutil_error_messages[AXIS2_ERROR_SSL_NO_CA_FILE] =
        "Cannot find certificates";
    axutil_error_messages[AXIS2_ERROR_WRITING_RESPONSE] =
        "Error in writing the response in response writer";
    axutil_error_messages[AXIS2_ERROR_REQD_PARAM_MISSING] =
        "Required parameter is missing in URL encoded request";
    axutil_error_messages[AXIS2_ERROR_UNSUPPORTED_SCHEMA_TYPE] =
        " Unsupported schema type in REST";
    axutil_error_messages[AXIS2_ERROR_SVC_OR_OP_NOT_FOUND] =
        "Service or operation not found";
    /* mod_addr */

    /* platforms */

    /* utils */
    axutil_error_messages[AXIS2_ERROR_COULD_NOT_OPEN_FILE] =
        "Could not open the file";
    axutil_error_messages[AXIS2_ERROR_DLL_CREATE_FAILED] =
        "Failed in creating DLL";
    axutil_error_messages[AXIS2_ERROR_DLL_LOADING_FAILED] =
        "DLL loading failed";
    axutil_error_messages[AXIS2_ERROR_ENVIRONMENT_IS_NULL] =
        "Environment passed is NULL";
    axutil_error_messages[AXIS2_ERROR_FILE_NAME_NOT_SET] =
        "Axis2 File does not have a file name";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_DLL_DESC] =
        "DLL description has invalid state of not having valid DLL create function, \
        of valid delete function or valid dll_handler";
    axutil_error_messages[AXIS2_ERROR_HANDLER_CREATION_FAILED] =
        "Failed in creating Handler";
    axutil_error_messages[AXIS2_ERROR_INDEX_OUT_OF_BOUNDS] =
        "Array list index out of bounds";
    axutil_error_messages[AXIS2_ERROR_INVALID_ADDRESS] =
        "Invalid IP or hostname";
    axutil_error_messages[AXIS2_ERROR_INVALID_FD] =
        "Trying to do operation on invalid file descriptor";
    axutil_error_messages[AXIS2_ERROR_INVALID_SOCKET] =
        "Trying to do operation on closed/not opened socket";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_PARAM] =
        "Parameter not set";
    axutil_error_messages[AXIS2_ERROR_MODULE_CREATION_FAILED] =
        "Module create failed";
    axutil_error_messages[AXIS2_ERROR_MSG_RECV_CREATION_FAILED] =
        "Failed in creating Message Receiver";
    axutil_error_messages[AXIS2_ERROR_NO_SUCH_ELEMENT] = "No such element";
    axutil_error_messages[AXIS2_ERROR_SOCKET_BIND_FAILED] =
        "Socket bind failed. Another process may be already using this port";
    axutil_error_messages[AXIS2_ERROR_SOCKET_ERROR] =
        "Error creating a socket. Most probably error returned by OS";
    axutil_error_messages[AXIS2_ERROR_SOCKET_LISTEN_FAILED] =
        "Listen failed for the server socket";
    axutil_error_messages[AXIS2_ERROR_SVC_SKELETON_CREATION_FAILED] =
        "Failed in creating Service Skeleton";
    axutil_error_messages[AXIS2_ERROR_TRANSPORT_RECV_CREATION_FAILED] =
        "Failed in creating Transport Receiver";
    axutil_error_messages[AXIS2_ERROR_TRANSPORT_SENDER_CREATION_FAILED] =
        "Failed in creating Transport Sender";
    axutil_error_messages[AXIS2_ERROR_UUID_GEN_FAILED] =
        "Generation of platform dependent UUID failed";
    axutil_error_messages[AXIS2_ERROR_POSSIBLE_DEADLOCK] = "Possible deadlock";
    /* WSDL */
    axutil_error_messages
        [AXIS2_ERROR_INTERFACE_OR_PORT_TYPE_NOT_FOUND_FOR_THE_BINDING] =
        "Interface or Port Type not found for the binding";
    axutil_error_messages
        [AXIS2_ERROR_INTERFACES_OR_PORTS_NOT_FOUND_FOR_PARTIALLY_BUILT_WOM] =
        "Interfaces or Ports not found for the partially built WOM";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_WSDL_OP] =
        "WSDL operation accessed has invalid state";
    axutil_error_messages[AXIS2_ERROR_INVALID_STATE_WSDL_SVC] =
        "WSDL Service accessed has invalid state";
    axutil_error_messages[AXIS2_ERROR_MEP_CANNOT_DETERMINE_MEP] =
        "Cannot determine MEP";
    axutil_error_messages[AXIS2_ERROR_WSDL_BINDING_NAME_IS_REQUIRED] =
        "WSDL binding name is cannot be NULL";
    axutil_error_messages[AXIS2_ERROR_WSDL_INTERFACE_NAME_IS_REQUIRED] =
        "PortType/Interface name cannot be NULL";
    axutil_error_messages[AXIS2_ERROR_WSDL_PARSER_INVALID_STATE] =
        "WSDL parsing has resulted in an invalid state";
    axutil_error_messages[AXIS2_ERROR_WSDL_SVC_NAME_IS_REQUIRED] =
        "WSDL service name cannot be NULL";
    /* XML */

    /* XML:attachments */
    axutil_error_messages[AXIS2_ERROR_ATTACHMENT_MISSING] =
        "Attachment is missing";
    /* XML:om */
    axutil_error_messages[AXIS2_ERROR_BUILDER_DONE_CANNOT_PULL] =
        "XML builder done with pulling. Pull parser cannot pull any more";
    axutil_error_messages[AXIS2_ERROR_INVALID_BUILDER_STATE_CANNOT_DISCARD] =
        "Discard failed because the builder state is invalid";
    axutil_error_messages[AXIS2_ERROR_INVALID_BUILDER_STATE_LAST_NODE_NULL] =
        "Invalid builder state; Builder's last node is NULL";
    axutil_error_messages[AXIS2_ERROR_INVALID_DOCUMENT_STATE_ROOT_NULL] =
        "Invalid document state; Document root is NULL";
    axutil_error_messages
        [AXIS2_ERROR_INVALID_DOCUMENT_STATE_UNDEFINED_NAMESPACE] =
        "Undefined namespace used";
    axutil_error_messages[AXIS2_ERROR_INVALID_EMPTY_NAMESPACE_URI] =
        "Namespace should have a valid URI";
    axutil_error_messages
        [AXIS2_ERROR_ITERATOR_NEXT_METHOD_HAS_NOT_YET_BEEN_CALLED] =
        "Next method has not been called so cannot remove"
        "an element before calling next valid for any om iterator";
    axutil_error_messages[AXIS2_ERROR_ITERATOR_REMOVE_HAS_ALREADY_BEING_CALLED]
        = "Document root is NULL, when it is not supposed to be NULL";
    axutil_error_messages[AXIS2_ERROR_XML_READER_ELEMENT_NULL] =
        "AXIOM XML reader returned NULL element";
    axutil_error_messages[AXIS2_ERROR_XML_READER_VALUE_NULL] =
        "AXIOM XML reader returned NULL value";
    /* XML:parser */
    axutil_error_messages[AXIS2_ERROR_CREATING_XML_STREAM_READER] =
        "Error occurred creating XML stream reader";
    axutil_error_messages[AXIS2_ERROR_CREATING_XML_STREAM_WRITER] =
        "Error occurred creating XML stream writer";
    axutil_error_messages[AXIS2_ERROR_WRITING_ATTRIBUTE] =
        "Error in writing attribute";
    axutil_error_messages[AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE] =
        "Error in writing attribute with namespace";
    axutil_error_messages[AXIS2_ERROR_WRITING_ATTRIBUTE_WITH_NAMESPACE_PREFIX] =
        "Error in writing attribute with namespace prefix";
    axutil_error_messages[AXIS2_ERROR_WRITING_COMMENT] =
        "Error in writing comment";
    axutil_error_messages[AXIS2_ERROR_WRITING_DATA_SOURCE] =
        "Error in writing data source";
    axutil_error_messages[AXIS2_ERROR_WRITING_DEFAULT_NAMESPACE] =
        "Error in writing default namespace";
    axutil_error_messages[AXIS2_ERROR_WRITING_DTD] = "Error in writing DDT";
    axutil_error_messages[AXIS2_ERROR_WRITING_EMPTY_ELEMENT] =
        "Error occurred in writing empty element";
    axutil_error_messages[AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE] =
        "Error occurred in writing empty element with namespace";
    axutil_error_messages
        [AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX] =
        "Error in writing empty element with namespace prefix";
    axutil_error_messages[AXIS2_ERROR_WRITING_END_DOCUMENT] =
        "Error occurred in writing end document in XML writer";
    axutil_error_messages[AXIS2_ERROR_WRITING_END_ELEMENT] =
        "Error occurred in writing end element in XML writer";
    axutil_error_messages[AXIS2_ERROR_WRITING_PROCESSING_INSTRUCTION] =
        "Error in writing processing instruction";
    axutil_error_messages[AXIS2_ERROR_WRITING_START_DOCUMENT] =
        "Error occurred in writing start element in start document in XML writer";
    axutil_error_messages[AXIS2_ERROR_WRITING_START_ELEMENT] =
        "Error occurred in writing start element in XML writer";
    axutil_error_messages[AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE] =
        "Error occurred in writing start element with namespace in XML writer";
    axutil_error_messages
        [AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX] =
        "Error occurred in writing start element with namespace prefix";
    axutil_error_messages[AXIS2_ERROR_WRITING_CDATA] =
        "Error in writing CDATA section";
    axutil_error_messages[AXIS2_ERROR_XML_PARSER_INVALID_MEM_TYPE] =
        "AXIS2_XML_PARSER_TYPE_BUFFER or AXIS2_XML_PARSER_TYPE_DOC is expected";

    /* invalid type passed */
    axutil_error_messages[AXIS2_ERROR_INVALID_BASE_TYPE] =
        "Invalid base type passed";
    axutil_error_messages[AXIS2_ERROR_INVALID_SOAP_NAMESPACE_URI] =
        "Invalid SOAP namespace URI found";
    axutil_error_messages[AXIS2_ERROR_INVALID_SOAP_VERSION] =
        "Invalid SOAP version";
    axutil_error_messages[AXIS2_ERROR_INVALID_VALUE_FOUND_IN_MUST_UNDERSTAND] =
        "Invalid value found in must understand";
    axutil_error_messages[AXIS2_ERROR_MULTIPLE_CODE_ELEMENTS_ENCOUNTERED] =
        "Multiple  fault code elements encountered in SOAP fault";
    axutil_error_messages[AXIS2_ERROR_MULTIPLE_DETAIL_ELEMENTS_ENCOUNTERED] =
        "Multiple fault detail elements encountered in SOAP fault";
    axutil_error_messages[AXIS2_ERROR_MULTIPLE_NODE_ELEMENTS_ENCOUNTERED] =
        "Multiple fault node elements encountered in SOAP fault";
    axutil_error_messages[AXIS2_ERROR_MULTIPLE_REASON_ELEMENTS_ENCOUNTERED] =
        "Multiple fault reason elements encountered in SOAP fault";
    axutil_error_messages[AXIS2_ERROR_MULTIPLE_ROLE_ELEMENTS_ENCOUNTERED] =
        "Multiple fault role elements encountered in SOAP fault ";
    axutil_error_messages[AXIS2_ERROR_MULTIPLE_SUB_CODE_VALUES_ENCOUNTERED] =
        "Multiple fault sub-code value elements encountered";
    axutil_error_messages
        [AXIS2_ERROR_MULTIPLE_VALUE_ENCOUNTERED_IN_CODE_ELEMENT] =
        "Multiple fault value elements encountered";
    axutil_error_messages[AXIS2_ERROR_MUST_UNDERSTAND_SHOULD_BE_1_0_TRUE_FALSE]
        = "Must understand attribute should have a value of either true or false";
    axutil_error_messages[AXIS2_ERROR_OM_ELEMENT_EXPECTED] =
        "AXIOM element is expected";
    axutil_error_messages[AXIS2_ERROR_ONLY_CHARACTERS_ARE_ALLOWED_HERE] =
        "Processing SOAP 1.1 fault value element should have only"
        "text as its children";
    axutil_error_messages[AXIS2_ERROR_ONLY_ONE_SOAP_FAULT_ALLOWED_IN_BODY] =
        "Only one SOAP fault is allowed in SOAP body";
    axutil_error_messages
        [AXIS2_ERROR_SOAP11_FAULT_ACTOR_SHOULD_NOT_HAVE_CHILD_ELEMENTS] =
        "SOAP 1.1 fault actor should not have any child elements";
    axutil_error_messages
        [AXIS2_ERROR_SOAP_BUILDER_ENVELOPE_CAN_HAVE_ONLY_HEADER_AND_BODY] =
        "SOAP builder found a child element other than header or body in envelope"
        "element";
    axutil_error_messages[AXIS2_ERROR_SOAP_BUILDER_HEADER_BODY_WRONG_ORDER] =
        "SOAP builder encountered body element first and header next";
    axutil_error_messages
        [AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_BODY_ELEMENTS_ENCOUNTERED] =
        "SOAP builder multiple body elements encountered";
    axutil_error_messages[AXIS2_ERROR_SOAP_BUILDER_MULTIPLE_HEADERS_ENCOUNTERED]
        = "SOAP builder encountered multiple headers";
    axutil_error_messages[AXIS2_ERROR_SOAP_FAULT_CODE_DOES_NOT_HAVE_A_VALUE] =
        "SOAP fault code does not have a value";
    axutil_error_messages
        [AXIS2_ERROR_SOAP_FAULT_REASON_ELEMENT_SHOULD_HAVE_A_TEXT] =
        "SOAP fault reason element should have a text value";
    axutil_error_messages
        [AXIS2_ERROR_SOAP_FAULT_ROLE_ELEMENT_SHOULD_HAVE_A_TEXT] =
        "SOAP fault role element should have a text value";
    axutil_error_messages
        [AXIS2_ERROR_SOAP_FAULT_VALUE_SHOULD_BE_PRESENT_BEFORE_SUB_CODE] =
        "SOAP fault value should be present before sub-code element in SOAP fault code";
    axutil_error_messages[AXIS2_ERROR_SOAP_MESSAGE_DOES_NOT_CONTAIN_AN_ENVELOPE]
        = "SOAP message does not contain a SOAP envelope element";
    axutil_error_messages
        [AXIS2_ERROR_SOAP_MESSAGE_FIRST_ELEMENT_MUST_CONTAIN_LOCAL_NAME] =
        "SOAP message's first element should have a localname";
    axutil_error_messages
        [AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_REASON_ELEMENT]
        = "Localname not supported inside a reason element";
    axutil_error_messages
        [AXIS2_ERROR_THIS_LOCALNAME_IS_NOT_SUPPORTED_INSIDE_THE_SUB_CODE_ELEMENT]
        = "Localname not supported inside the sub-code element";
    axutil_error_messages
        [AXIS2_ERROR_THIS_LOCALNAME_NOT_SUPPORTED_INSIDE_THE_CODE_ELEMENT] =
        "Localname not supported inside the code element";
    axutil_error_messages
        [AXIS2_ERROR_TRANSPORT_LEVEL_INFORMATION_DOES_NOT_MATCH_WITH_SOAP] =
        "Transport identified SOAP version does not match with SOAP message version";
    axutil_error_messages[AXIS2_ERROR_UNSUPPORTED_ELEMENT_IN_SOAP_FAULT_ELEMENT]
        = "Unsupported element found in SOAP fault element";
    axutil_error_messages[AXIS2_ERROR_WRONG_ELEMENT_ORDER_ENCOUNTERED] =
        "Wrong element order encountered ";
    /* services */
    axutil_error_messages[AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST] =
        "Invalid XML format in request";
    axutil_error_messages[AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL] =
        "Input OM node NULL, Probably error in SOAP request";
    axutil_error_messages
        [AXIS2_ERROR_SVC_SKEL_INVALID_OPERATION_PARAMETERS_IN_SOAP_REQUEST] =
        "Invalid parameters for service operation in SOAP request";

    axutil_error_messages[AXIS2_ERROR_WSDL_SCHEMA_IS_NULL] = "Schema is NULL";

    /* repos */
    axutil_error_messages[AXIS2_ERROR_REPOS_NOT_AUTHENTICATED] =
        "Not authenticated";
    axutil_error_messages[AXIS2_ERROR_REPOS_UNSUPPORTED_MODE] =
        "Unsupported mode";
    axutil_error_messages[AXIS2_ERROR_REPOS_EXPIRED] = "Expired";
    axutil_error_messages[AXIS2_ERROR_REPOS_NOT_IMPLEMENTED] =
        "Not implemented";
    axutil_error_messages[AXIS2_ERROR_REPOS_NOT_FOUND] = "Not found";
    axutil_error_messages[AXIS2_ERROR_REPOS_BAD_SEARCH_TEXT] =
        "Bad search text";

    /* neethi */
    axutil_error_messages[AXIS2_ERROR_NEETHI_ELEMENT_WITH_NO_NAMESPACE] =
        "Element with no namespace";
    axutil_error_messages
        [AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED_FROM_ELEMENT] =
        "Policy creation failed from element";
    axutil_error_messages[AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED_FROM_ELEMENT] =
        "All creation failed from element";
    axutil_error_messages
        [AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED_FROM_ELEMENT] =
        "Exactly one creation failed from element";
    axutil_error_messages
        [AXIS2_ERROR_NEETHI_REFERENCE_CREATION_FAILED_FROM_ELEMENT] =
        "Reference creation failed from element";
    axutil_error_messages
        [AXIS2_ERROR_NEETHI_ASSERTION_CREATION_FAILED_FROM_ELEMENT] =
        "Assertion creation failed from element";
    axutil_error_messages[AXIS2_ERROR_NEETHI_ALL_CREATION_FAILED] =
        "All creation failed";
    axutil_error_messages[AXIS2_ERROR_NEETHI_EXACTLYONE_CREATION_FAILED] =
        "Exactly one creation failed";
    axutil_error_messages[AXIS2_ERROR_NEETHI_POLICY_CREATION_FAILED] =
        "Policy creation failed";
    axutil_error_messages[AXIS2_ERROR_NEETHI_NORMALIZATION_FAILED] =
        "Normalization failed";
    axutil_error_messages[AXIS2_ERROR_NEETHI_WRONG_INPUT_FOR_MERGE] =
        "Wrong input for merge";
    axutil_error_messages[AXIS2_ERROR_NEETHI_CROSS_PRODUCT_FAILED] =
        "Cross product failed";
    axutil_error_messages[AXIS2_ERROR_NEETHI_NO_CHILDREN_POLICY_COMPONENTS] =
        "No children policy components";
    axutil_error_messages[AXIS2_ERROR_NEETHI_URI_NOT_SPECIFIED] =
        "Reference URI not specified";
    axutil_error_messages[AXIS2_ERROR_NEETHI_NO_ENTRY_FOR_THE_GIVEN_URI] =
        "No entry for the given URI";
    axutil_error_messages
        [AXIS2_ERROR_NEETHI_EXACTLYONE_NOT_FOUND_IN_NORMALIZED_POLICY] =
        "Exactly one not found in normalized policy";
    axutil_error_messages[AXIS2_ERROR_NEETHI_EXACTLYONE_IS_EMPTY] =
        "Exactly one is empty";
    axutil_error_messages
        [AXIS2_ERROR_NEETHI_ALL_NOT_FOUND_WHILE_GETTING_CROSS_PRODUCT] =
        "All not found while getting cross product";
    axutil_error_messages[AXIS2_ERROR_NEETHI_UNKNOWN_ASSERTION] = 
        "Unknown Assertion";

    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axutil_error_t *AXIS2_CALL
axutil_error_create(
    axutil_allocator_t * allocator)
{
    axutil_error_t *error;
    if (!allocator)
        return NULL;

    error = (axutil_error_t *) AXIS2_MALLOC(allocator, sizeof(axutil_error_t));
    memset(error, 0,  sizeof(axutil_error_t));

    if (!error)
        return NULL;

    error->allocator = allocator;

    return error;
}

AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
axutil_error_get_message(
    const axutil_error_t * error)
{
    const axis2_char_t *message = NULL;
    if (error)
    {
        if (error->error_number > AXIS2_ERROR_NONE &&
            error->error_number < AXUTIL_ERROR_MAX) /* TODO; This needs to be 
            fixed to include module defined and user defined errors */
            message = axutil_error_messages[error->error_number];
        else
        {
            if (error->message)
                message = error->message;
            else if (error->error_number == AXIS2_ERROR_NONE)
                message = axutil_error_messages[AXIS2_ERROR_NONE];
            else
                message =
                    "Undefined error returned by business logic implementation";
        }
    }

    return message;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_error_set_error_number(
    axutil_error_t * error,
    axutil_error_codes_t error_number)
{
    if (!error)
        return AXIS2_FAILURE;
    error->error_number = error_number;
    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_error_set_status_code(
    axutil_error_t * error,
    axis2_status_codes_t status_code)
{
    if (!error)
        return AXIS2_FAILURE;
    error->status_code = status_code;
    return AXIS2_SUCCESS;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_error_get_status_code(
    axutil_error_t * error)
{
    if (error)
        return error->status_code;
    else
        return AXIS2_CRITICAL_FAILURE;
}

AXIS2_EXTERN axis2_status_t AXIS2_CALL
axutil_error_set_error_message(
    axutil_error_t * error,
    axis2_char_t * message)
{
    if (message && error)
    {
        error->message = message;
        return AXIS2_SUCCESS;
    }
    
    return AXIS2_FAILURE;
}

AXIS2_EXTERN void AXIS2_CALL
axutil_error_free(
    axutil_error_t * error)
{
    if (error)
    {
        AXIS2_FREE(error->allocator, error);
    }
    return;
}


