Handle decoding of simple unknown types as strings, otherwise as variants

within arrays.

SOAP is not part of default build.
This commit is contained in:
rayw%netscape.com 2002-01-24 02:57:31 +00:00
Родитель 7c49f258fd
Коммит 212bb6a3e2
2 изменённых файлов: 30 добавлений и 12 удалений

Просмотреть файл

@ -1733,14 +1733,11 @@ NS_IMETHODIMP
#define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE, Test, Ref) \ #define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE, Test, Ref) \
DECODE_ARRAY(XPType, VTYPE, Test, nsnull, rc = v->GetAs##VType(Ref(a + p));if(NS_FAILED(rc))break;) DECODE_ARRAY(XPType, VTYPE, Test, nsnull, rc = v->GetAs##VType(Ref(a + p));if(NS_FAILED(rc))break;)
if (NS_FAILED(rc)) if (NS_FAILED(rc))
return rc; return rc;
PRBool unhandled = PR_FALSE; PRBool unhandled = PR_FALSE;
if (ns.Equals(*nsSOAPUtils::kXSURI[mSchemaVersion])) { if (ns.Equals(*nsSOAPUtils::kXSURI[mSchemaVersion])) {
if (name.Equals(kStringSchemaType)) { if (name.Equals(kBooleanSchemaType)) {
DECODE_SIMPLE_ARRAY(nsString,AString,ASTRING,!a[p].IsEmpty(),*);
} else if (name.Equals(kBooleanSchemaType)) {
DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL,a[p],); DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL,a[p],);
} else if (name.Equals(kFloatSchemaType)) { } else if (name.Equals(kFloatSchemaType)) {
DECODE_SIMPLE_ARRAY(float,Float,FLOAT,a[p],); DECODE_SIMPLE_ARRAY(float,Float,FLOAT,a[p],);
@ -1768,8 +1765,20 @@ NS_IMETHODIMP
} else { } else {
unhandled = PR_TRUE; unhandled = PR_TRUE;
} }
if (unhandled) { // Handle all the other cases as variants. if (unhandled) { // Handle all the other cases
DECODE_ARRAY(nsIVariant*,INTERFACE,a[p],&NS_GET_IID(nsIVariant),a[p] = v;); if (subtype) {
PRUint16 typevalue;
nsresult rc = aSchemaType->GetSchemaType(&typevalue);
if (NS_FAILED(rc))
return rc;
if (typevalue != nsISchemaType::SCHEMA_TYPE_COMPLEX) {// Simple == string
DECODE_SIMPLE_ARRAY(nsString,AString,ASTRING,!a[p].IsEmpty(),*);
unhandled = PR_FALSE;
}
}
if (unhandled) { // Handle all the other cases as variants.
DECODE_ARRAY(nsIVariant*,INTERFACE,a[p],&NS_GET_IID(nsIVariant),a[p] = v;);
}
} }
*_retval = result; *_retval = result;
NS_ADDREF(*_retval); NS_ADDREF(*_retval);

Просмотреть файл

@ -1733,14 +1733,11 @@ NS_IMETHODIMP
#define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE, Test, Ref) \ #define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE, Test, Ref) \
DECODE_ARRAY(XPType, VTYPE, Test, nsnull, rc = v->GetAs##VType(Ref(a + p));if(NS_FAILED(rc))break;) DECODE_ARRAY(XPType, VTYPE, Test, nsnull, rc = v->GetAs##VType(Ref(a + p));if(NS_FAILED(rc))break;)
if (NS_FAILED(rc)) if (NS_FAILED(rc))
return rc; return rc;
PRBool unhandled = PR_FALSE; PRBool unhandled = PR_FALSE;
if (ns.Equals(*nsSOAPUtils::kXSURI[mSchemaVersion])) { if (ns.Equals(*nsSOAPUtils::kXSURI[mSchemaVersion])) {
if (name.Equals(kStringSchemaType)) { if (name.Equals(kBooleanSchemaType)) {
DECODE_SIMPLE_ARRAY(nsString,AString,ASTRING,!a[p].IsEmpty(),*);
} else if (name.Equals(kBooleanSchemaType)) {
DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL,a[p],); DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL,a[p],);
} else if (name.Equals(kFloatSchemaType)) { } else if (name.Equals(kFloatSchemaType)) {
DECODE_SIMPLE_ARRAY(float,Float,FLOAT,a[p],); DECODE_SIMPLE_ARRAY(float,Float,FLOAT,a[p],);
@ -1768,8 +1765,20 @@ NS_IMETHODIMP
} else { } else {
unhandled = PR_TRUE; unhandled = PR_TRUE;
} }
if (unhandled) { // Handle all the other cases as variants. if (unhandled) { // Handle all the other cases
DECODE_ARRAY(nsIVariant*,INTERFACE,a[p],&NS_GET_IID(nsIVariant),a[p] = v;); if (subtype) {
PRUint16 typevalue;
nsresult rc = aSchemaType->GetSchemaType(&typevalue);
if (NS_FAILED(rc))
return rc;
if (typevalue != nsISchemaType::SCHEMA_TYPE_COMPLEX) {// Simple == string
DECODE_SIMPLE_ARRAY(nsString,AString,ASTRING,!a[p].IsEmpty(),*);
unhandled = PR_FALSE;
}
}
if (unhandled) { // Handle all the other cases as variants.
DECODE_ARRAY(nsIVariant*,INTERFACE,a[p],&NS_GET_IID(nsIVariant),a[p] = v;);
}
} }
*_retval = result; *_retval = result;
NS_ADDREF(*_retval); NS_ADDREF(*_retval);