/*
 * Copyright 2004,2005 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.ws.commons.soap;


public interface SOAP11Constants extends SOAPConstants {
    /**
     * Eran Chinthaka (chinthaka@apache.org)
     */
    public static final String SOAP_ENVELOPE_NAMESPACE_URI = "http://schemas.xmlsoap.org/soap/envelope/";

    /**
     * Field ATTR_ACTOR
     */
    public static final String ATTR_ACTOR = "actor";

    /**
     * Field SOAP_FAULT_CODE_LOCAL_NAME
     */
    public static final String SOAP_FAULT_CODE_LOCAL_NAME = "faultcode";
    /**
     * Field SOAP_FAULT_STRING_LOCAL_NAME
     */
    public static final String SOAP_FAULT_STRING_LOCAL_NAME = "faultstring";
    /**
     * Field SOAP_FAULT_ACTOR_LOCAL_NAME
     */
    public static final String SOAP_FAULT_ACTOR_LOCAL_NAME = "faultactor";

    public static final String SOAP_FAULT_DETAIL_LOCAL_NAME = "detail";

    //SOAP 1.2 Content Type
    public static final String SOAP_11_CONTENT_TYPE = "text/xml";

     // -------- SOAP Fault Codes ------------------------------
    public static final String FAULT_CODE_SENDER = "Client";
    public static final String FAULT_CODE_RECEIVER = "Server";

    public static final String SOAP_ACTOR_NEXT = "http://schemas.xmlsoap.org/soap/actor/next";
}
