Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 26220 invoked from network); 25 Jan 2005 18:08:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 25 Jan 2005 18:08:36 -0000 Received: (qmail 37849 invoked by uid 500); 25 Jan 2005 18:08:33 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 37809 invoked by uid 500); 25 Jan 2005 18:08:33 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 37788 invoked by uid 99); 25 Jan 2005 18:08:32 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Tue, 25 Jan 2005 10:08:31 -0800 Received: (qmail 26167 invoked by uid 1877); 25 Jan 2005 18:08:30 -0000 Date: 25 Jan 2005 18:08:30 -0000 Message-ID: <20050125180830.26166.qmail@minotaur.apache.org> From: dicka@apache.org To: ws-axis-cvs@apache.org Subject: 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 X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N 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(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(exceptionMessage.c_str())); } } delete minInclusive; MinExclusive* minExclusive = getMinExclusive(); if (minExclusive->isSet()) { struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM(); if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete minExclusive; MaxInclusive* maxInclusive = getMaxInclusive(); if (maxInclusive->isSet()) { struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM(); if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete maxInclusive; MaxExclusive* maxExclusive = getMaxExclusive(); if (maxExclusive->isSet()) { struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM(); if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast(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(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+/- */ 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(strpbrk (valueAsChar, ":")); /* if the timezone is represented adding 'Z' at the end */ if ((cTemp = const_cast(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(strrchr (valueAsChar, '+')); if (cUtc == NULL) { cUtc = const_cast(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 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(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(exceptionMessage.c_str())); } } delete minInclusive; MinExclusive* minExclusive = getMinExclusive(); if (minExclusive->isSet()) { struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM(); if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete minExclusive; MaxInclusive* maxInclusive = getMaxInclusive(); if (maxInclusive->isSet()) { struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM(); if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete maxInclusive; MaxExclusive* maxExclusive = getMaxExclusive(); if (maxExclusive->isSet()) { struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM(); if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast(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(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+/- */ 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(strpbrk (valueAsChar, ":")); /* if the timezone is represented adding 'Z' at the end */ if ((cTemp = const_cast(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(strrchr (valueAsChar, '+')); if (cUtc == NULL) { cUtc = const_cast(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 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(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(exceptionMessage.c_str())); } } delete minInclusive; MinExclusive* minExclusive = getMinExclusive(); if (minExclusive->isSet()) { struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM(); if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete minExclusive; MaxInclusive* maxInclusive = getMaxInclusive(); if (maxInclusive->isSet()) { struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM(); if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete maxInclusive; MaxExclusive* maxExclusive = getMaxExclusive(); if (maxExclusive->isSet()) { struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM(); if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast(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(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+/- */ 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(strpbrk (valueAsChar, ":")); /* if the timezone is represented adding 'Z' at the end */ if ((cTemp = const_cast(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(strrchr (valueAsChar, '+')); if (cUtc == NULL) { cUtc = const_cast(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 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(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(exceptionMessage.c_str())); } } delete minInclusive; MinExclusive* minExclusive = getMinExclusive(); if (minExclusive->isSet()) { struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM(); if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete minExclusive; MaxInclusive* maxInclusive = getMaxInclusive(); if (maxInclusive->isSet()) { struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM(); if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete maxInclusive; MaxExclusive* maxExclusive = getMaxExclusive(); if (maxExclusive->isSet()) { struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM(); if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast(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(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+/- */ 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(strpbrk (valueAsChar, ":")); /* if the timezone is represented adding 'Z' at the end */ if ((cTemp = const_cast(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(strrchr (valueAsChar, '+')); if (cUtc == NULL) { cUtc = const_cast(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 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(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(exceptionMessage.c_str())); } } delete minInclusive; MinExclusive* minExclusive = getMinExclusive(); if (minExclusive->isSet()) { struct tm minExclusiveAsStructTM = minExclusive->getMinExclusiveAsStructTM(); if ( 0 >= difftime(mktime(&minExclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete minExclusive; MaxInclusive* maxInclusive = getMaxInclusive(); if (maxInclusive->isSet()) { struct tm maxInclusiveAsStructTM = maxInclusive->getMaxInclusiveAsStructTM(); if ( 0 < difftime(mktime(&maxInclusiveAsStructTM), mktime(const_cast(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(exceptionMessage.c_str())); } } delete maxInclusive; MaxExclusive* maxExclusive = getMaxExclusive(); if (maxExclusive->isSet()) { struct tm maxExclusiveAsStructTM = maxExclusive->getMaxExclusiveAsStructTM(); if ( 0 <= difftime(mktime(&maxExclusiveAsStructTM), mktime(const_cast(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(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+/- */ 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(strpbrk (valueAsChar, ":")); /* if the timezone is represented adding 'Z' at the end */ if ((cTemp = const_cast(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(strrchr (valueAsChar, '+')); if (cUtc == NULL) { cUtc = const_cast(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 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