You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ro...@apache.org on 2004/08/02 16:15:28 UTC
cvs commit: ws-axis/c/include/axis IAttribute.h
roshan 2004/08/02 07:15:28
Modified: c/include/axis/server IHeaderBlock.h Attribute.h BasicNode.h
c/src/soap Attribute.cpp HeaderBlock.h HeaderBlock.cpp
CharacterElement.h ComplexElement.h
ComplexElement.cpp
Added: c/include/axis IAttribute.h
Log:
added code to support adding of namespaces to HeaderBlocks and adding of attributes to Soap Headers. This patch was submitted by Adrian Dick <ad...@uk.ibm.com>
Revision Changes Path
1.17 +21 -0 ws-axis/c/include/axis/server/IHeaderBlock.h
Index: IHeaderBlock.h
===================================================================
RCS file: /home/cvs/ws-axis/c/include/axis/server/IHeaderBlock.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- IHeaderBlock.h 26 Jul 2004 13:43:48 -0000 1.16
+++ IHeaderBlock.h 2 Aug 2004 14:15:26 -0000 1.17
@@ -19,6 +19,7 @@
#include "BasicNode.h"
#include "SoapEnvVersions.h"
+#include <axis/IAttribute.h>
#ifdef __cplusplus
class Attribute;
@@ -68,6 +69,26 @@
class IHeaderBlock
{
public:
+ /**
+ * Sets the namespace declaration of the Header Block.
+ *
+ * @param pAttribute The Attribute pointer which points to a valid
+ * namespace declartion Attribute.
+ * @return AXIS_SUCCESS to indicate successfull operation.
+ */
+ virtual int addNamespaceDecl(IAttribute *pAttribute)=0;
+
+ /**
+ * Creates a Attribute and adds it to this Header Block as a namespace.
+ *
+ * @param prefix The prefix of the attribute.
+ * @param uri The namespace uri of the attribute.
+ *
+ * @return A pointer to the created Attribute will be returned.
+ */
+ virtual IAttribute* createNamespaceDecl(const AxisChar *prefix,
+ const AxisChar *uri)=0;
+
virtual const BasicNode* getFirstChild() =0;
/**
* Returns the number of child elements of this HeaderBlock.
1.17 +3 -2 ws-axis/c/include/axis/server/Attribute.h
Index: Attribute.h
===================================================================
RCS file: /home/cvs/ws-axis/c/include/axis/server/Attribute.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- Attribute.h 26 Jul 2004 13:43:48 -0000 1.16
+++ Attribute.h 2 Aug 2004 14:15:26 -0000 1.17
@@ -32,6 +32,7 @@
using namespace std;
class SoapSerializer;
+#include <axis/IAttribute.h>
#endif
@@ -39,7 +40,7 @@
* @class Attribute
* @brief interface for the Attribute class.
*
- * @author Roshan Weerasuriya (roshan@opensource.lk, roshan@jkcs.slt.lk)
+ * @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)
* @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
* @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
*
@@ -62,7 +63,7 @@
#ifdef __cplusplus
-class Attribute
+class Attribute : public IAttribute
{
public:
static AttributeFunctions ms_VFtable;
1.17 +30 -1 ws-axis/c/include/axis/server/BasicNode.h
Index: BasicNode.h
===================================================================
RCS file: /home/cvs/ws-axis/c/include/axis/server/BasicNode.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- BasicNode.h 28 Jul 2004 08:41:46 -0000 1.16
+++ BasicNode.h 2 Aug 2004 14:15:26 -0000 1.17
@@ -18,7 +18,7 @@
/**
* @file BasicNode.h
*
- * @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com) *
+ * @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)
*/
#if !defined(_BASICNODE_H____OF_AXIS_INCLUDED_)
@@ -36,6 +36,8 @@
#endif
+#include <axis/IAttribute.h>
+
enum NODE_TYPE { ELEMENT_NODE=1, CHARACTER_NODE};
/*
@@ -74,6 +76,32 @@
{
public:
+ /**
+ * Creates an Attribute and adds it to this Basic Node.
+ *
+ * @param localname The local name of the attribute.
+ * @param prefix The prefix of the attribute.
+ * @param uri The namespace uri of the attribute.
+ * @param value The value of the attribute.
+ *
+ * @return A pointer to the created Attribute will be returned.
+ */
+ virtual IAttribute* createAttribute(const AxisChar* localname,
+ const AxisChar* prefix, const AxisChar* uri,
+ const AxisChar* value) =0;
+
+ /**
+ * Creates an Attribute and adds it to this Basic Node.
+ *
+ * @param localname The local name of the attribute.
+ * @param prefix The prefix of the attribute.
+ * @param value The value of the attribute.
+ *
+ * @return A pointer to the created Attribute will be returned.
+ */
+ virtual IAttribute* createAttribute(const AxisChar* localname,
+ const AxisChar* prefix, const AxisChar* value)=0 ;
+
/**
* Returns the local name of this node. The operation
* behavior depends on the TYPE of the node.
@@ -197,6 +225,7 @@
* of the node.
*/
AxisChar* m_pachValue;
+
};
#endif
1.22 +18 -1 ws-axis/c/src/soap/Attribute.cpp
Index: Attribute.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/Attribute.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- Attribute.cpp 26 Jul 2004 13:43:48 -0000 1.21
+++ Attribute.cpp 2 Aug 2004 14:15:26 -0000 1.22
@@ -23,7 +23,7 @@
*
*
*
- * @author Roshan Weerasuriya (roshan@jkcs.slt.lk)
+ * @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)
* @author Samisa Abeysinghe (sabeysinghe@virtusa.com)
*
*/
@@ -215,3 +215,20 @@
m_prefix= prefix;
m_value= value;
}
+
+const AxisChar* Attribute::getValue() {
+ return m_value.c_str();
+}
+
+const AxisChar* Attribute::getLocalName() {
+ return m_localname.c_str();
+}
+
+const AxisChar* Attribute::getUri() {
+ return m_uri.c_str();
+}
+
+const AxisChar* Attribute::getPrefix() {
+ return m_prefix.c_str();
+}
+
1.13 +13 -1 ws-axis/c/src/soap/HeaderBlock.h
Index: HeaderBlock.h
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/HeaderBlock.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- HeaderBlock.h 26 Jul 2004 13:43:48 -0000 1.12
+++ HeaderBlock.h 2 Aug 2004 14:15:26 -0000 1.13
@@ -102,6 +102,18 @@
list<Attribute*> m_namespaceDecls;
public:
+
+ /**
+ * Creates a Attribute and adds it to this Header Block as a namespace.
+ *
+ * @param prefix The prefix of the attribute.
+ * @param uri The namespace uri of the attribute.
+ *
+ * @return A pointer to the created Attribute will be returned.
+ */
+ IAttribute* createNamespaceDecl(const AxisChar *prefix,
+ const AxisChar *uri);
+
const BasicNode* getFirstChild();
/**
@@ -342,7 +354,7 @@
* @return AXIS_SUCCESS to indicate successfull operation. AXIS_FAIL to
* to indicate unsuccessfull operation.
*/
- int addNamespaceDecl(Attribute *pAttribute);
+ int addNamespaceDecl(IAttribute *pAttribute);
/**
* The Constructor.
1.29 +11 -2 ws-axis/c/src/soap/HeaderBlock.cpp
Index: HeaderBlock.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/HeaderBlock.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- HeaderBlock.cpp 26 Jul 2004 13:43:48 -0000 1.28
+++ HeaderBlock.cpp 2 Aug 2004 14:15:26 -0000 1.29
@@ -331,11 +331,20 @@
return AXIS_SUCCESS;
}
-int HeaderBlock::addNamespaceDecl(Attribute *pAttribute)
+IAttribute* HeaderBlock::createNamespaceDecl(const AxisChar *prefix,
+ const AxisChar *uri)
+{
+ Attribute* pAttribute = new Attribute(prefix, "xmlns", uri);
+ m_namespaceDecls.push_back(pAttribute);
+
+ return (IAttribute*)pAttribute;
+}
+
+int HeaderBlock::addNamespaceDecl(IAttribute *pAttribute)
{
if (pAttribute)
{
- m_namespaceDecls.push_back(pAttribute);
+ m_namespaceDecls.push_back((Attribute*)pAttribute);
return AXIS_SUCCESS;
}
else
1.9 +29 -0 ws-axis/c/src/soap/CharacterElement.h
Index: CharacterElement.h
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/CharacterElement.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- CharacterElement.h 28 Jul 2004 08:42:17 -0000 1.8
+++ CharacterElement.h 2 Aug 2004 14:15:27 -0000 1.9
@@ -49,6 +49,35 @@
class CharacterElement : public BasicNode
{
public:
+
+ /**
+ * This method is overridden to always return NULL because this is a CharacterElement.
+ * A user of a CharacterElement should not use this method
+ *
+ * @param localname The local name of the attribute.
+ * @param prefix The prefix of the attribute.
+ * @param uri The namespace uri of the attribute.
+ * @param value The value of the attribute.
+ *
+ * @return Will always return NULL
+ */
+ IAttribute* createAttribute(const AxisChar* localname,
+ const AxisChar* prefix, const AxisChar* uri, const AxisChar* value)
+ { return NULL; }
+
+ /**
+ * This method is overridden to always return NULL because this is a CharacterElement.
+ * A user of a CharacterElement should not use this method
+ *
+ * @param localname The local name of the attribute.
+ * @param prefix The prefix of the attribute.
+ * @param value The value of the attribute.
+ *
+ * @return Will always return NULL
+ */
+ IAttribute* createAttribute(const AxisChar* localname,
+ const AxisChar* prefix, const AxisChar* value) { return NULL; }
+
bool operator ==( const CharacterElement &objChEle);
/**
1.14 +33 -0 ws-axis/c/src/soap/ComplexElement.h
Index: ComplexElement.h
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/ComplexElement.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- ComplexElement.h 28 Jul 2004 08:42:17 -0000 1.13
+++ ComplexElement.h 2 Aug 2004 14:15:27 -0000 1.14
@@ -50,6 +50,7 @@
#include <list>
#include <axis/server/BasicNode.h>
+#include <axis/server/Attribute.h>
using namespace std;
@@ -66,6 +67,31 @@
public:
ComplexElement(AxisChar* pachLocalName, AxisChar* pachPrefix, AxisChar* pachUri);
+ /**
+ * Creates an Attribute and adds it to this Complex Element.
+ *
+ * @param localname The local name of the attribute.
+ * @param prefix The prefix of the attribute.
+ * @param uri The namespace uri of the attribute.
+ * @param value The value of the attribute.
+ *
+ * @return A pointer to the created Attribute will be returned.
+ */
+ IAttribute* createAttribute(const AxisChar* localname,
+ const AxisChar* prefix, const AxisChar* uri, const AxisChar* value);
+
+ /**
+ * Creates an Attribute and adds it to this Complex Element.
+ *
+ * @param localname The local name of the attribute.
+ * @param prefix The prefix of the attribute.
+ * @param value The value of the attribute.
+ *
+ * @return A pointer to the created Attribute will be returned.
+ */
+ IAttribute* createAttribute(const AxisChar* localname,
+ const AxisChar* prefix, const AxisChar* value);
+
/**
* Returns the number of child elements of this ComplexElement.
*
@@ -185,8 +211,15 @@
int iNoOfChildren;
int serializeChildren(SoapSerializer& pSZ);
int serializeChildren(SoapSerializer& pSZ, list<AxisChar*>& lstTmpNameSpaceStack);
+ int serializeNamespaceDecl(SoapSerializer &pSZ);
+ int attrSerialize(SoapSerializer& pSZ, list<AxisChar*>& lstTmpNameSpaceStack);
bool isSerializable();
list<BasicNode*> m_children;
+ list<Attribute*> m_namespaceDecls;
+ /**
+ * Used to store the Attributes
+ */
+ list<Attribute*> m_attributes;
AxisChar* m_pachPrefix;
AxisChar* m_pachLocalName;
AxisChar* m_pachURI;
1.20 +79 -1 ws-axis/c/src/soap/ComplexElement.cpp
Index: ComplexElement.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/ComplexElement.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- ComplexElement.cpp 28 Jul 2004 08:42:17 -0000 1.19
+++ ComplexElement.cpp 2 Aug 2004 14:15:27 -0000 1.20
@@ -45,6 +45,7 @@
#include "ComplexElement.h"
#include "SoapSerializer.h"
#include <axis/server/GDefine.h>
+#include <axis/server/Attribute.h>
ComplexElement::ComplexElement()
{
@@ -102,6 +103,16 @@
free(m_pachLocalName);
free(m_pachURI);
+ /*
+ *Clear the Attributes
+ */
+ list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
+ while(itCurrAttribute != m_attributes.end())
+ {
+ delete (*itCurrAttribute);
+ itCurrAttribute++;
+ }
+ m_attributes.clear();
/* Clear the children */
list<BasicNode*>::iterator itCurrChild= m_children.begin();
@@ -113,6 +124,27 @@
m_children.clear();
}
+IAttribute* ComplexElement::createAttribute(const AxisChar *localname,
+ const AxisChar *prefix,
+ const AxisChar *value)
+{
+ Attribute* pAttribute = new Attribute(localname, prefix, value);
+ m_attributes.push_back(pAttribute);
+
+ return (IAttribute*)pAttribute;
+}
+
+IAttribute* ComplexElement::createAttribute(const AxisChar *localname,
+ const AxisChar *prefix,
+ const AxisChar *uri,
+ const AxisChar *value)
+{
+ Attribute* pAttribute = new Attribute(localname, prefix, uri, value);
+ m_attributes.push_back(pAttribute);
+
+ return (IAttribute*)pAttribute;
+}
+
int ComplexElement::setPrefix(const AxisChar* pachPrefix)
{
m_pachPrefix = (AxisChar*) malloc(strlen(pachPrefix)+1);
@@ -216,9 +248,22 @@
( (m_pachURI != NULL) && (strlen(m_pachURI) != 0)) &&
(blnIsNewNamespace))
{
- pSZ.serialize(" xmlns:", m_pachPrefix, "=\"", m_pachURI, "\"",
+ pSZ.serialize(" xmlns:", m_pachPrefix, "=\"", m_pachURI, "\" ",
NULL);
}
+
+ iStatus= attrSerialize(pSZ, lstTmpNameSpaceStack);
+ if(iStatus==AXIS_FAIL)
+ {
+ break;
+ }
+
+ iStatus= serializeNamespaceDecl(pSZ);
+ if(iStatus==AXIS_FAIL)
+ {
+ break;
+ }
+
pSZ.serialize(">", NULL);
iStatus= serializeChildren(pSZ, lstTmpNameSpaceStack);
@@ -240,6 +285,39 @@
}
} while(0);
return iStatus;
+}
+
+int ComplexElement::attrSerialize(SoapSerializer& pSZ,
+ list<AxisChar*>& lstTmpNameSpaceStack)
+{
+ int iStatus= AXIS_SUCCESS;
+
+ list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
+
+ while(itCurrAttribute != m_attributes.end())
+ {
+ iStatus= (*itCurrAttribute)->serialize(pSZ, lstTmpNameSpaceStack);
+ if(iStatus==AXIS_FAIL)
+ {
+ break;
+ }
+ itCurrAttribute++;
+ }
+
+ return iStatus;
+}
+
+int ComplexElement::serializeNamespaceDecl(SoapSerializer &pSZ)
+{
+ list<Attribute*>::iterator itCurrNamespaceDecl= m_namespaceDecls.begin();
+
+ while(itCurrNamespaceDecl != m_namespaceDecls.end())
+ {
+ (*itCurrNamespaceDecl)->serialize(pSZ);
+ itCurrNamespaceDecl++;
+ }
+
+ return AXIS_SUCCESS;
}
bool ComplexElement::isSerializable()
1.1 ws-axis/c/include/axis/IAttribute.h
Index: IAttribute.h
===================================================================
/*
* Copyright 2003-2004 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.
*/
/**
* @file IAttribute.h
*
*
*/
#if !defined(_IATTRIBUTE_H____OF_AXIS_INCLUDED_)
#define _IATTRIBUTE_H____OF_AXIS_INCLUDED_
#include <axis/server/GDefine.h>
/**
* @class IAttribute
* @brief interface for the IAttribute class.
*
* @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)
*
*/
#ifdef __cplusplus
class IAttribute
{
public:
virtual ~IAttribute() {};
virtual void setValue(const AxisChar* value) = 0;
virtual void setUri(const AxisChar* uri) = 0;
virtual void setPrefix(const AxisChar* prefix) = 0;
virtual void setLocalName(const AxisChar* localname) = 0;
virtual const AxisChar* getValue() = 0;
virtual const AxisChar* getUri() = 0;
virtual const AxisChar* getPrefix() = 0;
virtual const AxisChar* getLocalName() = 0;
};
#endif
#endif