/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 2001 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsISupports.idl" interface nsISchemaType; interface nsIDOMElement; interface nsISOAPEncoder; interface nsISOAPDecoder; interface nsISOAPMessage; interface nsIVariant; interface nsISOAPAttachments; interface nsISchemaCollection; interface nsISOAPEncoding; /** * This interface provides access to a collection of SOAP encodings * and schemas. The registry is owned by an encoding. */ [scriptable, uuid(9fe91a61-3048-40e3-99ef-e39ab946ae0b)] interface nsISOAPEncodingRegistry : nsISupports { /** * Get an associated encoding for a different encoding style. If * there is no default associated encoding available for the * specified encoding style, then if aCreateIf is specified, one * is created, otherwise a null is returned. Associated encodings * are the set of encodings that may be used and modified together * as a set. * * @param aStyleURI The style URI of the associated encoding. * * @param aCreateIf If true, then create the associated encoding if it * does not already exist, otherwise return the existing encoding. * * @return The associated encoding which corresponds to the * specified styleURI, or null if the spefied alternative encoding * does not exist and it was not requested that it be created. */ nsISOAPEncoding getAssociatedEncoding(in AString aStyleURI, in boolean aCreateIf); /** * The schema collection used by the owning encoding and all * associated encodings. */ attribute nsISchemaCollection schemaCollection; }; /** * This interface keeps track of the current encoding style and * how objects should be encoded or decoded, as well as all * associated encodings. *

While two different nsSOAPCalls may have an encoding * for the same styleURI, by default the encoding object and all * associated encoding objects are local do not affect other * calls because the encodings are local and not associated, * unless the same or associated encodings are explicitly set * on multiple calls. When a call is invoked, the same encoding * object is automatically set on the response message so that * decoders registered on the call encoding are automatically * applied to the response. */ [scriptable, uuid(9ae49600-1dd1-11b2-877f-e62f620c5e92)] interface nsISOAPEncoding : nsISupports { /** * The name of the encoding as it is known to SOAP. */ readonly attribute AString styleURI; /** * Get an associated encoding for a different encoding style. If * there is no default associated encoding available for the * specified encoding style, then if aCreateIf is specified, one * is created, otherwise a null is returned. Associated encodings * are the set of encodings that may be used and modified together * as a set. * * @param aStyleURI The style URI of the associated encoding. * * @param aCreateIf If true, then create the associated encoding if it * does not already exist, otherwise return the existing encoding. * * @return The associated encoding which corresponds to the * specified styleURI, or null if the spefied alternative encoding * does not exist and it was not requested that it be created. */ nsISOAPEncoding getAssociatedEncoding(in AString aStyleURI, in boolean aCreateIf); /** * Set an encoder in the encoding. * * @param aKey The key to be associated with the encoder. * * @param aEncoder The encoder to be specified or null to eliminate * the encoder. */ void setEncoder(in AString aKey, in nsISOAPEncoder aEncoder); /** * Get an encoder from the encoding. * * @param aKey The key to be used to look up the encoder. * * @return The encoder. */ nsISOAPEncoder getEncoder(in AString aKey); /** * Set a decoder in the encoding. * * @param aKey The key to be associated with the decoder. * * @param aDecoder The decoder to be specified or null to eliminate * the decoder. */ void setDecoder(in AString aKey, in nsISOAPDecoder aDecoder); /** * Get a decoder from the encoding. * * @param aKey The key to be used to look up the decoder. * * @return The decoder. */ nsISOAPDecoder getDecoder(in AString aKey); /** * The default encoder invoked by all encoding calls. Appropriate calls * to more-specific encoders, if any, must be dispatched by this default * encoder. The default encoder typically looks up encoders by known * information such as explicit or implicit types. */ attribute nsISOAPEncoder defaultEncoder; /** * The default decoder invoked by all encoding calls. Appropriate calls * to more-specific decoders, if any, must be dispatched by this default * decoder. The default decoder typically looks up encoders by known * information such as explicit or implicit types. */ attribute nsISOAPDecoder defaultDecoder; /** * The schema collection used by this and all associated encodings. */ attribute nsISchemaCollection schemaCollection; /** * Encode the source variant * * @param aEncodings The encodings to be used. * * @param aEncodingStyleURI The encoding style * * @param aSource The variant to be encoded, soon to become a variant * * @param aNamespaceURI The namespace of the thing being coded * * @param aName The name of the thing being coded * * @param aSchemaType The schema type of the thing being encoded * * @param aDestination The node scope where the result will live. * * @param aAttachments Accumulates any attachments. * * @return The element which was inserted and encoded. */ nsIDOMElement encode(in nsIVariant aSource, in AString aNamespaceURI, in AString aName, in nsISchemaType aSchemaType, in nsISOAPAttachments aAttachments, in nsIDOMElement aDestination); /** * Decode the source DOM node * * @param aEncodings The encodings used to decode * * @param aEncodingStyleURI The encoding style * * @param aSource The DOM node to be decoded. * * @param aSchemaType The schema type of the source DOM node * * @param aAttachments Dispenses any attachments. * * @return The decoded variant, soon to become a variant, which is null if * the operation failed or did not return a result. */ nsIVariant decode(in nsIDOMElement aSource, in nsISchemaType aSchemaType, in nsISOAPAttachments aAttachments); /** * Map an external schema URI to an internal one. In an * ideal world, we don't need this, but schemas change URIs, * and we wind up with inconsistencies between WSDL and * exchanged documents. The external URI must not be * currently mapped and if output mapping is true, then * the internal URI must be unique for output mapping. * * @param aExternalURI the external URI to be mapped. * * @param aInternalURI the internal URI to be mapped. * * @param aOutput If true, then re-map to the output * URI when outputting. * * @return boolean true if succeeded, false if the * mapping was not unique as required. */ boolean mapSchemaURI(in AString aExternalURI, in AString aInternalURI, in boolean aOutput); /** * Unmap an external schema URI as mapped by * mapSchemaURI. * * @param aExternalURI the external URI to be mapped. * * @return boolean true if succeeded, false if the * mapping did not exist. */ boolean unmapSchemaURI(in AString aExternalURI); /** * Get an internal schema URI from an external one. * * @param aExternalURI the external URI which may * have been mapped. * * @return The corresponding internal URI (the * original is returned if it has not been mapped). */ AString getInternalSchemaURI(in AString aExternalURI); /** * Get an external schema URI from an internal one. * * @param aExternalURI the external URI which may * have been mapped. * * @return The corresponding internal URI (the * original is returned if it has not been mapped). */ AString getExternalSchemaURI(in AString aInternalURI); }; %{C++ #define NS_SOAPENCODING_CID \ { /* db612ec6-1dd1-11b2-a8bc-e6777bf70a30 */ \ 0xdb612ec6, 0x1dd1, 0x11b2, \ {0xa8, 0xbc, 0xe6, 0x77, 0x7b, 0xf7, 0x0a, 0x30} } #define NS_SOAPENCODING_CONTRACTID \ "@mozilla.org/xmlextras/soap/encoding;1" #define NS_SOAPENCODING_CONTRACTID_PREFIX \ NS_SOAPENCODING_CONTRACTID "?uri=" #define NS_DEFAULTSOAPENCODING_1_1_CID \ { /* 06fb035c-1dd2-11b2-bc30-f6d8e314d6b9 */ \ 0x06fb035c, 0x1dd2, 0x11b2, \ {0xbc, 0x30, 0xf6, 0xd8, 0xe3, 0x14, 0xd6, 0xb9} } #define NS_DEFAULTSOAPENCODING_1_1_CONTRACTID \ NS_SOAPENCODING_CONTRACTID_PREFIX "http://schemas.xmlsoap.org/soap/encoding/" #define NS_DEFAULTSOAPENCODING_1_2_CID \ { /* e0ee4044-1dd1-11b2-9d7e-8899d4d89648 */ \ 0xe0ee4044, 0x1dd1, 0x11b2, \ {0x9d, 0x7e, 0x88, 0x99, 0xd4, 0xd8, 0x96, 0x48} } #define NS_DEFAULTSOAPENCODING_1_2_CONTRACTID \ NS_SOAPENCODING_CONTRACTID_PREFIX "http://www.w3.org/2001/09/soap-encoding" %}