Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members   Examples  

SoapDeSerializer.h

00001 /*
00002  *   Copyright 2003-2004 The Apache Software Foundation.
00003  *
00004  *   Licensed under the Apache License, Version 2.0 (the "License");
00005  *   you may not use this file except in compliance with the License.
00006  *   You may obtain a copy of the License at
00007  *
00008  *       http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  *   Unless required by applicable law or agreed to in writing, software
00011  *   distributed under the License is distributed on an "AS IS" BASIS,
00012  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  *   See the License for the specific language governing permissions and
00014  *   limitations under the License.
00015  */
00016 
00017 #if !defined(_SOAPDESERIALIZER_H____OF_AXIS_INCLUDED_)
00018 #define _SOAPDESERIALIZER_H____OF_AXIS_INCLUDED_
00019 
00020 #include "IHandlerSoapDeSerializer.h"
00021 #include "HeaderBlock.h"
00022 #include "XMLParser.h"
00023 
00024 class SoapFault;
00025 class SoapMethod;
00026 class SoapBody;
00027 class SoapEnvelope;
00028 class SoapHeader;
00029 class IHeaderBlock;
00030 
00031 /*
00032  *  @class SoapDeSerializer
00033  *  @brief interface for the SoapDeSerializer class.
00034  *  @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
00035  */
00036 class SoapDeSerializer : public IHandlerSoapDeSerializer
00037 {
00038 private:
00039     SoapEnvelope* m_pEnv;
00040     SoapHeader* m_pHeader;
00041     XMLParser* m_pParser;
00042     /* Current Serialization Style */
00043     AXIS_BINDING_STYLE m_nStyle;
00044     /* Last procesed node needed when the attributes are processed */
00045     const AnyElement* m_pCurrNode;
00046     const AnyElement* m_pNode;
00047     SOAP_VERSION m_nSoapVersion;
00048     AxisChar* m_pEndptr; 
00049     /* used as a parameter to strtoXX conversion functionss */
00050     int m_nStatus;
00051     /* Provider type of current service that uses this DeSerializer object */
00052     PROVIDERTYPE m_ProviderType;
00053     char* m_pcFaultDetail;
00054     SOAPTransport* m_pInputStream;
00055 
00056 private:
00057     int AXISCALL getArraySize(const AnyElement* pElement);
00058     int getBody();
00059 public:
00060     int init();
00061     int getVersion();
00062     SoapEnvelope* getEnvelope();
00063     int getHeader();
00064     int flushInputStream();
00065     PROVIDERTYPE getCurrentProviderType() { return m_ProviderType;};
00066     void setCurrentProviderType(PROVIDERTYPE nType) { m_ProviderType = nType;};
00067     /*
00068      * Methods to manipulate entire body when the body is compressed or 
00069      * encrypted 
00070      * These functions are provided for handlers to manipulate entire soap body.
00071      */
00072     xsd__hexBinary AXISCALL getBodyAsHexBinary();
00073     xsd__base64Binary AXISCALL getBodyAsBase64Binary();
00074     int AXISCALL setNewSoapBody(AxisChar* pNewSoapBody);
00075     bool isAnyMustUnderstandHeadersLeft();
00076     int getFault();
00077     int AXISCALL checkMessageBody(const AxisChar* pName, 
00078         const AxisChar* pNamespace);
00079     void* AXISCALL checkForFault(const AxisChar* pName, 
00080         const AxisChar* pNamespace);
00081     /* to get any header blocks left in the Deserializer */
00082     HeaderBlock* getHeaderBlock();
00083     /* to add a header block to the Deserializer. Probably a handler */
00084     int AXISCALL addHeaderBlock(IHeaderBlock* pBlk);
00085     /* to get a named header blcok from the Deserializer */
00086     IHeaderBlock* getHeaderBlock(const AxisChar* pName, 
00087         const AxisChar* pNamespace);
00088     int setInputStream(SOAPTransport* pInputStream);
00089     SoapDeSerializer();
00090     virtual ~SoapDeSerializer();
00091     /* Method used by wrappers to get a deserialized Array of complex types */
00092     Axis_Array AXISCALL getCmplxArray(void* pDZFunct, void* pCreFunct, 
00093         void* pDelFunct, void* pSizeFunct, const AxisChar* pName, 
00094         const AxisChar* pNamespace);
00095     /* Method used by wrappers to get a deserialized Array of basic types */
00096     Axis_Array AXISCALL getBasicArray(XSDTYPE nType, const AxisChar* pName, 
00097         const AxisChar* pNamespace);
00098     /* Method used by wrappers to get a deserialized single 
00099      * object of complex type 
00100      */
00101     void* AXISCALL getCmplxObject(void* pDZFunct, void* pCreFunct, 
00102         void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
00103 
00104     const char* AXISCALL getCmplxFaultObjectName();
00105     void* AXISCALL getCmplxFaultObject(void* pDZFunct, void* pCreFunct,
00106         void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
00107     
00108     /* Methods used by wrappers to get a deserialized value of basic types */
00109     int AXISCALL getElementAsInt(const AxisChar* pName, 
00110         const AxisChar* pNamespace);
00111     int AXISCALL getFaultDetail(char** ppcDetail);
00112     xsd__boolean AXISCALL getElementAsBoolean(const AxisChar* pName, 
00113         const AxisChar* pNamespace);
00114     unsigned int AXISCALL getElementAsUnsignedInt(const AxisChar* pName, 
00115         const AxisChar* pNamespace);
00116     short AXISCALL getElementAsShort(const AxisChar* pName, 
00117         const AxisChar* pNamespace);
00118     unsigned short AXISCALL getElementAsUnsignedShort(const AxisChar* pName, 
00119         const AxisChar* pNamespace);
00120     char AXISCALL getElementAsByte(const AxisChar* pName, 
00121         const AxisChar* pNamespace);
00122     unsigned char AXISCALL getElementAsUnsignedByte(const AxisChar* pName, 
00123         const AxisChar* pNamespace);
00124     long AXISCALL getElementAsLong(const AxisChar* pName, 
00125         const AxisChar* pNamespace);
00126     long AXISCALL getElementAsInteger(const AxisChar* pName, 
00127         const AxisChar* pNamespace);
00128     unsigned long AXISCALL getElementAsUnsignedLong(const AxisChar* pName, 
00129         const AxisChar* pNamespace);
00130     float AXISCALL getElementAsFloat(const AxisChar* pName, 
00131         const AxisChar* pNamespace);
00132     double AXISCALL getElementAsDouble(const AxisChar* pName, 
00133         const AxisChar* pNamespace);
00134     double AXISCALL getElementAsDecimal(const AxisChar* pName, 
00135         const AxisChar* pNamespace);
00136     AxisChar* AXISCALL getElementAsString(const AxisChar* pName, 
00137         const AxisChar* pNamespace);
00138     AxisChar* AXISCALL getElementAsAnyURI(const AxisChar* pName, 
00139         const AxisChar* pNamespace);
00140     AxisChar* AXISCALL getElementAsQName(const AxisChar* pName, 
00141         const AxisChar* pNamespace);
00142     xsd__hexBinary AXISCALL getElementAsHexBinary(const AxisChar* pName, 
00143         const AxisChar* pNamespace);
00144     xsd__base64Binary AXISCALL getElementAsBase64Binary(const AxisChar* pName, 
00145         const AxisChar* pNamespace);
00146     struct tm AXISCALL getElementAsDateTime(const AxisChar* pName, 
00147         const AxisChar* pNamespace);
00148     struct tm AXISCALL getElementAsDate(const AxisChar* pName, 
00149         const AxisChar* pNamespace);
00150     struct tm AXISCALL getElementAsTime(const AxisChar* pName, 
00151         const AxisChar* pNamespace);
00152     long AXISCALL getElementAsDuration(const AxisChar* pName, 
00153         const AxisChar* pNamespace);
00154 
00155     int AXISCALL getAttributeAsInt(const AxisChar* pName, 
00156         const AxisChar* pNamespace);
00157     xsd__boolean AXISCALL getAttributeAsBoolean(const AxisChar* pName, 
00158         const AxisChar* pNamespace);
00159     unsigned int AXISCALL getAttributeAsUnsignedInt(const AxisChar* pName, 
00160         const AxisChar* pNamespace);
00161     short AXISCALL getAttributeAsShort(const AxisChar* pName, 
00162         const AxisChar* pNamespace);
00163     unsigned short AXISCALL getAttributeAsUnsignedShort(const AxisChar* pName, 
00164         const AxisChar* pNamespace);
00165     char AXISCALL getAttributeAsByte(const AxisChar* pName, 
00166         const AxisChar* pNamespace);
00167     unsigned char AXISCALL getAttributeAsUnsignedByte(const AxisChar* pName, 
00168         const AxisChar* pNamespace);
00169     long AXISCALL getAttributeAsLong(const AxisChar* pName, 
00170         const AxisChar* pNamespace);
00171     long AXISCALL getAttributeAsInteger(const AxisChar* pName, 
00172         const AxisChar* pNamespace);
00173     unsigned long AXISCALL getAttributeAsUnsignedLong(const AxisChar* pName, 
00174         const AxisChar* pNamespace);
00175     float AXISCALL getAttributeAsFloat(const AxisChar* pName, 
00176         const AxisChar* pNamespace);
00177     double AXISCALL getAttributeAsDouble(const AxisChar* pName, 
00178         const AxisChar* pNamespace);
00179     double AXISCALL getAttributeAsDecimal(const AxisChar* pName, 
00180         const AxisChar* pNamespace);
00181     AxisChar* AXISCALL getAttributeAsString(const AxisChar* pName, 
00182         const AxisChar* pNamespace);
00183     AxisChar* AXISCALL getAttributeAsAnyURI(const AxisChar* pName, 
00184         const AxisChar* pNamespace);
00185     AxisChar* AXISCALL getAttributeAsQName(const AxisChar* pName, 
00186         const AxisChar* pNamespace);
00187     xsd__hexBinary AXISCALL getAttributeAsHexBinary(const AxisChar* pName, 
00188         const AxisChar* pNamespace);
00189     xsd__base64Binary AXISCALL getAttributeAsBase64Binary
00190         (const AxisChar* pName, const AxisChar* pNamespace);
00191     struct tm AXISCALL getAttributeAsDateTime(const AxisChar* pName, 
00192         const AxisChar* pNamespace);
00193     struct tm AXISCALL getAttributeAsDate(const AxisChar* pName, 
00194         const AxisChar* pNamespace);
00195     struct tm AXISCALL getAttributeAsTime(const AxisChar* pName, 
00196         const AxisChar* pNamespace);
00197     long AXISCALL getAttributeAsDuration(const AxisChar* pName, 
00198         const AxisChar* pNamespace);
00199     
00200 /*    void* CreateArray(XSDTYPE nType, int nSize); */
00201 /*    void DeleteArray(Axis_Array* pArray , XSDTYPE nType); */
00202     void setStyle(AXIS_BINDING_STYLE nStyle){ m_nStyle = nStyle;};
00203     AXIS_BINDING_STYLE getStyle(){return m_nStyle;};    
00204     XSDTYPE getXSDType(const AnyElement* pElement);
00205     int AXISCALL getStatus(){return m_nStatus;};
00206         AnyType* AXISCALL getAnyObject();
00207     void serializeTag(AxisString& xmlStr, const AnyElement* node, AxisString& nsDecls);
00208 
00209 private:
00210     int getElementForAttributes(const AxisChar* pName, 
00211         const AxisChar* pNamespace);
00212     xsd__base64Binary decodeFromBase64Binary(const AxisChar* pValue);
00213     xsd__hexBinary decodeFromHexBinary(const AxisChar* pValue);
00214 };
00215 
00216 #endif 
00217 

Generated on Fri Jul 9 13:18:29 2004 for AxisC++ by doxygen1.2.18