blob: 650f3e1bbac08fda30a943d27c8927807fb5097d [file] [log] [blame]
/*
* 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.
*/
/*
* @author Roshan Weerasuriya (roshan@opensource.lk, roshanw@jkcsworld.com)
*
*/
#include "SoapMethod.h"
#include <axis/server/Attribute.h>
#include <axis/server/GDefine.h>
SoapMethod::SoapMethod()
{
}
SoapMethod::~SoapMethod()
{
list<Param*>::iterator itParam;
for (list<Attribute*>::iterator it = m_attributes.begin();
it != m_attributes.end(); it++)
{
delete (*it);
}
for (itParam = m_OutputParams.begin();
itParam != m_OutputParams.end(); itParam++)
{
delete (*itParam);
}
m_OutputParams.clear();
}
void SoapMethod::setPrefix(const AxisChar* prefix)
{
m_strPrefix = prefix;
}
void SoapMethod::setLocalName(const AxisChar* localname)
{
m_strLocalname = localname;
}
void SoapMethod::setUri(const AxisChar* uri)
{
m_strUri = uri;
}
void SoapMethod::addOutputParam(Param *param)
{
if (param)
{
m_OutputParams.push_back(param);
}
}
/*
* This method return AXIS_SUCCESS if it serialize the SoapMethod successfully.
* If not it returns AXIS_FAIL. The caller of this method has to deal in a
* appropriate manner after calling this method.
*/
int SoapMethod::serialize(SoapSerializer& pSZ)
{
int iStatus= AXIS_SUCCESS;
do
{
if(isSerializable())
{
pSZ.serialize("<", m_strPrefix.c_str(), ":", m_strLocalname.c_str(),
" xmlns:", m_strPrefix.c_str(),
"=\"", m_strUri.c_str(), "\"", NULL);
list<AxisChar*> lstTmpNameSpaceStack;
iStatus= serializeAttributes(pSZ, lstTmpNameSpaceStack);
if(iStatus==AXIS_FAIL)
{
break;
}
pSZ.serialize(">", NULL);
iStatus= serializeOutputParam(pSZ);
if(iStatus==AXIS_FAIL)
{
break;
}
pSZ.serialize("</", NULL);
if(m_strPrefix.length() != 0)
{
pSZ.serialize(m_strPrefix.c_str(), ":", NULL);
}
pSZ.serialize(m_strLocalname.c_str(), ">", NULL);
/*
* Removing the namespace list of this SOAPMethod from the stack.
*/
list<AxisChar*>::iterator itCurrentNamespace =
lstTmpNameSpaceStack.begin();
while (itCurrentNamespace != lstTmpNameSpaceStack.end())
{
pSZ.removeNamespacePrefix(*itCurrentNamespace);
itCurrentNamespace++;
}
iStatus= AXIS_SUCCESS;
}
else
{
iStatus= AXIS_FAIL;
}
} while(0);
return iStatus;
}
/*
comm on 11/7/2003 9.10am
int SoapMethod::serialize(string& sSerialized)
{
int iStatus= AXIS_SUCCESS;
do {
if(isSerializable()) {
sSerialized+= "<" + m_strPrefix+ ":"+ m_strLocalname+ " xmlns:"
+ m_strPrefix+ "=\""+ m_strUri+ "\"";
// if(m_strPrefix.length() != 0) {
// sSerialized+= m_strPrefix+ ":";
// }
// sSerialized+= m_strLocalname;
// if(m_strPrefix.length() != 0) {
// sSerialized+= " xmlns:"+ m_strPrefix+ "=\""+ m_strUri+ "\"";
// }
iStatus= serializeAttributes(sSerialized);
if(iStatus==AXIS_FAIL) {
break;
}
sSerialized+= ">";
iStatus= serializeOutputParam(sSerialized);
if(iStatus==AXIS_FAIL) {
break;
}
sSerialized+= "</";
if(m_strPrefix.length() != 0) {
sSerialized+= m_strPrefix+ ":";
}
sSerialized+= m_strLocalname+ ">"+ "\n";
iStatus= AXIS_SUCCESS;
} else {
iStatus= AXIS_FAIL;
}
} while(0);
return iStatus;
}
*/
int SoapMethod::serializeOutputParam(SoapSerializer& pSZ)
{
int nStatus;
for (list<Param*>::iterator it = m_OutputParams.begin();
it != m_OutputParams.end(); it++)
{
if (AXIS_SUCCESS != (nStatus = (*it)->serialize(pSZ)))
{
return nStatus;
}
}
return AXIS_SUCCESS;
}
/*
comm on 11/7/2003 9.10am
int SoapMethod::serializeOutputParam(string& sSerialized)
{
return m_pOutputParam->serialize(sSerialized);
}
*/
const AxisChar* SoapMethod::getMethodName()
{
return m_strLocalname.c_str();
}
bool SoapMethod::isSerializable()
{
bool bStatus= true;
/* checking whether namespace qualified, if not return AXIS_FAIL */
do
{
if(m_strPrefix.length() == 0)
{
bStatus= false;
break;
}
else if(m_strUri.length() == 0)
{
bStatus= false;
break;
}
} while(0);
return bStatus;
}
int SoapMethod::addAttribute(Attribute *pAttribute)
{
m_attributes.push_back(pAttribute);
return AXIS_SUCCESS;
}
int SoapMethod::serializeAttributes(SoapSerializer& pSZ,
list<AxisChar*>& lstTmpNameSpaceStack)
{
list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
while(itCurrAttribute != m_attributes.end())
{
(*itCurrAttribute)->serialize(pSZ, lstTmpNameSpaceStack);
itCurrAttribute++;
}
return AXIS_SUCCESS;
}
/*
comm on 11/7/2003 9.10am
int SoapMethod::serializeAttributes(string &sSerialized)
{
list<Attribute*>::iterator itCurrAttribute= m_attributes.begin();
while(itCurrAttribute != m_attributes.end()) {
(*itCurrAttribute)->serialize(sSerialized);
itCurrAttribute++;
}
return AXIS_SUCCESS;
}
*/
int SoapMethod::reset()
{
m_strUri = "";
m_strLocalname = "";
m_strPrefix = "";
m_OutputParams.clear();
m_attributes.clear();
return AXIS_SUCCESS;
}
#ifdef UNIT_TESTING_ON
int SoapMethod::initializeForTesting()
{
m_strPrefix = "mn";
m_strLocalname = "add";
m_strUri = "http://myurl.com";
Attribute* pAttribute = new Attribute();
pAttribute->initializeForTesting();
addAttribute(pAttribute);
/*
* Param* pParam = new Param(100);
* AddOutputParam(pParam);
*/
return AXIS_SUCCESS;
}
#endif