webservices/wsmessages/src/sensoapfault2.cpp
changeset 0 62f9d29f7211
child 23 a1df79fa35b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsmessages/src/sensoapfault2.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:          
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+/*******************************************************
+ *     SOAP 1.1    |             SOAP 1.2              *
+ *-----------------------------------------------------*
+ *  env:Fault      | env:Fault                         *
+ *-----------------------------------------------------*
+ *  faultcode      | env:Code, env:Subcode, env:Value  *
+ *-----------------------------------------------------*
+ *  faultstring    | env:Reason, env:Text              *
+ *-----------------------------------------------------*
+ *  faultactor     | env:Node, (env:Role)              *
+ *-----------------------------------------------------*
+ *  detail         | env:Detail                        *
+ *******************************************************/
+ 
+/****************************************************************************
+ *                            SOAP 1.2 Example                              *
+ ****************************************************************************
+ *                                                                          *
+ * <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"        *
+ *               xmlns:m="http://www.example.org/timeouts"                  *
+ *               xmlns:xml="http://www.w3.org/XML/1998/namespace">          *
+ *  <env:Body>                                                              *
+ *   <env:Fault>                                                            *
+ *    <env:Code>                                                            *
+ *      <env:Value>env:Sender</env:Value>                                   *
+ *      <env:Subcode>                                                       *
+ *       <env:Value>m:MessageTimeout</env:Value>                            *
+ *      </env:Subcode>                                                      *
+ *    </env:Code>                                                           *
+ *    <env:Reason>                                                          *
+ *      <env:Text xml:lang="en">Sender Timeout</env:Text>                   *
+ *    </env:Reason>                                                         *
+ *    <env:Node>http://MyServer:80/sql</env:Node>                           *
+ *    <env:Role>http://schemas.microsoft.com/sqlserver/2004/SOAP</env:Role> *
+ *    <env:Detail>                                                          *
+ *      <m:MaxTime>P5M</m:MaxTime>                                          *
+ *    </env:Detail>                                                         *
+ *   </env:Fault>                                                           *
+ *  </env:Body>                                                             *
+ * </env:Envelope>                                                          *
+ *                                                                          *
+ ****************************************************************************/ 
+
+/****************************************************************************
+ *                   SOAP (older than 1.2) Example                          *
+ ****************************************************************************
+ *                                                                          *
+ * <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"      *
+ *       env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">     *
+ *  <env:Body>                                                              *
+ *   <env:Fault>                                                            *
+ *    <faultcode>env:MustUnderstand</faultcode>                             *
+ *    <faultstring>Mandatory Header error.</faultstring>                    *
+ *    <faultactor>http://www.wrox.com/heroes/endpoint.asp</faultactor>      *
+ *    <detail>                                                              *
+ *     <w:source xmlns:w="http://www.wrox.com/">                            *
+ *      <module>endpoint.asp</module>                                       *
+ *      <line>203</line>                                                    *
+ *     </w:source>                                                          *
+ *    </detail>                                                             *
+ *   </env:Fault>                                                           *
+ *  </env:Body>                                                             *
+ * </env:Envelope>                                                          *
+ *                                                                          *
+ ****************************************************************************/ 
+
+// INCLUDE FILES
+#include "SenSoapFault2.h"
+#include "SenSoapEnvelope2.h"
+
+#include <xmlengnodelist.h>
+
+EXPORT_C CSenSoapFault2* CSenSoapFault2::NewL(
+                                        const TDesC8& aNsUri,
+                                        const TDesC8& aLocalName,
+                                        const TDesC8& aPrefix,
+                                        const RAttributeArray& aAttributes,
+                                        TXmlEngElement& aElement,
+                                        RSenDocument& aDocument)
+    {
+    CSenSoapFault2* pNew = new (ELeave) CSenSoapFault2;
+    CleanupStack::PushL(pNew);
+	pNew->ConstructL(aNsUri, aLocalName, aPrefix, aAttributes,
+	                 aElement, aDocument);
+    CleanupStack::Pop(pNew);
+    return pNew;
+    }
+
+EXPORT_C CSenSoapFault2* CSenSoapFault2::NewL(TXmlEngElement& aElement)
+    {
+    CSenSoapFault2* pNew = new (ELeave) CSenSoapFault2;
+    CleanupStack::PushL(pNew);
+	pNew->ConstructL(aElement);
+    CleanupStack::Pop(pNew);
+    return pNew;
+    }
+
+EXPORT_C CSenSoapFault2* CSenSoapFault2::NewL(TXmlEngElement& aElement,
+                                              RSenDocument& aDocument)
+    {
+    CSenSoapFault2* pNew = new (ELeave) CSenSoapFault2;
+    CleanupStack::PushL(pNew);
+	pNew->ConstructL(aElement, aDocument);
+    CleanupStack::Pop(pNew);
+    return pNew;
+    }
+
+EXPORT_C CSenSoapFault2::~CSenSoapFault2()
+    {
+    }
+
+EXPORT_C CSenSoapFault2::CSenSoapFault2()
+	{
+	}
+
+EXPORT_C void CSenSoapFault2::ConstructL(TXmlEngElement& aElement)
+	{
+	BaseConstructL(aElement);
+	}
+
+EXPORT_C void CSenSoapFault2::ConstructL(TXmlEngElement& aElement,
+                                         RSenDocument& aDocument)
+	{
+    iDocument = aDocument.Copy();
+    iElement = aElement;
+	}
+
+EXPORT_C void CSenSoapFault2::ConstructL(const TDesC8& aNsUri,
+							 const TDesC8& aLocalName,
+							 const TDesC8& aPrefix,
+							 const RAttributeArray& aAttributes,
+							 TXmlEngElement& aElement,
+							 RSenDocument& aDocument)
+	{
+	BaseConstructL(aNsUri, aLocalName, aPrefix, aAttributes,
+	               aElement, aDocument);
+	}
+	
+EXPORT_C TPtrC8 CSenSoapFault2::FaultCode()
+	{
+	TInt err(KErrNone);
+	TXmlEngElement element;
+	TXmlEngElement* pElement = NULL;
+	TRAP( 
+	    err, 
+	    element = AsElementL();
+	    pElement = &(element);
+	    )
+    if( !err && pElement )
+        {
+    	TXmlEngNamespace ns = pElement->NamespaceDeclaration();
+        if ( ns.Uri() != KSenSoap12EnvelopeXmlns)
+    		{
+            RXmlEngNodeList<TXmlEngElement> list;
+            TRAP( err, pElement->GetElementsByTagNameL(list, KFaultCodeLocalname); )
+            if ( !err && list.HasNext() )
+                {
+                TXmlEngElement child = list.Next();
+   	            list.Close();
+                return child.Text();
+                }
+            list.Close();
+    		}
+            
+        else
+    		{
+            RXmlEngNodeList<TXmlEngElement> list1;
+            TRAP( err, pElement->GetElementsByTagNameL( list1, KFault12CodeLocalname, NsUri() ); )
+            if ( !err && list1.HasNext() )
+                {
+                TXmlEngElement child = list1.Next();
+                RXmlEngNodeList<TXmlEngElement> list2;
+                TRAP( err, child.GetElementsByTagNameL( list2, KFault12ValueLocalname, NsUri()); )
+                if ( !err && list2.HasNext() )
+                    {
+                    TXmlEngElement value = list2.Next();
+                    list2.Close();
+                    list1.Close();
+                    return value.Text();
+                    }
+                list2.Close();
+    			}
+    	    list1.Close();
+    		}
+        }		
+        
+    return KNullDesC8();
+
+	}
+
+EXPORT_C TPtrC8 CSenSoapFault2::FaultSubcode()
+	{
+	TInt err( KErrNone );
+	TXmlEngElement element;
+	TXmlEngElement* pElement = NULL;
+	TRAP( 
+	    err, 
+	    element = AsElementL();
+	    pElement = &(element);
+	    )
+	if( !err && pElement)
+	    {
+    	TXmlEngNamespace ns = pElement->NamespaceDeclaration();
+        if ( ns.Uri() == KSenSoap12EnvelopeXmlns)
+            {
+            RXmlEngNodeList<TXmlEngElement> list1;
+            TRAP( err, pElement->GetElementsByTagNameL( list1, KFault12CodeLocalname, NsUri()); )
+            if ( !err && list1.HasNext() )
+                {
+                TXmlEngElement child = list1.Next();
+                RXmlEngNodeList<TXmlEngElement> list2;
+                TRAP( err, child.GetElementsByTagNameL(list2, KFault12SubcodeLocalname, NsUri()); )
+                if ( !err && list2.HasNext() )
+                    {
+                    TXmlEngElement subcode = list2.Next();
+                    RXmlEngNodeList<TXmlEngElement> list3;
+                    TRAP( err, subcode.GetElementsByTagNameL(list3, KFault12ValueLocalname, NsUri()); )
+                    if ( !err && list3.HasNext() )
+                        {
+                        TXmlEngElement value = list3.Next();
+                        list3.Close();
+                        list2.Close();
+                        list1.Close();
+                        return value.Text();
+                        }
+                    list3.Close();
+                    }
+                list2.Close();
+                }
+            list1.Close();
+            }
+        }   
+    // else { // AsElementL() -method leaved(!) }
+    return KNullDesC8();
+	}
+
+
+EXPORT_C TPtrC8 CSenSoapFault2::FaultString()
+	{
+	TInt err( KErrNone );
+	TXmlEngElement element;
+	TXmlEngElement* pElement = NULL;
+	TRAP( 
+	    err, 
+	    element = AsElementL(); 
+	    pElement = &(element); 
+	    )
+	if( !err && pElement ) 
+	    {
+    	TXmlEngNamespace ns = pElement->NamespaceDeclaration();
+        if ( ns.Uri() != KSenSoap12EnvelopeXmlns)
+            {
+            RXmlEngNodeList<TXmlEngElement> list;
+            TRAP( err, pElement->GetElementsByTagNameL(list, KFaultStringLocalname); )
+            if ( !err && list.HasNext() )
+                {
+                TXmlEngElement child = list.Next();
+                list.Close();
+                return child.Text();
+                }
+            list.Close();
+            }
+        else
+            {
+            RXmlEngNodeList<TXmlEngElement> list1;
+            TRAP( err, pElement->GetElementsByTagNameL( list1, KFault12ReasonLocalname, NsUri()); )
+            if ( !err && list1.HasNext() )
+                {
+                TXmlEngElement child = list1.Next();
+                RXmlEngNodeList<TXmlEngElement> list2;
+                TRAP( err, child.GetElementsByTagNameL( list2, KFault12TextLocalname, NsUri()); )
+                if ( !err && list2.HasNext() )
+                    {
+                    TXmlEngElement value = list2.Next();
+                    list2.Close();
+                    list1.Close();
+                    return value.Text();
+                    }
+                list2.Close();
+    			}
+            list1.Close();
+            }
+        }  
+    // else { // AsElementL -method leaved(!) }      
+	return KNullDesC8();
+	}
+
+EXPORT_C TPtrC8 CSenSoapFault2::FaultActor()
+	{
+	TInt err( KErrNone );
+	TXmlEngElement element;
+	TXmlEngElement* pElement = NULL;
+	TRAP( 
+	    err, 
+	    element = AsElementL(); 
+	    pElement = &(element);
+	    )
+    if( !err && pElement ) 
+        {
+    	TXmlEngNamespace ns = pElement->NamespaceDeclaration();
+        if ( ns.Uri() != KSenSoap12EnvelopeXmlns)
+            {
+            RXmlEngNodeList<TXmlEngElement> list;
+            TRAP( err, pElement->GetElementsByTagNameL(list, KFaultActorLocalname); )
+            if ( !err && list.HasNext() )
+                {
+                TXmlEngElement child = list.Next();
+                list.Close();
+                return child.Text();
+                }
+            list.Close();
+            }
+        else
+            {
+            RXmlEngNodeList<TXmlEngElement> list;
+            TRAP( err, pElement->GetElementsByTagNameL(list, KFault12NodeLocalname, NsUri()); )
+            if ( !err && list.HasNext() )
+                {
+                TXmlEngElement value = list.Next();
+                list.Close();
+                return value.Text();
+                }
+            list.Close();
+            }
+        }
+    // else { // AsElementL -method leaved(!) }            
+	return KNullDesC8();
+	}
+
+EXPORT_C TPtrC8 CSenSoapFault2::Detail()
+	{
+    TInt err( KErrNone );
+    TXmlEngElement element;
+    TXmlEngElement* pElement = NULL;
+	TRAP( 
+	    err, 
+	    element = AsElementL(); 
+	    pElement = &(element);
+	    )
+	if( !err && pElement )
+	    {
+    	TXmlEngNamespace ns = pElement->NamespaceDeclaration();
+        if ( ns.Uri() != KSenSoap12EnvelopeXmlns)
+            {
+            RXmlEngNodeList<TXmlEngElement> list;
+            TRAP( err, pElement->GetElementsByTagNameL(list, KDetailLocalname); )
+            if ( !err && list.HasNext() )
+                {
+                TXmlEngElement child = list.Next();
+                list.Close();
+                return child.Text();
+                }
+            list.Close();
+            }
+        else
+            {
+            RXmlEngNodeList<TXmlEngElement> list;
+            TRAP( err, pElement->GetElementsByTagNameL( list, KFault12DetailLocalname, NsUri() ); )
+            if ( !err && list.HasNext() )
+                {
+                TXmlEngElement child = list.Next();
+                list.Close();
+                return child.Text();
+                }
+            list.Close();
+            }
+        }  
+    // else { // AsElementL -method leaved(!) }                          
+	return KNullDesC8();
+	}
+
+// End of File