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/06/14 13:57:04 UTC
cvs commit: ws-axis/c/tests/auto_build/testcases/output XSDElement.expected
dicka 2005/06/14 04:57:04
Modified: c/src/soap/xsd Integer.cpp NonNegativeInteger.cpp
NonPositiveInteger.cpp
c/tests/auto_build/testcases/client/cpp XSDElementClient.cpp
c/tests/auto_build/testcases/output XSDElement.expected
Log:
Resolve problem wiht deserializing large xsd:long values.
Improved XSDElement testcase to check upper and lower limites of xsd:long.
PR: AXISCPP-690
Submitted by: Adrian Dick
Revision Changes Path
1.14 +30 -6 ws-axis/c/src/soap/xsd/Integer.cpp
Index: Integer.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Integer.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Integer.cpp 1 Jun 2005 14:22:56 -0000 1.13
+++ Integer.cpp 14 Jun 2005 11:57:04 -0000 1.14
@@ -108,7 +108,7 @@
if ( *value > maxInclusive->getMaxInclusiveAsLONGLONG() )
{
AxisString exceptionMessage =
- "Value to be serialized is less than MaxInclusive specified for this type. MaxInclusive = ";
+ "Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = ";
AxisChar* length = new AxisChar[25];
sprintf(length, PRINTF_LONGLONG_FORMAT_SPECIFIER, maxInclusive->getMaxInclusiveAsLONGLONG());
exceptionMessage += length;
@@ -130,7 +130,7 @@
if ( *value >= maxExclusive->getMaxExclusiveAsLONGLONG() )
{
AxisString exceptionMessage =
- "Value to be serialized is less than or equal to MaxExclusive specified for this type. MaxExclusive = ";
+ "Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = ";
AxisChar* length = new AxisChar[25];
sprintf(length, PRINTF_LONGLONG_FORMAT_SPECIFIER, maxExclusive->getMaxExclusiveAsLONGLONG());
exceptionMessage += length;
@@ -172,11 +172,35 @@
xsd__integer* Integer::deserializeInteger(const AxisChar* valueAsChar) throw (AxisSoapException)
{
- AxisChar* end;
-
xsd__integer * value = new xsd__integer;
- *value = strtol (valueAsChar, &end, 10);
-
+ *value = 0;
+ AxisChar currentNumber[] = {'\0', '\0'};
+ int stringLength = strlen(valueAsChar);
+
+ if (stringLength > 0)
+ {
+ int count = 0;
+
+ if (valueAsChar[0] == '-')
+ {
+ count = 1;
+ }
+
+ for ( ; count < stringLength ; count ++)
+ {
+ *value *= 10;
+
+ currentNumber[0] = valueAsChar[count];
+
+ *value += atoi(currentNumber);
+ }
+
+ if (valueAsChar[0] == '-')
+ {
+ *value *= -1;
+ }
+ }
+
return value;
}
1.13 +5 -5 ws-axis/c/src/soap/xsd/NonNegativeInteger.cpp
Index: NonNegativeInteger.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/xsd/NonNegativeInteger.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- NonNegativeInteger.cpp 1 Jun 2005 14:22:56 -0000 1.12
+++ NonNegativeInteger.cpp 14 Jun 2005 11:57:04 -0000 1.13
@@ -172,11 +172,11 @@
xsd__nonNegativeInteger* NonNegativeInteger::deserializeNonNegativeInteger(const AxisChar* valueAsChar) throw (AxisSoapException)
{
- AxisChar* end;
-
- xsd__nonNegativeInteger * value = new xsd__nonNegativeInteger;
- *value = strtol (valueAsChar, &end, 10);
-
+ xsd__integer* returnValue = Integer::deserializeInteger(valueAsChar);
+
+ xsd__nonNegativeInteger * value = new xsd__nonNegativeInteger;
+ *value = static_cast<xsd__nonNegativeInteger> (*returnValue);
+ delete returnValue;
return value;
}
1.8 +8 -9 ws-axis/c/src/soap/xsd/NonPositiveInteger.cpp
Index: NonPositiveInteger.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/src/soap/xsd/NonPositiveInteger.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- NonPositiveInteger.cpp 1 Jun 2005 14:22:56 -0000 1.7
+++ NonPositiveInteger.cpp 14 Jun 2005 11:57:04 -0000 1.8
@@ -109,7 +109,7 @@
if ( *value < maxInclusive->getMaxInclusiveAsUnsignedLONGLONG() )
{
AxisString exceptionMessage =
- "Value to be serialized is less than MaxInclusive specified for this type. MaxInclusive = -";
+ "Value to be serialized is greater than MaxInclusive specified for this type. MaxInclusive = -";
AxisChar* length = new AxisChar[25];
sprintf(length, PRINTF_LONGLONG_FORMAT_SPECIFIER, maxInclusive->getMaxInclusiveAsUnsignedLONGLONG());
exceptionMessage += length;
@@ -131,7 +131,7 @@
if ( *value <= maxExclusive->getMaxExclusiveAsUnsignedLONGLONG() )
{
AxisString exceptionMessage =
- "Value to be serialized is less than or equal to MaxExclusive specified for this type. MaxExclusive = -";
+ "Value to be serialized is greater than or equal to MaxExclusive specified for this type. MaxExclusive = -";
AxisChar* length = new AxisChar[25];
sprintf(length, PRINTF_LONGLONG_FORMAT_SPECIFIER, maxExclusive->getMaxExclusiveAsUnsignedLONGLONG());
exceptionMessage += length;
@@ -181,20 +181,19 @@
unsigned LONGLONG* NonPositiveInteger::deserializeNonPositiveInteger(const AxisChar* valueAsChar) throw (AxisSoapException)
{
- AxisChar* end;
-
- xsd__nonPositiveInteger * value = new xsd__nonPositiveInteger;
+ xsd__integer* returnValue = NULL;
if (*valueAsChar == '-')
{
- const AxisChar* tempVar = valueAsChar + 1;
- *value = strtol (tempVar, &end, 10);
+ returnValue = Integer::deserializeInteger(valueAsChar + 1);
}
else
{
-
- *value = strtol (valueAsChar, &end, 10);
+ returnValue = Integer::deserializeInteger(valueAsChar);
}
+ xsd__nonPositiveInteger * value = new xsd__nonPositiveInteger;
+ *value = static_cast<xsd__nonPositiveInteger> (*returnValue);
+ delete returnValue;
return value;
}
1.10 +17 -1 ws-axis/c/tests/auto_build/testcases/client/cpp/XSDElementClient.cpp
Index: XSDElementClient.cpp
===================================================================
RCS file: /home/cvs/ws-axis/c/tests/auto_build/testcases/client/cpp/XSDElementClient.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XSDElementClient.cpp 1 Jun 2005 14:23:00 -0000 1.9
+++ XSDElementClient.cpp 14 Jun 2005 11:57:04 -0000 1.10
@@ -50,7 +50,7 @@
// Cannot print an __int64 number with cout without this overloading
std::ostream& operator<<(std::ostream& os, __int64 i )
{
- char buf[20];
+ char buf[40];
sprintf(buf,"%I64d", i );
os << buf;
return os;
@@ -134,6 +134,22 @@
lResult = ws->setGetDataLong((xsd__long)35);
cout << "long=" << lResult << endl;
+#ifdef WIN32
+ xsd__long longInput = 10000000000I64;
+ xsd__long longMaxInput = 9223372036854775807I64;
+ xsd__long longMinInput = -9223372036854775808I64 ;
+#else
+ xsd__long longInput = 10000000000LL;
+ xsd__long longMaxInput = 9223372036854775807LL;
+ xsd__long longMinInput = -9223372036854775808LL;
+#endif
+ lResult = ws->setGetDataLong((xsd__long) longInput);
+ cout << "long=" << lResult << endl;
+ lResult = ws->setGetDataLong((xsd__long) longMaxInput);
+ cout << "MaxInclusive long=" << lResult << endl;
+ lResult = ws->setGetDataLong((xsd__long) longMinInput);
+ cout << "MinInclusive long=" << lResult << endl;
+
ulResult = ws->setGetDataUnsignedLong((xsd__unsignedLong)42);
printf("unsigned long=%d\n", ulResult);
1.6 +3 -0 ws-axis/c/tests/auto_build/testcases/output/XSDElement.expected
Index: XSDElement.expected
===================================================================
RCS file: /home/cvs/ws-axis/c/tests/auto_build/testcases/output/XSDElement.expected,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XSDElement.expected 24 Mar 2005 14:27:18 -0000 1.5
+++ XSDElement.expected 14 Jun 2005 11:57:04 -0000 1.6
@@ -6,6 +6,9 @@
int=21
unsigned int=28
long=35
+long=10000000000
+MaxInclusive long=9223372036854775807
+MinInclusive long=-9223372036854775808
unsigned long=42
float=35.35359
double=70.71759