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 di...@apache.org on 2005/01/25 19:08:30 UTC
cvs commit: ws-axis/c/src/soap/xsd GDay.cpp GDay.hpp GMonth.cpp GMonth.hpp GMonthDay.cpp GMonthDay.hpp GYear.cpp GYear.hpp GYearMonth.cpp GYearMonth.hpp
dicka 2005/01/25 10:08:30
Modified: c/src/soap Makefile.am
c/vc AxisClientDLL.dsp AxisServerDLL.dsp
Added: c/src/soap/xsd GDay.cpp GDay.hpp GMonth.cpp GMonth.hpp
GMonthDay.cpp GMonthDay.hpp GYear.cpp GYear.hpp
GYearMonth.cpp GYearMonth.hpp
Log:
Add Language, GYearMonth, GYear, GMonthDay, GDay and GMonth types to Simple types OO model.
Submitted by: Adrian Dick
Revision Changes Path
1.34 +5 -0 ws-axis/c/src/soap/Makefile.am
Index: Makefile.am
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/Makefile.am,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- Makefile.am 25 Jan 2005 17:41:19 -0000 1.33
+++ Makefile.am 25 Jan 2005 18:08:29 -0000 1.34
@@ -29,6 +29,11 @@
xsd/Boolean.cpp \
xsd/Date.cpp \
xsd/DateTime.cpp \
+ xsd/GYearMonth.cpp \
+ xsd/GYear.cpp \
+ xsd/GMonthDay.cpp \
+ xsd/GDay.cpp \
+ xsd/GMonth.cpp \
xsd/Decimal.cpp \
xsd/Double.cpp \
xsd/Duration.cpp \
1.44 +20 -0 ws-axis/c/vc/AxisClientDLL.dsp
Index: AxisClientDLL.dsp
===================================================================
RCS file: /home/cvs/ws-axis/c/vc/AxisClientDLL.dsp,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- AxisClientDLL.dsp 25 Jan 2005 17:41:19 -0000 1.43
+++ AxisClientDLL.dsp 25 Jan 2005 18:08:29 -0000 1.44
@@ -254,7 +254,27 @@
# End Source File
# Begin Source File
+SOURCE=..\src\soap\xsd\GDay.cpp
+# End Source File
+# Begin Source File
+
SOURCE=..\src\common\GDefine.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GMonth.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GMonthDay.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GYear.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GYearMonth.cpp
# End Source File
# Begin Source File
1.43 +20 -0 ws-axis/c/vc/AxisServerDLL.dsp
Index: AxisServerDLL.dsp
===================================================================
RCS file: /home/cvs/ws-axis/c/vc/AxisServerDLL.dsp,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- AxisServerDLL.dsp 25 Jan 2005 17:41:19 -0000 1.42
+++ AxisServerDLL.dsp 25 Jan 2005 18:08:30 -0000 1.43
@@ -250,7 +250,27 @@
# End Source File
# Begin Source File
+SOURCE=..\src\soap\xsd\GDay.cpp
+# End Source File
+# Begin Source File
+
SOURCE=..\src\common\GDefine.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GMonth.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GMonthDay.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GYear.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\soap\xsd\GYearMonth.cpp
# End Source File
# Begin Source File
1.1 ws-axis/c/src/soap/xsd/GDay.cpp
Index: GDay.cpp
===================================================================
#include "GDay.hpp"
AXIS_CPP_NAMESPACE_START
GDay::GDay():m_GDay(NULL)
{
}
AxisChar* GDay::serialize(const void* value) throw (AxisSoapException)
{
return serialize((struct tm*) value);
}
void* GDay::deserialize(const AxisChar* valueAsChar) throw (AxisSoapException)
{
return (void*) deserializeGDay(valueAsChar);
}
AxisChar* GDay::serialize(const struct tm* value) throw (AxisSoapException)
{
MinInclusive* minInclusive = getMinInclusive();
if (minInclusive->isSet())
{
struct tm minInclusiveAsStructTM = minInclusive->getMinInclusiveAsStructTM();
if ( 0 > difftime(mktime(&minInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than MinInclusive specified for this type. MinInclusive = ";
exceptionMessage += asctime(&minInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minInclusive;
MinExclusive* minExclusive = getMinExclusive();
if (minExclusive->isSet())
{
struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM();
if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than or equal to MinExclusive specified for this type. MinExclusive = ";
exceptionMessage += asctime(&minExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minExclusive;
MaxInclusive* maxInclusive = getMaxInclusive();
if (maxInclusive->isSet())
{
struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM();
if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = ";
exceptionMessage += asctime(&maxInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxInclusive;
MaxExclusive* maxExclusive = getMaxExclusive();
if (maxExclusive->isSet())
{
struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM();
if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = ";
exceptionMessage += asctime(&maxExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxExclusive;
AxisChar* serializedValue = new AxisChar[80];
strftime (serializedValue, 80, "---%d", value);
IAnySimpleType::serialize(serializedValue);
delete [] serializedValue;
return m_Buf;
}
struct tm* GDay::deserializeGDay(const AxisChar* valueAsChar) throw (AxisSoapException)
{
struct tm value;
struct tm *pTm;
AxisChar *cUtc;
AxisChar *cTemp;
AxisChar *cTemp2;
time_t now;
time (&now);
pTm = gmtime (&now);
struct tm result1;
memcpy (&result1, pTm, sizeof (tm));
pTm = localtime (&now);
struct tm result2;
memcpy (&result2, pTm, sizeof (tm));
time_t d = mktime (&result1) - mktime (&result2);
if (d == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
/* dismantle m_sValue to get tm value;
* XSD_DATETIME format is
* CCYY(-)MMZ OR
* CCYY(-)MM+/-<UTC TIME DIFFERENCE>
*/
if (sscanf (valueAsChar, "---%d", &value.tm_mon) != 1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
value.tm_year = 1900;
value.tm_mon--;
value.tm_mday = 0;
value.tm_hour = 0;
value.tm_min = 0;
value.tm_sec = 0;
value.tm_isdst = -1;
#if !defined(WIN32) && !defined(AIX) && !defined( __OS400__ ) && !defined(__sun)
value.tm_zone = NULL;
value.tm_gmtoff = -1;
#endif
cTemp2 = const_cast<char*>(strpbrk (valueAsChar, ":"));
/* if the timezone is represented adding 'Z' at the end */
if ((cTemp = const_cast<char*>(strpbrk (valueAsChar, "Z"))) != NULL)
{
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = localtime (&timeInSecs);
}
else if (cTemp2 != NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '+'));
if (cUtc == NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '-'));
}
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int hours = 0;
int mins = 0;
if (sscanf (cUtc + 1, "%d:%d", &hours, &mins) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int secs = hours * 60 * 60 + mins * 60;
if ((cTemp = strpbrk ((cUtc), "+")) != NULL)
{
timeInSecs += secs;
}
else
{
timeInSecs -= secs;
}
pTm = localtime (&timeInSecs);
memcpy (&value, pTm, sizeof (tm));
time_t t = mktime (&value);
if (t == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
t = labs (t - d);
pTm = gmtime (&t);
}
/*if the zone is not represented in the date */
else
{
/*else it is assumed that the sent time is localtime */
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = gmtime (&timeInSecs);
}
if(m_GDay)
{
delete m_GDay;
m_GDay = NULL;
}
m_GDay = new struct tm;
memcpy (m_GDay, pTm, sizeof (tm));
return m_GDay;
}
MinInclusive* GDay::getMinInclusive()
{
return new MinInclusive();
}
MinExclusive* GDay::getMinExclusive()
{
return new MinExclusive();
}
MaxInclusive* GDay::getMaxInclusive()
{
return new MaxInclusive();
}
MaxExclusive* GDay::getMaxExclusive()
{
return new MaxExclusive();
}
WhiteSpace* GDay::getWhiteSpace()
{
return new WhiteSpace(COLLAPSE);
}
AXIS_CPP_NAMESPACE_END
1.1 ws-axis/c/src/soap/xsd/GDay.hpp
Index: GDay.hpp
===================================================================
/* -*- C++ -*- */
/*
* 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 Adrian Dick (adrian.dick@uk.ibm.com)
*
*/
#if !defined(_GDAY_HPP____OF_AXIS_INCLUDED_)
#define _GDAY_HPP____OF_AXIS_INCLUDED_
#include "IAnySimpleType.hpp"
#include "constraints/MinInclusive.hpp"
#include "constraints/MinExclusive.hpp"
#include "constraints/MaxInclusive.hpp"
#include "constraints/MaxExclusive.hpp"
#include <ctime>
AXIS_CPP_NAMESPACE_START
using namespace std;
class GDay : public IAnySimpleType {
public:
/**
* Constructor
*/
GDay();
/**
* Serialize value to it's on-the-wire string form.
* @param value The value to be serialized.
* @return Serialized form of value.
*/
AxisChar* serialize(const void* value) throw (AxisSoapException);
/**
* Deserialize value from it's on-the-wire string form.
* @param valueAsChar Serialized form of value.
* @return Deserialized value.
*/
void* deserialize(const AxisChar* valueAsChar) throw (AxisSoapException);
/**
* Serialize GDay value to it's on-the-wire string form.
* @param value The GDay value to be serialized.
* @return Serialized form of GDay value.
*/
AxisChar* serialize(const struct tm* value) throw (AxisSoapException);
/**
* Deserialized GDay value from it's on-the-wire string form.
* @param valueAsChar Serialized form of GDay value.
* @return Deserialized GDay value.
*/
struct tm* deserializeGDay(const AxisChar* valueAsChar) throw (AxisSoapException);
protected:
/**
* Creates a MinInclusive object. For the GDay type this is undefined,
* so an unset MinInclusive object is created.
* @return MinInclusive object
*/
MinInclusive* getMinInclusive();
/**
* Creates a MinExclusive object. For the GDay type this is undefined,
* so an unset MinExclusive object is created.
* @return MinExclusive object
*/
MinExclusive* getMinExclusive();
/**
* Creates a MaxInclusive object. For the GDay type this is undefined,
* so an unset MaxInclusive object is created.
* @return MaxInclusive object
*/
MaxInclusive* getMaxInclusive();
/**
* Creates a MaxExclusive object. For the GDay type this is undefined,
* so an unset MaxExclusive object is created.
* @return MaxExclusive object
*/
MaxExclusive* getMaxExclusive();
/**
* Creates a WhiteSpace object to collapse whitespace
* @return WhiteSpace object set to collapse whitespace
*/
WhiteSpace* getWhiteSpace();
private:
struct tm* m_GDay;
};
AXIS_CPP_NAMESPACE_END
#endif
1.1 ws-axis/c/src/soap/xsd/GMonth.cpp
Index: GMonth.cpp
===================================================================
#include "GMonth.hpp"
AXIS_CPP_NAMESPACE_START
GMonth::GMonth():m_GMonth(NULL)
{
}
AxisChar* GMonth::serialize(const void* value) throw (AxisSoapException)
{
return serialize((struct tm*) value);
}
void* GMonth::deserialize(const AxisChar* valueAsChar) throw (AxisSoapException)
{
return (void*) deserializeGMonth(valueAsChar);
}
AxisChar* GMonth::serialize(const struct tm* value) throw (AxisSoapException)
{
MinInclusive* minInclusive = getMinInclusive();
if (minInclusive->isSet())
{
struct tm minInclusiveAsStructTM = minInclusive->getMinInclusiveAsStructTM();
if ( 0 > difftime(mktime(&minInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than MinInclusive specified for this type. MinInclusive = ";
exceptionMessage += asctime(&minInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minInclusive;
MinExclusive* minExclusive = getMinExclusive();
if (minExclusive->isSet())
{
struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM();
if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than or equal to MinExclusive specified for this type. MinExclusive = ";
exceptionMessage += asctime(&minExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minExclusive;
MaxInclusive* maxInclusive = getMaxInclusive();
if (maxInclusive->isSet())
{
struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM();
if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = ";
exceptionMessage += asctime(&maxInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxInclusive;
MaxExclusive* maxExclusive = getMaxExclusive();
if (maxExclusive->isSet())
{
struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM();
if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = ";
exceptionMessage += asctime(&maxExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxExclusive;
AxisChar* serializedValue = new AxisChar[80];
strftime (serializedValue, 80, "--%m--", value);
IAnySimpleType::serialize(serializedValue);
delete [] serializedValue;
return m_Buf;
}
struct tm* GMonth::deserializeGMonth(const AxisChar* valueAsChar) throw (AxisSoapException)
{
struct tm value;
struct tm *pTm;
AxisChar *cUtc;
AxisChar *cTemp;
AxisChar *cTemp2;
time_t now;
time (&now);
pTm = gmtime (&now);
struct tm result1;
memcpy (&result1, pTm, sizeof (tm));
pTm = localtime (&now);
struct tm result2;
memcpy (&result2, pTm, sizeof (tm));
time_t d = mktime (&result1) - mktime (&result2);
if (d == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
/* dismantle m_sValue to get tm value;
* XSD_DATETIME format is
* CCYY(-)MMZ OR
* CCYY(-)MM+/-<UTC TIME DIFFERENCE>
*/
if (sscanf (valueAsChar, "--%d--",
&value.tm_mon) != 1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
value.tm_year = 1900;
value.tm_mon--;
value.tm_mday = 0;
value.tm_hour = 0;
value.tm_min = 0;
value.tm_sec = 0;
value.tm_isdst = -1;
#if !defined(WIN32) && !defined(AIX) && !defined( __OS400__ ) && !defined(__sun)
value.tm_zone = NULL;
value.tm_gmtoff = -1;
#endif
cTemp2 = const_cast<char*>(strpbrk (valueAsChar, ":"));
/* if the timezone is represented adding 'Z' at the end */
if ((cTemp = const_cast<char*>(strpbrk (valueAsChar, "Z"))) != NULL)
{
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = localtime (&timeInSecs);
}
else if (cTemp2 != NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '+'));
if (cUtc == NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '-'));
}
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int hours = 0;
int mins = 0;
if (sscanf (cUtc + 1, "%d:%d", &hours, &mins) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int secs = hours * 60 * 60 + mins * 60;
if ((cTemp = strpbrk ((cUtc), "+")) != NULL)
{
timeInSecs += secs;
}
else
{
timeInSecs -= secs;
}
pTm = localtime (&timeInSecs);
memcpy (&value, pTm, sizeof (tm));
time_t t = mktime (&value);
if (t == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
t = labs (t - d);
pTm = gmtime (&t);
}
/*if the zone is not represented in the date */
else
{
/*else it is assumed that the sent time is localtime */
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = gmtime (&timeInSecs);
}
if(m_GMonth)
{
delete m_GMonth;
m_GMonth = NULL;
}
m_GMonth = new struct tm;
memcpy (m_GMonth, pTm, sizeof (tm));
return m_GMonth;
}
MinInclusive* GMonth::getMinInclusive()
{
return new MinInclusive();
}
MinExclusive* GMonth::getMinExclusive()
{
return new MinExclusive();
}
MaxInclusive* GMonth::getMaxInclusive()
{
return new MaxInclusive();
}
MaxExclusive* GMonth::getMaxExclusive()
{
return new MaxExclusive();
}
WhiteSpace* GMonth::getWhiteSpace()
{
return new WhiteSpace(COLLAPSE);
}
AXIS_CPP_NAMESPACE_END
1.1 ws-axis/c/src/soap/xsd/GMonth.hpp
Index: GMonth.hpp
===================================================================
/* -*- C++ -*- */
/*
* 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 Adrian Dick (adrian.dick@uk.ibm.com)
*
*/
#if !defined(_GMONTH_HPP____OF_AXIS_INCLUDED_)
#define _GMONTH_HPP____OF_AXIS_INCLUDED_
#include "IAnySimpleType.hpp"
#include "constraints/MinInclusive.hpp"
#include "constraints/MinExclusive.hpp"
#include "constraints/MaxInclusive.hpp"
#include "constraints/MaxExclusive.hpp"
#include <ctime>
AXIS_CPP_NAMESPACE_START
using namespace std;
class GMonth : public IAnySimpleType {
public:
/**
* Constructor
*/
GMonth();
/**
* Serialize value to it's on-the-wire string form.
* @param value The value to be serialized.
* @return Serialized form of value.
*/
AxisChar* serialize(const void* value) throw (AxisSoapException);
/**
* Deserialize value from it's on-the-wire string form.
* @param valueAsChar Serialized form of value.
* @return Deserialized value.
*/
void* deserialize(const AxisChar* valueAsChar) throw (AxisSoapException);
/**
* Serialize GMonth value to it's on-the-wire string form.
* @param value The GMonth value to be serialized.
* @return Serialized form of GMonth value.
*/
AxisChar* serialize(const struct tm* value) throw (AxisSoapException);
/**
* Deserialized GMonth value from it's on-the-wire string form.
* @param valueAsChar Serialized form of GMonth value.
* @return Deserialized GMonth value.
*/
struct tm* deserializeGMonth(const AxisChar* valueAsChar) throw (AxisSoapException);
protected:
/**
* Creates a MinInclusive object. For the GMonth type this is undefined,
* so an unset MinInclusive object is created.
* @return MinInclusive object
*/
MinInclusive* getMinInclusive();
/**
* Creates a MinExclusive object. For the GMonth type this is undefined,
* so an unset MinExclusive object is created.
* @return MinExclusive object
*/
MinExclusive* getMinExclusive();
/**
* Creates a MaxInclusive object. For the GMonth type this is undefined,
* so an unset MaxInclusive object is created.
* @return MaxInclusive object
*/
MaxInclusive* getMaxInclusive();
/**
* Creates a MaxExclusive object. For the GMonth type this is undefined,
* so an unset MaxExclusive object is created.
* @return MaxExclusive object
*/
MaxExclusive* getMaxExclusive();
/**
* Creates a WhiteSpace object to collapse whitespace
* @return WhiteSpace object set to collapse whitespace
*/
WhiteSpace* getWhiteSpace();
private:
struct tm* m_GMonth;
};
AXIS_CPP_NAMESPACE_END
#endif
1.1 ws-axis/c/src/soap/xsd/GMonthDay.cpp
Index: GMonthDay.cpp
===================================================================
#include "GMonthDay.hpp"
AXIS_CPP_NAMESPACE_START
GMonthDay::GMonthDay():m_GMonthDay(NULL)
{
}
AxisChar* GMonthDay::serialize(const void* value) throw (AxisSoapException)
{
return serialize((struct tm*) value);
}
void* GMonthDay::deserialize(const AxisChar* valueAsChar) throw (AxisSoapException)
{
return (void*) deserializeGMonthDay(valueAsChar);
}
AxisChar* GMonthDay::serialize(const struct tm* value) throw (AxisSoapException)
{
MinInclusive* minInclusive = getMinInclusive();
if (minInclusive->isSet())
{
struct tm minInclusiveAsStructTM = minInclusive->getMinInclusiveAsStructTM();
if ( 0 > difftime(mktime(&minInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than MinInclusive specified for this type. MinInclusive = ";
exceptionMessage += asctime(&minInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minInclusive;
MinExclusive* minExclusive = getMinExclusive();
if (minExclusive->isSet())
{
struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM();
if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than or equal to MinExclusive specified for this type. MinExclusive = ";
exceptionMessage += asctime(&minExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minExclusive;
MaxInclusive* maxInclusive = getMaxInclusive();
if (maxInclusive->isSet())
{
struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM();
if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = ";
exceptionMessage += asctime(&maxInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxInclusive;
MaxExclusive* maxExclusive = getMaxExclusive();
if (maxExclusive->isSet())
{
struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM();
if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = ";
exceptionMessage += asctime(&maxExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxExclusive;
AxisChar* serializedValue = new AxisChar[80];
strftime (serializedValue, 80, "--%m-%d", value);
IAnySimpleType::serialize(serializedValue);
delete [] serializedValue;
return m_Buf;
}
struct tm* GMonthDay::deserializeGMonthDay(const AxisChar* valueAsChar) throw (AxisSoapException)
{
struct tm value;
struct tm *pTm;
AxisChar *cUtc;
AxisChar *cTemp;
AxisChar *cTemp2;
time_t now;
time (&now);
pTm = gmtime (&now);
struct tm result1;
memcpy (&result1, pTm, sizeof (tm));
pTm = localtime (&now);
struct tm result2;
memcpy (&result2, pTm, sizeof (tm));
time_t d = mktime (&result1) - mktime (&result2);
if (d == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
/* dismantle m_sValue to get tm value;
* XSD_DATETIME format is
* CCYY(-)MMZ OR
* CCYY(-)MM+/-<UTC TIME DIFFERENCE>
*/
if (sscanf (valueAsChar, "--%d-%d", &value.tm_mon,
&value.tm_mday) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
value.tm_year = 1900;
value.tm_mon--;
value.tm_hour = 0;
value.tm_min = 0;
value.tm_sec = 0;
value.tm_isdst = -1;
#if !defined(WIN32) && !defined(AIX) && !defined( __OS400__ ) && !defined(__sun)
value.tm_zone = NULL;
value.tm_gmtoff = -1;
#endif
cTemp2 = const_cast<char*>(strpbrk (valueAsChar, ":"));
/* if the timezone is represented adding 'Z' at the end */
if ((cTemp = const_cast<char*>(strpbrk (valueAsChar, "Z"))) != NULL)
{
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = localtime (&timeInSecs);
}
else if (cTemp2 != NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '+'));
if (cUtc == NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '-'));
}
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int hours = 0;
int mins = 0;
if (sscanf (cUtc + 1, "%d:%d", &hours, &mins) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int secs = hours * 60 * 60 + mins * 60;
if ((cTemp = strpbrk ((cUtc), "+")) != NULL)
{
timeInSecs += secs;
}
else
{
timeInSecs -= secs;
}
pTm = localtime (&timeInSecs);
memcpy (&value, pTm, sizeof (tm));
time_t t = mktime (&value);
if (t == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
t = labs (t - d);
pTm = gmtime (&t);
}
/*if the zone is not represented in the date */
else
{
/*else it is assumed that the sent time is localtime */
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = gmtime (&timeInSecs);
}
if(m_GMonthDay)
{
delete m_GMonthDay;
m_GMonthDay = NULL;
}
m_GMonthDay = new struct tm;
memcpy (m_GMonthDay, pTm, sizeof (tm));
return m_GMonthDay;
}
MinInclusive* GMonthDay::getMinInclusive()
{
return new MinInclusive();
}
MinExclusive* GMonthDay::getMinExclusive()
{
return new MinExclusive();
}
MaxInclusive* GMonthDay::getMaxInclusive()
{
return new MaxInclusive();
}
MaxExclusive* GMonthDay::getMaxExclusive()
{
return new MaxExclusive();
}
WhiteSpace* GMonthDay::getWhiteSpace()
{
return new WhiteSpace(COLLAPSE);
}
AXIS_CPP_NAMESPACE_END
1.1 ws-axis/c/src/soap/xsd/GMonthDay.hpp
Index: GMonthDay.hpp
===================================================================
/* -*- C++ -*- */
/*
* 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 Adrian Dick (adrian.dick@uk.ibm.com)
*
*/
#if !defined(_GMONTHDAY_HPP____OF_AXIS_INCLUDED_)
#define _GMONTHDAY_HPP____OF_AXIS_INCLUDED_
#include "IAnySimpleType.hpp"
#include "constraints/MinInclusive.hpp"
#include "constraints/MinExclusive.hpp"
#include "constraints/MaxInclusive.hpp"
#include "constraints/MaxExclusive.hpp"
#include <ctime>
AXIS_CPP_NAMESPACE_START
using namespace std;
class GMonthDay : public IAnySimpleType {
public:
/**
* Constructor
*/
GMonthDay();
/**
* Serialize value to it's on-the-wire string form.
* @param value The value to be serialized.
* @return Serialized form of value.
*/
AxisChar* serialize(const void* value) throw (AxisSoapException);
/**
* Deserialize value from it's on-the-wire string form.
* @param valueAsChar Serialized form of value.
* @return Deserialized value.
*/
void* deserialize(const AxisChar* valueAsChar) throw (AxisSoapException);
/**
* Serialize GMonthDay value to it's on-the-wire string form.
* @param value The GMonthDay value to be serialized.
* @return Serialized form of GMonthDay value.
*/
AxisChar* serialize(const struct tm* value) throw (AxisSoapException);
/**
* Deserialized GMonthDay value from it's on-the-wire string form.
* @param valueAsChar Serialized form of GMonthDay value.
* @return Deserialized GMonthDay value.
*/
struct tm* deserializeGMonthDay(const AxisChar* valueAsChar) throw (AxisSoapException);
protected:
/**
* Creates a MinInclusive object. For the GMonthDay type this is undefined,
* so an unset MinInclusive object is created.
* @return MinInclusive object
*/
MinInclusive* getMinInclusive();
/**
* Creates a MinExclusive object. For the GMonthDay type this is undefined,
* so an unset MinExclusive object is created.
* @return MinExclusive object
*/
MinExclusive* getMinExclusive();
/**
* Creates a MaxInclusive object. For the GMonthDay type this is undefined,
* so an unset MaxInclusive object is created.
* @return MaxInclusive object
*/
MaxInclusive* getMaxInclusive();
/**
* Creates a MaxExclusive object. For the GMonthDay type this is undefined,
* so an unset MaxExclusive object is created.
* @return MaxExclusive object
*/
MaxExclusive* getMaxExclusive();
/**
* Creates a WhiteSpace object to collapse whitespace
* @return WhiteSpace object set to collapse whitespace
*/
WhiteSpace* getWhiteSpace();
private:
struct tm* m_GMonthDay;
};
AXIS_CPP_NAMESPACE_END
#endif
1.1 ws-axis/c/src/soap/xsd/GYear.cpp
Index: GYear.cpp
===================================================================
#include "GYear.hpp"
AXIS_CPP_NAMESPACE_START
GYear::GYear():m_GYear(NULL)
{
}
AxisChar* GYear::serialize(const void* value) throw (AxisSoapException)
{
return serialize((struct tm*) value);
}
void* GYear::deserialize(const AxisChar* valueAsChar) throw (AxisSoapException)
{
return (void*) deserializeGYear(valueAsChar);
}
AxisChar* GYear::serialize(const struct tm* value) throw (AxisSoapException)
{
MinInclusive* minInclusive = getMinInclusive();
if (minInclusive->isSet())
{
struct tm minInclusiveAsStructTM = minInclusive->getMinInclusiveAsStructTM();
if ( 0 > difftime(mktime(&minInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than MinInclusive specified for this type. MinInclusive = ";
exceptionMessage += asctime(&minInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minInclusive;
MinExclusive* minExclusive = getMinExclusive();
if (minExclusive->isSet())
{
struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM();
if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than or equal to MinExclusive specified for this type. MinExclusive = ";
exceptionMessage += asctime(&minExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minExclusive;
MaxInclusive* maxInclusive = getMaxInclusive();
if (maxInclusive->isSet())
{
struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM();
if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = ";
exceptionMessage += asctime(&maxInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxInclusive;
MaxExclusive* maxExclusive = getMaxExclusive();
if (maxExclusive->isSet())
{
struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM();
if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = ";
exceptionMessage += asctime(&maxExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxExclusive;
AxisChar* serializedValue = new AxisChar[80];
strftime (serializedValue, 80, "%Y", value);
IAnySimpleType::serialize(serializedValue);
delete [] serializedValue;
return m_Buf;
}
struct tm* GYear::deserializeGYear(const AxisChar* valueAsChar) throw (AxisSoapException)
{
struct tm value;
struct tm *pTm;
AxisChar *cUtc;
AxisChar *cTemp;
AxisChar *cTemp2;
time_t now;
time (&now);
pTm = gmtime (&now);
struct tm result1;
memcpy (&result1, pTm, sizeof (tm));
pTm = localtime (&now);
struct tm result2;
memcpy (&result2, pTm, sizeof (tm));
time_t d = mktime (&result1) - mktime (&result2);
if (d == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
/* dismantle m_sValue to get tm value;
* XSD_DATETIME format is
* CCYY(-)MMZ OR
* CCYY(-)MM+/-<UTC TIME DIFFERENCE>
*/
if (sscanf (valueAsChar, "%d", &value.tm_year) != 1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
value.tm_year -= 1900;
value.tm_mon = 0;
value.tm_mday = 0;
value.tm_hour = 0;
value.tm_min = 0;
value.tm_sec = 0;
value.tm_isdst = -1;
#if !defined(WIN32) && !defined(AIX) && !defined( __OS400__ ) && !defined(__sun)
value.tm_zone = NULL;
value.tm_gmtoff = -1;
#endif
cTemp2 = const_cast<char*>(strpbrk (valueAsChar, ":"));
/* if the timezone is represented adding 'Z' at the end */
if ((cTemp = const_cast<char*>(strpbrk (valueAsChar, "Z"))) != NULL)
{
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = localtime (&timeInSecs);
}
else if (cTemp2 != NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '+'));
if (cUtc == NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '-'));
}
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int hours = 0;
int mins = 0;
if (sscanf (cUtc + 1, "%d:%d", &hours, &mins) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int secs = hours * 60 * 60 + mins * 60;
if ((cTemp = strpbrk ((cUtc), "+")) != NULL)
{
timeInSecs += secs;
}
else
{
timeInSecs -= secs;
}
pTm = localtime (&timeInSecs);
memcpy (&value, pTm, sizeof (tm));
time_t t = mktime (&value);
if (t == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
t = labs (t - d);
pTm = gmtime (&t);
}
/*if the zone is not represented in the date */
else
{
/*else it is assumed that the sent time is localtime */
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = gmtime (&timeInSecs);
}
if(m_GYear)
{
delete m_GYear;
m_GYear = NULL;
}
m_GYear = new struct tm;
memcpy (m_GYear, pTm, sizeof (tm));
return m_GYear;
}
MinInclusive* GYear::getMinInclusive()
{
return new MinInclusive();
}
MinExclusive* GYear::getMinExclusive()
{
return new MinExclusive();
}
MaxInclusive* GYear::getMaxInclusive()
{
return new MaxInclusive();
}
MaxExclusive* GYear::getMaxExclusive()
{
return new MaxExclusive();
}
WhiteSpace* GYear::getWhiteSpace()
{
return new WhiteSpace(COLLAPSE);
}
AXIS_CPP_NAMESPACE_END
1.1 ws-axis/c/src/soap/xsd/GYear.hpp
Index: GYear.hpp
===================================================================
/* -*- C++ -*- */
/*
* 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 Adrian Dick (adrian.dick@uk.ibm.com)
*
*/
#if !defined(_GYEAR_HPP____OF_AXIS_INCLUDED_)
#define _GYEAR_HPP____OF_AXIS_INCLUDED_
#include "IAnySimpleType.hpp"
#include "constraints/MinInclusive.hpp"
#include "constraints/MinExclusive.hpp"
#include "constraints/MaxInclusive.hpp"
#include "constraints/MaxExclusive.hpp"
#include <ctime>
AXIS_CPP_NAMESPACE_START
using namespace std;
class GYear : public IAnySimpleType {
public:
/**
* Constructor
*/
GYear();
/**
* Serialize value to it's on-the-wire string form.
* @param value The value to be serialized.
* @return Serialized form of value.
*/
AxisChar* serialize(const void* value) throw (AxisSoapException);
/**
* Deserialize value from it's on-the-wire string form.
* @param valueAsChar Serialized form of value.
* @return Deserialized value.
*/
void* deserialize(const AxisChar* valueAsChar) throw (AxisSoapException);
/**
* Serialize GYear value to it's on-the-wire string form.
* @param value The GYear value to be serialized.
* @return Serialized form of GYear value.
*/
AxisChar* serialize(const struct tm* value) throw (AxisSoapException);
/**
* Deserialized GYear value from it's on-the-wire string form.
* @param valueAsChar Serialized form of GYear value.
* @return Deserialized GYear value.
*/
struct tm* deserializeGYear(const AxisChar* valueAsChar) throw (AxisSoapException);
protected:
/**
* Creates a MinInclusive object. For the GYear type this is undefined,
* so an unset MinInclusive object is created.
* @return MinInclusive object
*/
MinInclusive* getMinInclusive();
/**
* Creates a MinExclusive object. For the GYear type this is undefined,
* so an unset MinExclusive object is created.
* @return MinExclusive object
*/
MinExclusive* getMinExclusive();
/**
* Creates a MaxInclusive object. For the GYear type this is undefined,
* so an unset MaxInclusive object is created.
* @return MaxInclusive object
*/
MaxInclusive* getMaxInclusive();
/**
* Creates a MaxExclusive object. For the GYear type this is undefined,
* so an unset MaxExclusive object is created.
* @return MaxExclusive object
*/
MaxExclusive* getMaxExclusive();
/**
* Creates a WhiteSpace object to collapse whitespace
* @return WhiteSpace object set to collapse whitespace
*/
WhiteSpace* getWhiteSpace();
private:
struct tm* m_GYear;
};
AXIS_CPP_NAMESPACE_END
#endif
1.1 ws-axis/c/src/soap/xsd/GYearMonth.cpp
Index: GYearMonth.cpp
===================================================================
#include "GYearMonth.hpp"
AXIS_CPP_NAMESPACE_START
GYearMonth::GYearMonth():m_GYearMonth(NULL)
{
}
AxisChar* GYearMonth::serialize(const void* value) throw (AxisSoapException)
{
return serialize((struct tm*) value);
}
void* GYearMonth::deserialize(const AxisChar* valueAsChar) throw (AxisSoapException)
{
return (void*) deserializeGYearMonth(valueAsChar);
}
AxisChar* GYearMonth::serialize(const struct tm* value) throw (AxisSoapException)
{
MinInclusive* minInclusive = getMinInclusive();
if (minInclusive->isSet())
{
struct tm minInclusiveAsStructTM = minInclusive->getMinInclusiveAsStructTM();
if ( 0 > difftime(mktime(&minInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than MinInclusive specified for this type. MinInclusive = ";
exceptionMessage += asctime(&minInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minInclusive;
MinExclusive* minExclusive = getMinExclusive();
if (minExclusive->isSet())
{
struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM();
if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is less than or equal to MinExclusive specified for this type. MinExclusive = ";
exceptionMessage += asctime(&minExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete minExclusive;
MaxInclusive* maxInclusive = getMaxInclusive();
if (maxInclusive->isSet())
{
struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM();
if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = ";
exceptionMessage += asctime(&maxInclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxInclusive;
MaxExclusive* maxExclusive = getMaxExclusive();
if (maxExclusive->isSet())
{
struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM();
if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast<struct tm*>(value))) )
{
AxisString exceptionMessage =
"Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = ";
exceptionMessage += asctime(&maxExclusiveAsStructTM);
exceptionMessage += ", Value = ";
exceptionMessage += asctime(value);
exceptionMessage += ".";
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR,
const_cast<AxisChar*>(exceptionMessage.c_str()));
}
}
delete maxExclusive;
AxisChar* serializedValue = new AxisChar[80];
strftime (serializedValue, 80, "%Y-%m", value);
IAnySimpleType::serialize(serializedValue);
delete [] serializedValue;
return m_Buf;
}
struct tm* GYearMonth::deserializeGYearMonth(const AxisChar* valueAsChar) throw (AxisSoapException)
{
struct tm value;
struct tm *pTm;
AxisChar *cUtc;
AxisChar *cTemp;
AxisChar *cTemp2;
time_t now;
time (&now);
pTm = gmtime (&now);
struct tm result1;
memcpy (&result1, pTm, sizeof (tm));
pTm = localtime (&now);
struct tm result2;
memcpy (&result2, pTm, sizeof (tm));
time_t d = mktime (&result1) - mktime (&result2);
if (d == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
/* dismantle m_sValue to get tm value;
* XSD_DATETIME format is
* CCYY(-)MMZ OR
* CCYY(-)MM+/-<UTC TIME DIFFERENCE>
*/
if (sscanf (valueAsChar, "%d-%d", &value.tm_year,
&value.tm_mon) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
value.tm_year -= 1900;
value.tm_mon--;
value.tm_mday = 0;
value.tm_hour = 0;
value.tm_min = 0;
value.tm_sec = 0;
value.tm_isdst = -1;
#if !defined(WIN32) && !defined(AIX) && !defined( __OS400__ ) && !defined(__sun)
value.tm_zone = NULL;
value.tm_gmtoff = -1;
#endif
cTemp2 = const_cast<char*>(strpbrk (valueAsChar, ":"));
/* if the timezone is represented adding 'Z' at the end */
if ((cTemp = const_cast<char*>(strpbrk (valueAsChar, "Z"))) != NULL)
{
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = localtime (&timeInSecs);
}
else if (cTemp2 != NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '+'));
if (cUtc == NULL)
{
cUtc = const_cast<char*>(strrchr (valueAsChar, '-'));
}
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int hours = 0;
int mins = 0;
if (sscanf (cUtc + 1, "%d:%d", &hours, &mins) != 2)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
int secs = hours * 60 * 60 + mins * 60;
if ((cTemp = strpbrk ((cUtc), "+")) != NULL)
{
timeInSecs += secs;
}
else
{
timeInSecs -= secs;
}
pTm = localtime (&timeInSecs);
memcpy (&value, pTm, sizeof (tm));
time_t t = mktime (&value);
if (t == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
t = labs (t - d);
pTm = gmtime (&t);
}
/*if the zone is not represented in the date */
else
{
/*else it is assumed that the sent time is localtime */
time_t timeInSecs = mktime (&value);
if (timeInSecs == -1)
{
throw new AxisSoapException(CLIENT_SOAP_SOAP_CONTENT_ERROR);
}
pTm = gmtime (&timeInSecs);
}
if(m_GYearMonth)
{
delete m_GYearMonth;
m_GYearMonth = NULL;
}
m_GYearMonth = new struct tm;
memcpy (m_GYearMonth, pTm, sizeof (tm));
return m_GYearMonth;
}
MinInclusive* GYearMonth::getMinInclusive()
{
return new MinInclusive();
}
MinExclusive* GYearMonth::getMinExclusive()
{
return new MinExclusive();
}
MaxInclusive* GYearMonth::getMaxInclusive()
{
return new MaxInclusive();
}
MaxExclusive* GYearMonth::getMaxExclusive()
{
return new MaxExclusive();
}
WhiteSpace* GYearMonth::getWhiteSpace()
{
return new WhiteSpace(COLLAPSE);
}
AXIS_CPP_NAMESPACE_END
1.1 ws-axis/c/src/soap/xsd/GYearMonth.hpp
Index: GYearMonth.hpp
===================================================================
/* -*- C++ -*- */
/*
* 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 Adrian Dick (adrian.dick@uk.ibm.com)
*
*/
#if !defined(_GYEARMONTH_HPP____OF_AXIS_INCLUDED_)
#define _GYEARMONTH_HPP____OF_AXIS_INCLUDED_
#include "IAnySimpleType.hpp"
#include "constraints/MinInclusive.hpp"
#include "constraints/MinExclusive.hpp"
#include "constraints/MaxInclusive.hpp"
#include "constraints/MaxExclusive.hpp"
#include <ctime>
AXIS_CPP_NAMESPACE_START
using namespace std;
class GYearMonth : public IAnySimpleType {
public:
/**
* Constructor
*/
GYearMonth();
/**
* Serialize value to it's on-the-wire string form.
* @param value The value to be serialized.
* @return Serialized form of value.
*/
AxisChar* serialize(const void* value) throw (AxisSoapException);
/**
* Deserialize value from it's on-the-wire string form.
* @param valueAsChar Serialized form of value.
* @return Deserialized value.
*/
void* deserialize(const AxisChar* valueAsChar) throw (AxisSoapException);
/**
* Serialize GYearMonth value to it's on-the-wire string form.
* @param value The GYearMonth value to be serialized.
* @return Serialized form of GYearMonth value.
*/
AxisChar* serialize(const struct tm* value) throw (AxisSoapException);
/**
* Deserialized GYearMonth value from it's on-the-wire string form.
* @param valueAsChar Serialized form of GYearMonth value.
* @return Deserialized GYearMonth value.
*/
struct tm* deserializeGYearMonth(const AxisChar* valueAsChar) throw (AxisSoapException);
protected:
/**
* Creates a MinInclusive object. For the GYearMonth type this is undefined,
* so an unset MinInclusive object is created.
* @return MinInclusive object
*/
MinInclusive* getMinInclusive();
/**
* Creates a MinExclusive object. For the GYearMonth type this is undefined,
* so an unset MinExclusive object is created.
* @return MinExclusive object
*/
MinExclusive* getMinExclusive();
/**
* Creates a MaxInclusive object. For the GYearMonth type this is undefined,
* so an unset MaxInclusive object is created.
* @return MaxInclusive object
*/
MaxInclusive* getMaxInclusive();
/**
* Creates a MaxExclusive object. For the GYearMonth type this is undefined,
* so an unset MaxExclusive object is created.
* @return MaxExclusive object
*/
MaxExclusive* getMaxExclusive();
/**
* Creates a WhiteSpace object to collapse whitespace
* @return WhiteSpace object set to collapse whitespace
*/
WhiteSpace* getWhiteSpace();
private:
struct tm* m_GYearMonth;
};
AXIS_CPP_NAMESPACE_END
#endif