You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by su...@apache.org on 2003/10/24 07:37:46 UTC

cvs commit: ws-axis/c/vc/server/samples/interoptests/groupB groupB.dsp

susantha    2003/10/23 22:37:46

  Modified:    c/include/axis/common AxisTime.h BasicTypeSerializer.h
                        Param.h
               c/include/axis/soap SoapSerializer.h
               c/src/client/samples/interoptests/base InteropBaseClient.cpp
                        InteropTestPortType.cpp
               c/src/common AxisTime.cpp BasicTypeSerializer.cpp Param.cpp
               c/src/soap SoapSerializer.cpp
               c/vc/server/samples/interoptests/base base.dsp
               c/vc/server/samples/interoptests/groupB groupB.dsp
  Log:
  Fixed date time serialization/deserialization bug. Also removed the ineffiency in the Param class
  
  Revision  Changes    Path
  1.3       +6 -4      ws-axis/c/include/axis/common/AxisTime.h
  
  Index: AxisTime.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/common/AxisTime.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AxisTime.h	23 Oct 2003 04:31:49 -0000	1.2
  +++ AxisTime.h	24 Oct 2003 05:37:46 -0000	1.3
  @@ -68,7 +68,7 @@
   
   using namespace std;
   
  -typedef struct uDuration
  +typedef struct
   {
       int years;
       int months;
  @@ -76,7 +76,7 @@
       int hours;
       int mins;
       double secs;
  -};
  +} uDuration;
   
   class AxisTime
   {
  @@ -89,13 +89,15 @@
           void setValue(XSDTYPE type, uParamValue Value);
           void setType(XSDTYPE m_Type);
           AxisString getValue();
  -        AxisString& serialize(const AxisString& sName, struct tm tValue);
  -        AxisString& serialize(const AxisString& sName, long lDuration);
  +        AxisString& serialize(const AxisChar* sName, struct tm tValue, XSDTYPE nType);
  +        AxisString& serialize(const AxisChar* sName, long lDuration, XSDTYPE nType);
           long getDuration();
           struct tm getDateTime();
           struct tm getDate();
           struct tm getTime();
           void mkCTime();
  +		static struct tm Deserialize(const AxisChar* strValue, XSDTYPE type);
  +		static long DeserializeDuration(const AxisChar* strValue, XSDTYPE type);
   
       private:
           void processValue();
  
  
  
  1.3       +3 -2      ws-axis/c/include/axis/common/BasicTypeSerializer.h
  
  Index: BasicTypeSerializer.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/common/BasicTypeSerializer.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BasicTypeSerializer.h	21 Oct 2003 15:09:42 -0000	1.2
  +++ BasicTypeSerializer.h	24 Oct 2003 05:37:46 -0000	1.3
  @@ -68,7 +68,7 @@
   #define AFX_BASICTYPESERIALIZER_H__7ECDFED3_F3D5_48A1_A7EF_1E30B93BDB2C__INCLUDED_
   
   #include "TypeMapping.h"
  -
  +#include "AxisTime.h"
   #include <string>
   using namespace std;
   
  @@ -96,7 +96,7 @@
       const AxisChar* serialize(const AxisChar* sName, long lValue, XSDTYPE type);
       const AxisChar* serialize(const AxisChar* sName, unsigned long ulValue, XSDTYPE type);
       const AxisChar* serialize(const AxisChar* sName, tm datetime, XSDTYPE type);
  -	const AxisChar* BasicTypeStr(XSDTYPE type);
  +	static const AxisChar* BasicTypeStr(XSDTYPE type);
   
   	BasicTypeSerializer();
   	virtual ~BasicTypeSerializer();
  @@ -117,6 +117,7 @@
   	AxisString m_strReturnVal;
   	AxisChar m_Buf[BTS_BUFFSIZE]; //used for numeric to string conversions with sprintf
   	XSDTYPE m_Type; //used to temporarily set the type of item being serialized.
  +	AxisTime m_AxisTime;
   };
   
   #endif // !defined(AFX_BASICTYPESERIALIZER_H__7ECDFED3_F3D5_48A1_A7EF_1E30B93BDB2C__INCLUDED_)
  
  
  
  1.2       +0 -4      ws-axis/c/include/axis/common/Param.h
  
  Index: Param.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/common/Param.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Param.h	20 Oct 2003 03:18:19 -0000	1.1
  +++ Param.h	24 Oct 2003 05:37:46 -0000	1.2
  @@ -152,10 +152,6 @@
   	int SetUserType(void* pObject, AXIS_DESERIALIZE_FUNCT pDZFunct, AXIS_OBJECT_DELETE_FUNCT pDelFunct);
   	void SetName(const AxisChar* sName);
   	uParamValue GetValue(){ return m_Value;};
  -private:
  -	BasicTypeSerializer m_BTSZ;
  -    AxisTime m_uAxisTime;
  -    //uDuration duration;
   };
   
   #endif // !defined(AFX_PARAM_H__351B13BB_5D03_40C5_93F5_56D17295A8BD__INCLUDED_)
  
  
  
  1.3       +0 -1      ws-axis/c/include/axis/soap/SoapSerializer.h
  
  Index: SoapSerializer.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/include/axis/soap/SoapSerializer.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SoapSerializer.h	21 Oct 2003 15:09:42 -0000	1.2
  +++ SoapSerializer.h	24 Oct 2003 05:37:46 -0000	1.3
  @@ -161,7 +161,6 @@
   private:
   	BasicTypeSerializer m_BTSZ;
   	const Ax_soapstream* m_pOutputStream;
  -    AxisTime m_uAxisTime;
   };
   
   #endif // !defined(AFX_SOAPSERIALIZER_H__C37229AD_BD54_430D_9619_E4574CF95334__INCLUDED_)
  
  
  
  1.3       +3 -3      ws-axis/c/src/client/samples/interoptests/base/InteropBaseClient.cpp
  
  Index: InteropBaseClient.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/client/samples/interoptests/base/InteropBaseClient.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InteropBaseClient.cpp	23 Oct 2003 08:24:59 -0000	1.2
  +++ InteropBaseClient.cpp	24 Oct 2003 05:37:46 -0000	1.3
  @@ -68,9 +68,9 @@
   	ws.echoVoid();
   	//testing echo base 64 binary
   	ws.echoBase64("BCDF675E234242WHRTKMJDGKGUEJ898636JFJFHEJDGWTDHFJRURYGBCDHTWRSG");
  -//	time_t tim;
  -//	time(&tim);
  -//	ws.echoDate(*gmtime(&tim));
  +	time_t tim;
  +	time(&tim);
  +	ws.echoDate(*gmtime(&tim));
   	//testing echo hex binary
   	ws.echoHexBinary("CCCFFA46552BC7D5A09BC5F23DE9E0FE7862AD45BC87D02FE");
   	//testing echo decimal
  
  
  
  1.3       +1 -1      ws-axis/c/src/client/samples/interoptests/base/InteropTestPortType.cpp
  
  Index: InteropTestPortType.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/client/samples/interoptests/base/InteropTestPortType.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InteropTestPortType.cpp	23 Oct 2003 08:24:59 -0000	1.2
  +++ InteropTestPortType.cpp	24 Oct 2003 05:37:46 -0000	1.3
  @@ -20,7 +20,7 @@
   	m_pCall = new Call();
   	m_pCall->SetProtocol(APTHTTP);
   	m_pCall->SetHeader("SOAPAction", "InteropBase");
  -	m_pCall->SetEndpointURI("http://localhost/axis/InteropBase");
  +	m_pCall->SetEndpointURI("http://localhost:5555/axis/InteropBase");
   }
   
   InteropTestPortType::~InteropTestPortType()
  
  
  
  1.9       +87 -67    ws-axis/c/src/common/AxisTime.cpp
  
  Index: AxisTime.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/AxisTime.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AxisTime.cpp	23 Oct 2003 04:31:49 -0000	1.8
  +++ AxisTime.cpp	24 Oct 2003 05:37:46 -0000	1.9
  @@ -75,8 +75,8 @@
   
   AxisTime::AxisTime(time_t pTime)
   {
  -		tm* pTMUTC = gmtime(&pTime);
  -		memcpy(&m_TMUTC, pTMUTC, sizeof(tm));
  +	tm* pTMUTC = gmtime(&pTime);
  +	memcpy(&m_TMUTC, pTMUTC, sizeof(tm));
   }
   
   AxisTime::~AxisTime()
  @@ -117,82 +117,82 @@
   * Serialize the duration in seconds into a xml duration string
   * of the format PnYnMnDTnHnMnS
   */
  -AxisString& AxisTime::serialize(const AxisString& sName, long lDuration)
  +AxisString& AxisTime::serialize(const AxisChar* sName, long lDuration, XSDTYPE nType)
   {
  -        AxisChar buff[4];
  -        strXSDDuration = "P";
  -        int x = 365 * 24 * 3600;
  -        int intYears = lDuration / x;
  -        //sprintf((char*)buff,"%d", intYears);
  -        AxisSprintf(buff, 4, "%d", intYears);
  -        strXSDDuration.append(buff);
  -        strXSDDuration.append("Y");
  -        lDuration = lDuration - (intYears * x);
  -        x = 30 * 24 * 3600;
  -        int intMonths = lDuration / x;
  -        //sprintf((char*)buff,"%d", intMonths);
  -        AxisSprintf(buff, 4, "%d", intMonths);
  -        strXSDDuration.append(buff);
  -        strXSDDuration.append("M");
  -        lDuration = lDuration - (intMonths * x);
  -        x = 24 * 3600;
  -        int intDays = lDuration / x;
  -        //sprintf((char*)buff,"%d", intDays);
  -        AxisSprintf(buff, 4, "%d", intDays);
  -        strXSDDuration.append(buff);
  -        strXSDDuration.append("DT");
  -        lDuration = lDuration - (intDays * x);
  -        x = 3600;
  -        int intHours = lDuration / x;
  -        //sprintf((char*)buff,"%d", intHours);
  -        AxisSprintf(buff, 4, "%d", intHours);
  -        strXSDDuration.append(buff);
  -        strXSDDuration.append("H");
  -        lDuration = lDuration - (intHours * x);
  -        x = 60;
  -        int intMins = lDuration / x;
  -        //sprintf((char*)buff,"%d", intMins);
  -        AxisSprintf(buff, 4, "%d", intMins);
  -        strXSDDuration.append(buff);
  -        strXSDDuration.append("M");
  -        int intSecs = lDuration - (intMins * x);
  -        //sprintf((char*)buff,"%d", intSecs);
  -        AxisSprintf(buff, 4, "%d", intSecs);
  -        strXSDDuration.append(buff);
  -        strXSDDuration.append("S");
  +	AxisChar buff[4];
  +	strXSDDuration = "P";
  +	int x = 365 * 24 * 3600;
  +	int intYears = lDuration / x;
  +	//sprintf((char*)buff,"%d", intYears);
  +	AxisSprintf(buff, 4, "%d", intYears);
  +	strXSDDuration.append(buff);
  +	strXSDDuration.append("Y");
  +	lDuration = lDuration - (intYears * x);
  +	x = 30 * 24 * 3600;
  +	int intMonths = lDuration / x;
  +	//sprintf((char*)buff,"%d", intMonths);
  +	AxisSprintf(buff, 4, "%d", intMonths);
  +	strXSDDuration.append(buff);
  +	strXSDDuration.append("M");
  +	lDuration = lDuration - (intMonths * x);
  +	x = 24 * 3600;
  +	int intDays = lDuration / x;
  +	//sprintf((char*)buff,"%d", intDays);
  +	AxisSprintf(buff, 4, "%d", intDays);
  +	strXSDDuration.append(buff);
  +	strXSDDuration.append("DT");
  +	lDuration = lDuration - (intDays * x);
  +	x = 3600;
  +	int intHours = lDuration / x;
  +	//sprintf((char*)buff,"%d", intHours);
  +	AxisSprintf(buff, 4, "%d", intHours);
  +	strXSDDuration.append(buff);
  +	strXSDDuration.append("H");
  +	lDuration = lDuration - (intHours * x);
  +	x = 60;
  +	int intMins = lDuration / x;
  +	//sprintf((char*)buff,"%d", intMins);
  +	AxisSprintf(buff, 4, "%d", intMins);
  +	strXSDDuration.append(buff);
  +	strXSDDuration.append("M");
  +	int intSecs = lDuration - (intMins * x);
  +	//sprintf((char*)buff,"%d", intSecs);
  +	AxisSprintf(buff, 4, "%d", intSecs);
  +	strXSDDuration.append(buff);
  +	strXSDDuration.append("S");
   
  -        return strXSDDuration;
  +	return strXSDDuration;
   }
   
   /**
   * Serialize the c type tm struct into a xml date string.
   * The serialized date will represent UTC time
   */
  -AxisString& AxisTime::serialize(const AxisString& sName, struct tm tValue)
  +AxisString& AxisTime::serialize(const AxisChar* sName, struct tm tValue, XSDTYPE nType)
   {
  -        /*formats the output date in the format CCYY-MM-DDThh:mm:ssZ*/
  -        switch(m_Type)
  -        {
  -            case XSD_DATETIME:
  -                strftime(buf1, 80, "%Y-%m-%dT%H:%M:%SZ", &tValue);
  -                strXSDDate = buf1;
  -                //AxisUtils::convert(strXSDDate, buf1);
  -                break;
  -            case XSD_DATE:
  -                strftime(buf1, 80, "%Y-%m-%dZ", &tValue);
  -                strXSDDate = buf1;
  -                //AxisUtils::convert(strXSDDate, buf1);
  -                break;
  -            case XSD_TIME:
  -                strftime(buf1, 80, "%H:%M:%SZ", &tValue);
  -                strXSDDate = buf1;
  -                //AxisUtils::convert(strXSDDate, buf1);
  -                break;
  -            default:;
  +    /*formats the output date in the format CCYY-MM-DDThh:mm:ssZ*/
  +    switch(nType)
  +    {
  +        case XSD_DATETIME:
  +            strftime(buf1, 80, "%Y-%m-%dT%H:%M:%SZ", &tValue);
  +            strXSDDate = buf1;
  +            //AxisUtils::convert(strXSDDate, buf1);
  +            break;
  +        case XSD_DATE:
  +            strftime(buf1, 80, "%Y-%m-%dZ", &tValue);
  +            strXSDDate = buf1;
  +            //AxisUtils::convert(strXSDDate, buf1);
  +            break;
  +        case XSD_TIME:
  +            strftime(buf1, 80, "%H:%M:%SZ", &tValue);
  +            strXSDDate = buf1;
  +            //AxisUtils::convert(strXSDDate, buf1);
  +            break;
  +        default:;
   
  -        }
  +    }
   
  -        return strXSDDate;
  +    return strXSDDate;
   }
   
   /**
  @@ -530,3 +530,23 @@
   {
       return m_TMUTC;
   }
  +
  +//following function is written with no consideration of the efficiency.
  +//should be changed later - Susantha 23-10-2003
  +struct tm AxisTime::Deserialize(const AxisChar* strValue, XSDTYPE type)
  +{
  +	AxisTime at;
  +	at.setType(type);
  +	at.setValue(strValue);
  +	return at.getDateTime();
  +}
  +
  +long AxisTime::DeserializeDuration(const AxisChar* strValue, XSDTYPE type)
  +{
  +	AxisTime at;
  +	at.setType(type);
  +	at.setValue(strValue);
  +	return at.getDuration();
  +}
  +
  +
  
  
  
  1.16      +18 -3     ws-axis/c/src/common/BasicTypeSerializer.cpp
  
  Index: BasicTypeSerializer.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/BasicTypeSerializer.cpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- BasicTypeSerializer.cpp	22 Oct 2003 03:40:04 -0000	1.15
  +++ BasicTypeSerializer.cpp	24 Oct 2003 05:37:46 -0000	1.16
  @@ -134,7 +134,15 @@
   const AxisChar* BasicTypeSerializer::serialize(const AxisChar* sName, long lValue, XSDTYPE type)
   {
   	m_Type = type;
  -	AxisSprintf(m_Buf, BTS_BUFFSIZE, "%d", lValue);
  +	if (XSD_DURATION == type)
  +	{
  +		const AxisChar* pChar = m_AxisTime.serialize(sName, lValue, type).c_str();
  +		strcpy(m_Buf, pChar);
  +	}
  +	else
  +	{
  +		AxisSprintf(m_Buf, BTS_BUFFSIZE, "%d", lValue);
  +	}
   	HelpSerialize(sName, sName);
   	return m_sSZ.c_str();
   }
  @@ -171,10 +179,17 @@
   	return m_sSZ.c_str();
   }
   
  -const AxisChar* BasicTypeSerializer::serialize(const AxisChar* sName, tm datetime, XSDTYPE type)
  +const AxisChar* BasicTypeSerializer::serialize(const AxisChar* sName, tm tValue, XSDTYPE type)
   {
   	m_Type = type;
  -	return ""; //TODO: Damitha could you please look in to this.
  +	const AxisChar* pChar = m_AxisTime.serialize(sName, tValue, type).c_str();
  +	if (pChar && (strlen(pChar) < BTS_BUFFSIZE))
  +	{
  +		strcpy(m_Buf, pChar);
  +		HelpSerialize(sName, sName);
  +		return m_sSZ.c_str();
  +	}
  +	return "";
   }
   
   void BasicTypeSerializer::HelpSerialize(const AxisChar* sName, const AxisChar* sValue)
  
  
  
  1.24      +55 -51    ws-axis/c/src/common/Param.cpp
  
  Index: Param.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/Param.cpp,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- Param.cpp	22 Oct 2003 03:40:04 -0000	1.23
  +++ Param.cpp	24 Oct 2003 05:37:46 -0000	1.24
  @@ -83,31 +83,30 @@
   {
   	m_sName = param.m_sName.c_str();
   	m_sValue = param.m_sValue.c_str();
  -	m_Type = param.m_Type;	
  -	if (m_Type == USER_TYPE) 
  +	m_Type = param.m_Type;
  +	switch(m_Type)
   	{
  -		m_Value.pCplxObj = new ComplexObjectHandler();
  -		m_Value.pCplxObj->m_TypeName = param.m_Value.pCplxObj->m_TypeName.c_str();
  -		m_Value.pCplxObj->m_URI = param.m_Value.pCplxObj->m_URI.c_str();
  -	}
  -	else if(m_Type == XSD_ARRAY)
  -	{
  -		m_Value.pArray = new ArrayBean();
  -		m_Value.pArray->m_TypeName = param.m_Value.pArray->m_TypeName.c_str();
  -		m_Value.pArray->m_URI = param.m_Value.pArray->m_URI.c_str();
  -		m_Value.pArray->m_type = param.m_Value.pArray->m_type;
  -		m_Value.pArray->m_size = param.m_Value.pArray->m_size;
  -		m_Value.pArray->m_ItemName = param.m_Value.pArray->m_ItemName.c_str();
  -		//copy constructor is not intended to use to copy the array in
  -		//union v
  -	}
  -    else if (m_Type == XSD_DURATION || m_Type == XSD_DATETIME)
  -	{
  -        m_uAxisTime.setType(m_Type);
  -	}	
  -	else 
  -	{
  -		m_Value = param.m_Value;
  +	case USER_TYPE: 
  +		{
  +			m_Value.pCplxObj = new ComplexObjectHandler();
  +			m_Value.pCplxObj->m_TypeName = param.m_Value.pCplxObj->m_TypeName.c_str();
  +			m_Value.pCplxObj->m_URI = param.m_Value.pCplxObj->m_URI.c_str();
  +		}
  +		break;
  +	case XSD_ARRAY:
  +		{
  +			m_Value.pArray = new ArrayBean();
  +			m_Value.pArray->m_TypeName = param.m_Value.pArray->m_TypeName.c_str();
  +			m_Value.pArray->m_URI = param.m_Value.pArray->m_URI.c_str();
  +			m_Value.pArray->m_type = param.m_Value.pArray->m_type;
  +			m_Value.pArray->m_size = param.m_Value.pArray->m_size;
  +			m_Value.pArray->m_ItemName = param.m_Value.pArray->m_ItemName.c_str();
  +			//copy constructor is not intended to use to copy the array in
  +			//union v
  +		}
  +		break;
  +	default: 
  +			m_Value = param.m_Value;
   	}
   }
   
  @@ -137,12 +136,15 @@
   
   Param::Param(time_t time)
   {
  -    m_uAxisTime = AxisTime(time);
  +    //m_uAxisTime = AxisTime(time);
   }
   
  -Param::Param(struct tm timeStruct)
  +Param::Param(struct tm tValue)
   {
  -    m_uAxisTime = AxisTime(timeStruct);
  +	m_sName = "DateTime";
  +	m_Value.tValue = tValue;
  +	m_Type = XSD_DATETIME;
  +    //m_uAxisTime = AxisTime(timeStruct);
   }
   
   Param::Param(int nValue)
  @@ -352,7 +354,7 @@
   	{
   		//exception
   	}
  -	return m_uAxisTime.getDateTime();
  +	return m_Value.tValue;
   }
   
   struct tm Param::GetDate()
  @@ -371,7 +373,7 @@
   	{
   		//exception
   	}
  -	return m_uAxisTime.getDate();
  +	return m_Value.tValue;
   }
   
   struct tm Param::GetTime()
  @@ -390,7 +392,7 @@
   	{
   		//exception
   	}
  -	return m_uAxisTime.getTime();
  +	return m_Value.tValue;
   }
   
   long Param::GetDuration()
  @@ -409,7 +411,7 @@
   	{
   		//exception
   	}
  -	return m_uAxisTime.getDuration();
  +	return m_Value.lDuration;
   }
   
   unsigned int Param::GetUnsignedInt()
  @@ -620,53 +622,53 @@
   	switch (m_Type){
   	case XSD_INT:
   	case XSD_BOOLEAN:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.nValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.nValue, m_Type);
   		break; 
       case XSD_UNSIGNEDINT:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.unValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.unValue, m_Type);
   		break;           
       case XSD_SHORT:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.sValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.sValue, m_Type);
   		break; 
       case XSD_UNSIGNEDSHORT:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.usValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.usValue, m_Type);
   		break;         
       case XSD_BYTE:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.cValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.cValue, m_Type);
   		break; 
       case XSD_UNSIGNEDBYTE:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.ucValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.ucValue, m_Type);
   		break;
       case XSD_LONG:
       case XSD_INTEGER:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.lValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.lValue, m_Type);
   		break;        
       case XSD_UNSIGNEDLONG:
  -        pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.ulValue, m_Type);
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.ulValue, m_Type);
   		break;
   	case XSD_FLOAT:
  -		pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.fValue, m_Type);
  +		pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.fValue, m_Type);
   		break;
       case XSD_DOUBLE:
       case XSD_DECIMAL:
  -		pSZ << m_BTSZ.serialize(m_sName.c_str(), m_Value.dValue, m_Type);
  +		pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.dValue, m_Type);
   		break;              
   	case XSD_STRING:
  -		pSZ << m_BTSZ.serialize(m_sName.c_str(), m_sValue.c_str(), m_Type);
  +		pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_sValue.c_str(), m_Type);
   		break;
   	case XSD_HEXBINARY:
  -		pSZ << m_BTSZ.serialize(m_sName.c_str(), m_sValue.c_str(), XSD_HEXBINARY);
  +		pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_sValue.c_str(), m_Type);
   		break;
   	case XSD_BASE64BINARY:
  -		pSZ << m_BTSZ.serialize(m_sName.c_str(), m_sValue.c_str(), XSD_BASE64BINARY);
  +		pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_sValue.c_str(), m_Type);
   		break;
   	case XSD_DURATION:
  -        pSZ << m_uAxisTime.serialize(m_sName, m_Value.lDuration).c_str();
  +        pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.lDuration, m_Type);
           break;
       case XSD_DATETIME:
       case XSD_DATE:
       case XSD_TIME:
  -            pSZ << m_uAxisTime.serialize(m_sName, m_Value.tValue).c_str();            
  +            pSZ << pSZ.SerializeBasicType(m_sName.c_str(), m_Value.tValue, m_Type);
           break;        
   	case XSD_ARRAY:
   		//pSZ << "<abc:ArrayOfPhoneNumbers xmlns:abc="http://example.org/2001/06/numbers"
  @@ -699,7 +701,7 @@
   		else //basic type array
   		{
   			pSZ << "xsd:";
  -			pSZ << m_BTSZ.BasicTypeStr(m_Value.pArray->m_type);
  +			pSZ << BasicTypeSerializer::BasicTypeStr(m_Value.pArray->m_type);
   		}
   		{
   			char Buf[10]; //maximum array dimension is 99999999
  @@ -779,13 +781,15 @@
   	case XSD_NOTATION:			
   		m_sValue = sValue;
   		break;
  -    case XSD_DURATION:
       case XSD_DATETIME:
       case XSD_DATE:
       case XSD_TIME:
  -		m_uAxisTime.setValue(sValue);
  +		m_Value.tValue = AxisTime::Deserialize(sValue, m_Type);
   		break;        
  -	//Continue this for all basic types
  +    case XSD_DURATION:
  +		m_Value.lDuration = AxisTime::DeserializeDuration(sValue, m_Type);
  +		break;
  +		//Continue this for all basic types
   	case XSD_ARRAY:
   	case USER_TYPE:
   		//this is an error situation - probably something wrong with the soap
  @@ -845,7 +849,7 @@
       case XSD_DATE:
       case XSD_TIME:
           m_Value.tValue = Value.tValue;
  -        m_uAxisTime.setValue(nType, m_Value);
  +    //    m_uAxisTime.setValue(nType, m_Value);
   	//Continue this for all basic types
   	case XSD_ARRAY:
   		m_Value.pArray = Value.pArray;
  
  
  
  1.30      +1 -2      ws-axis/c/src/soap/SoapSerializer.cpp
  
  Index: SoapSerializer.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/SoapSerializer.cpp,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- SoapSerializer.cpp	22 Oct 2003 03:40:05 -0000	1.29
  +++ SoapSerializer.cpp	24 Oct 2003 05:37:46 -0000	1.30
  @@ -448,8 +448,7 @@
   
   const AxisChar* SoapSerializer::SerializeBasicType(const AxisChar* sName, struct tm tValue, XSDTYPE type)
   {
  -    return m_uAxisTime.serialize(sName, tValue).c_str();
  -    //return NULL;
  +    return m_BTSZ.serialize(sName, tValue, type);
   }
   
   const AxisChar* SoapSerializer::SerializeBasicType(const AxisChar* sName, unsigned int unValue, XSDTYPE type)
  
  
  
  1.2       +4 -3      ws-axis/c/vc/server/samples/interoptests/base/base.dsp
  
  Index: base.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/server/samples/interoptests/base/base.dsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- base.dsp	22 Oct 2003 12:45:47 -0000	1.1
  +++ base.dsp	24 Oct 2003 05:37:46 -0000	1.2
  @@ -40,6 +40,7 @@
   # PROP Use_Debug_Libraries 0
   # PROP Output_Dir "../../../../../release/win32"
   # PROP Intermediate_Dir "Release"
  +# PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BASE_EXPORTS" /YX /FD /c
   # ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BASE_EXPORTS" /FD /c
  @@ -53,7 +54,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
  -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
  +# ADD LINK32 /nologo /dll /machine:I386 /out:"../../../../../release/win32/interopbase.dll"
   
   !ELSEIF  "$(CFG)" == "base - Win32 Debug"
   
  @@ -68,8 +69,8 @@
   # PROP Intermediate_Dir "Debug"
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
  -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BASE_EXPORTS" /YX /FD /GZ  /c
  -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BASE_EXPORTS" /FD /GZ  /c
  +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BASE_EXPORTS" /YX /FD /GZ /c
  +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "BASE_EXPORTS" /FD /GZ /c
   # SUBTRACT CPP /YX
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
  
  
  
  1.2       +4 -3      ws-axis/c/vc/server/samples/interoptests/groupB/groupB.dsp
  
  Index: groupB.dsp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/vc/server/samples/interoptests/groupB/groupB.dsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- groupB.dsp	22 Oct 2003 12:45:47 -0000	1.1
  +++ groupB.dsp	24 Oct 2003 05:37:46 -0000	1.2
  @@ -40,6 +40,7 @@
   # PROP Use_Debug_Libraries 0
   # PROP Output_Dir "../../../../../release/win32"
   # PROP Intermediate_Dir "Release"
  +# PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
   # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GROUPB_EXPORTS" /YX /FD /c
   # ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GROUPB_EXPORTS" /FD /c
  @@ -53,7 +54,7 @@
   # ADD BSC32 /nologo
   LINK32=link.exe
   # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
  -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
  +# ADD LINK32 /nologo /dll /machine:I386 /out:"../../../../../release/win32/interopGroupB.dll"
   
   !ELSEIF  "$(CFG)" == "groupB - Win32 Debug"
   
  @@ -68,8 +69,8 @@
   # PROP Intermediate_Dir "Debug"
   # PROP Ignore_Export_Lib 0
   # PROP Target_Dir ""
  -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GROUPB_EXPORTS" /YX /FD /GZ  /c
  -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GROUPB_EXPORTS" /FD /GZ  /c
  +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GROUPB_EXPORTS" /YX /FD /GZ /c
  +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GROUPB_EXPORTS" /FD /GZ /c
   # SUBTRACT CPP /YX
   # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
   # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32