зеркало из https://github.com/mozilla/gecko-dev.git
A number of SOAP bug fixes including fixing problems with fault handling,
using wstrings instead of astrings for arrays, and ignoring the http status and returning a fault code when there is one. SOAP is not part of default build.
This commit is contained in:
Родитель
ce97c2d3fb
Коммит
1052d001e8
|
@ -38,6 +38,11 @@ interface nsISOAPFault:nsISupports {
|
||||||
*/
|
*/
|
||||||
attribute nsIDOMElement element;
|
attribute nsIDOMElement element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The namespaceURI of the fault code.
|
||||||
|
*/
|
||||||
|
readonly attribute AString faultNamespaceURI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The fault code
|
* The fault code
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -48,64 +48,64 @@
|
||||||
#include "nsIPropertyBag.h"
|
#include "nsIPropertyBag.h"
|
||||||
#include "nsSupportsArray.h"
|
#include "nsSupportsArray.h"
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kEmpty, "");
|
static NS_NAMED_LITERAL_STRING(kEmpty, "");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kSOAPArrayTypeAttribute, "arrayType");
|
static NS_NAMED_LITERAL_STRING(kSOAPArrayTypeAttribute, "arrayType");
|
||||||
NS_NAMED_LITERAL_STRING(kSOAPArrayOffsetAttribute, "offset");
|
static NS_NAMED_LITERAL_STRING(kSOAPArrayOffsetAttribute, "offset");
|
||||||
NS_NAMED_LITERAL_STRING(kSOAPArrayPositionAttribute, "position");
|
static NS_NAMED_LITERAL_STRING(kSOAPArrayPositionAttribute, "position");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kAnyTypeSchemaType, "anyType");
|
static NS_NAMED_LITERAL_STRING(kAnyTypeSchemaType, "anyType");
|
||||||
NS_NAMED_LITERAL_STRING(kAnySimpleTypeSchemaType, "anySimpleType");
|
static NS_NAMED_LITERAL_STRING(kAnySimpleTypeSchemaType, "anySimpleType");
|
||||||
NS_NAMED_LITERAL_STRING(kArraySOAPType, "Array");
|
static NS_NAMED_LITERAL_STRING(kArraySOAPType, "Array");
|
||||||
NS_NAMED_LITERAL_STRING(kStructSOAPType, "Struct");
|
static NS_NAMED_LITERAL_STRING(kStructSOAPType, "Struct");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kStringSchemaType, "string");
|
static NS_NAMED_LITERAL_STRING(kStringSchemaType, "string");
|
||||||
NS_NAMED_LITERAL_STRING(kBooleanSchemaType, "boolean");
|
static NS_NAMED_LITERAL_STRING(kBooleanSchemaType, "boolean");
|
||||||
NS_NAMED_LITERAL_STRING(kFloatSchemaType, "float");
|
static NS_NAMED_LITERAL_STRING(kFloatSchemaType, "float");
|
||||||
NS_NAMED_LITERAL_STRING(kDoubleSchemaType, "double");
|
static NS_NAMED_LITERAL_STRING(kDoubleSchemaType, "double");
|
||||||
NS_NAMED_LITERAL_STRING(kLongSchemaType, "long");
|
static NS_NAMED_LITERAL_STRING(kLongSchemaType, "long");
|
||||||
NS_NAMED_LITERAL_STRING(kIntSchemaType, "int");
|
static NS_NAMED_LITERAL_STRING(kIntSchemaType, "int");
|
||||||
NS_NAMED_LITERAL_STRING(kShortSchemaType, "short");
|
static NS_NAMED_LITERAL_STRING(kShortSchemaType, "short");
|
||||||
NS_NAMED_LITERAL_STRING(kByteSchemaType, "byte");
|
static NS_NAMED_LITERAL_STRING(kByteSchemaType, "byte");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedLongSchemaType, "unsignedLong");
|
static NS_NAMED_LITERAL_STRING(kUnsignedLongSchemaType, "unsignedLong");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedIntSchemaType, "unsignedInt");
|
static NS_NAMED_LITERAL_STRING(kUnsignedIntSchemaType, "unsignedInt");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedShortSchemaType, "unsignedShort");
|
static NS_NAMED_LITERAL_STRING(kUnsignedShortSchemaType, "unsignedShort");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedByteSchemaType, "unsignedByte");
|
static NS_NAMED_LITERAL_STRING(kUnsignedByteSchemaType, "unsignedByte");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kDurationSchemaType, "duration");
|
static NS_NAMED_LITERAL_STRING(kDurationSchemaType, "duration");
|
||||||
NS_NAMED_LITERAL_STRING(kDateTimeSchemaType, "dateTime");
|
static NS_NAMED_LITERAL_STRING(kDateTimeSchemaType, "dateTime");
|
||||||
NS_NAMED_LITERAL_STRING(kTimeSchemaType, "time");
|
static NS_NAMED_LITERAL_STRING(kTimeSchemaType, "time");
|
||||||
NS_NAMED_LITERAL_STRING(kDateSchemaType, "date");
|
static NS_NAMED_LITERAL_STRING(kDateSchemaType, "date");
|
||||||
NS_NAMED_LITERAL_STRING(kGYearMonthSchemaType, "gYearMonth");
|
static NS_NAMED_LITERAL_STRING(kGYearMonthSchemaType, "gYearMonth");
|
||||||
NS_NAMED_LITERAL_STRING(kGYearSchemaType, "gYear");
|
static NS_NAMED_LITERAL_STRING(kGYearSchemaType, "gYear");
|
||||||
NS_NAMED_LITERAL_STRING(kGMonthDaySchemaType, "gMonthDay");
|
static NS_NAMED_LITERAL_STRING(kGMonthDaySchemaType, "gMonthDay");
|
||||||
NS_NAMED_LITERAL_STRING(kGDaySchemaType, "gDay");
|
static NS_NAMED_LITERAL_STRING(kGDaySchemaType, "gDay");
|
||||||
NS_NAMED_LITERAL_STRING(kGMonthSchemaType, "gMonth");
|
static NS_NAMED_LITERAL_STRING(kGMonthSchemaType, "gMonth");
|
||||||
NS_NAMED_LITERAL_STRING(kHexBinarySchemaType, "hexBinary");
|
static NS_NAMED_LITERAL_STRING(kHexBinarySchemaType, "hexBinary");
|
||||||
NS_NAMED_LITERAL_STRING(kBase64BinarySchemaType, "base64Binary");
|
static NS_NAMED_LITERAL_STRING(kBase64BinarySchemaType, "base64Binary");
|
||||||
NS_NAMED_LITERAL_STRING(kAnyURISchemaType, "anyURI");
|
static NS_NAMED_LITERAL_STRING(kAnyURISchemaType, "anyURI");
|
||||||
NS_NAMED_LITERAL_STRING(kQNameSchemaType, "QName");
|
static NS_NAMED_LITERAL_STRING(kQNameSchemaType, "QName");
|
||||||
NS_NAMED_LITERAL_STRING(kNOTATIONSchemaType, "NOTATION");
|
static NS_NAMED_LITERAL_STRING(kNOTATIONSchemaType, "NOTATION");
|
||||||
NS_NAMED_LITERAL_STRING(kNormalizedStringSchemaType, "normalizedString");
|
static NS_NAMED_LITERAL_STRING(kNormalizedStringSchemaType, "normalizedString");
|
||||||
NS_NAMED_LITERAL_STRING(kTokenSchemaType, "token");
|
static NS_NAMED_LITERAL_STRING(kTokenSchemaType, "token");
|
||||||
NS_NAMED_LITERAL_STRING(kLanguageSchemaType, "language");
|
static NS_NAMED_LITERAL_STRING(kLanguageSchemaType, "language");
|
||||||
NS_NAMED_LITERAL_STRING(kNMTOKENSchemaType, "NMTOKEN");
|
static NS_NAMED_LITERAL_STRING(kNMTOKENSchemaType, "NMTOKEN");
|
||||||
NS_NAMED_LITERAL_STRING(kNMTOKENSSchemaType, "NMTOKENS");
|
static NS_NAMED_LITERAL_STRING(kNMTOKENSSchemaType, "NMTOKENS");
|
||||||
NS_NAMED_LITERAL_STRING(kNameSchemaType, "Name");
|
static NS_NAMED_LITERAL_STRING(kNameSchemaType, "Name");
|
||||||
NS_NAMED_LITERAL_STRING(kNCNameSchemaType, "NCName");
|
static NS_NAMED_LITERAL_STRING(kNCNameSchemaType, "NCName");
|
||||||
NS_NAMED_LITERAL_STRING(kIDSchemaType, "ID");
|
static NS_NAMED_LITERAL_STRING(kIDSchemaType, "ID");
|
||||||
NS_NAMED_LITERAL_STRING(kIDREFSchemaType, "IDREF");
|
static NS_NAMED_LITERAL_STRING(kIDREFSchemaType, "IDREF");
|
||||||
NS_NAMED_LITERAL_STRING(kIDREFSSchemaType, "IDREFS");
|
static NS_NAMED_LITERAL_STRING(kIDREFSSchemaType, "IDREFS");
|
||||||
NS_NAMED_LITERAL_STRING(kENTITYSchemaType, "ENTITY");
|
static NS_NAMED_LITERAL_STRING(kENTITYSchemaType, "ENTITY");
|
||||||
NS_NAMED_LITERAL_STRING(kENTITIESSchemaType, "ENTITIES");
|
static NS_NAMED_LITERAL_STRING(kENTITIESSchemaType, "ENTITIES");
|
||||||
NS_NAMED_LITERAL_STRING(kDecimalSchemaType, "decimal");
|
static NS_NAMED_LITERAL_STRING(kDecimalSchemaType, "decimal");
|
||||||
NS_NAMED_LITERAL_STRING(kIntegerSchemaType, "integer");
|
static NS_NAMED_LITERAL_STRING(kIntegerSchemaType, "integer");
|
||||||
NS_NAMED_LITERAL_STRING(kNonPositiveIntegerSchemaType,
|
static NS_NAMED_LITERAL_STRING(kNonPositiveIntegerSchemaType,
|
||||||
"nonPositiveInteger");
|
"nonPositiveInteger");
|
||||||
NS_NAMED_LITERAL_STRING(kNegativeIntegerSchemaType, "negativeInteger");
|
static NS_NAMED_LITERAL_STRING(kNegativeIntegerSchemaType, "negativeInteger");
|
||||||
NS_NAMED_LITERAL_STRING(kNonNegativeIntegerSchemaType,
|
static NS_NAMED_LITERAL_STRING(kNonNegativeIntegerSchemaType,
|
||||||
"nonNegativeInteger");
|
"nonNegativeInteger");
|
||||||
NS_NAMED_LITERAL_STRING(kPositiveIntegerSchemaType, "positiveInteger");
|
static NS_NAMED_LITERAL_STRING(kPositiveIntegerSchemaType, "positiveInteger");
|
||||||
|
|
||||||
#define DECLARE_ENCODER(name) \
|
#define DECLARE_ENCODER(name) \
|
||||||
class ns##name##Encoder : \
|
class ns##name##Encoder : \
|
||||||
|
@ -541,37 +541,37 @@ static nsresult EncodeStructParticle(nsISOAPEncoding* aEncoding, nsIPropertyBag*
|
||||||
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
||||||
nsAutoString name;
|
nsAutoString name;
|
||||||
rc = element->GetTargetNamespace(name);
|
rc = element->GetTargetNamespace(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (!name.IsEmpty()) {
|
if (!name.IsEmpty()) {
|
||||||
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsISchemaType> type;
|
nsCOMPtr<nsISchemaType> type;
|
||||||
rc = element->GetType(getter_AddRefs(type));
|
rc = element->GetType(getter_AddRefs(type));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsIVariant> value;
|
nsCOMPtr<nsIVariant> value;
|
||||||
rc = aPropertyBag->GetProperty(name, getter_AddRefs(value));
|
rc = aPropertyBag->GetProperty(name, getter_AddRefs(value));
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
nsCOMPtr<nsIDOMElement> dummy;
|
nsCOMPtr<nsIDOMElement> dummy;
|
||||||
rc = aEncoding->Encode(value, kEmpty, name, type, aAttachments, aDestination, getter_AddRefs(dummy));
|
rc = aEncoding->Encode(value, kEmpty, name, type, aAttachments, aDestination, getter_AddRefs(dummy));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
||||||
{
|
{
|
||||||
|
@ -593,26 +593,26 @@ static nsresult EncodeStructParticle(nsISOAPEncoding* aEncoding, nsIPropertyBag*
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = EncodeStructParticle(aEncoding, aPropertyBag, child, aAttachments, aDestination);
|
rc = EncodeStructParticle(aEncoding, aPropertyBag, child, aAttachments, aDestination);
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
if (rc == NS_ERROR_NOT_AVAILABLE) { // In a choice, recoverable model failures are OK.
|
if (rc == NS_ERROR_NOT_AVAILABLE) { // In a choice, recoverable model failures are OK.
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
||||||
}
|
}
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) // If choice selected nothing, this is recoverable failure
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) // If choice selected nothing, this is recoverable failure
|
||||||
rc = NS_ERROR_NOT_AVAILABLE;
|
rc = NS_ERROR_NOT_AVAILABLE;
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
return rc; // Return status
|
return rc; // Return status
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
||||||
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
||||||
|
@ -761,37 +761,38 @@ NS_IMETHODIMP
|
||||||
do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
|
PRBool freeptrs = PR_FALSE;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
#define ENCODE_SIMPLE_ARRAY(XPType, SOAPType, Format, Source) \
|
#define ENCODE_SIMPLE_ARRAY(XPType, SOAPType, Format, Source) \
|
||||||
{\
|
{\
|
||||||
nsAutoString value;\
|
nsAutoString value;\
|
||||||
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);\
|
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);\
|
||||||
if (NS_FAILED(rc)) return rc;\
|
if (NS_FAILED(rc)) break;\
|
||||||
value.Append(nsSOAPUtils::kQualifiedSeparator);\
|
value.Append(nsSOAPUtils::kQualifiedSeparator);\
|
||||||
value.Append(k##SOAPType##SchemaType);\
|
value.Append(k##SOAPType##SchemaType);\
|
||||||
value.Append(NS_LITERAL_STRING("[") + \
|
value.Append(NS_LITERAL_STRING("[") + \
|
||||||
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) + \
|
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) + \
|
||||||
NS_LITERAL_STRING("]")); \
|
NS_LITERAL_STRING("]")); \
|
||||||
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);\
|
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);\
|
||||||
if (NS_FAILED(rc)) return rc;\
|
if (NS_FAILED(rc)) break;\
|
||||||
XPType* values = NS_STATIC_CAST(XPType*, array);\
|
XPType* values = NS_STATIC_CAST(XPType*, array);\
|
||||||
nsCOMPtr<nsIDOMElement> dummy;\
|
nsCOMPtr<nsIDOMElement> dummy;\
|
||||||
for (PRUint32 i = 0; i < count; i++) {\
|
for (PRUint32 i = 0; i < count; i++) {\
|
||||||
char* ptr = PR_smprintf(Format,Source);\
|
char* ptr = PR_smprintf(Format,Source);\
|
||||||
if (!ptr) return NS_ERROR_OUT_OF_MEMORY;\
|
if (!ptr) {rc = NS_ERROR_OUT_OF_MEMORY;break;}\
|
||||||
nsAutoString value;\
|
nsAutoString value;\
|
||||||
value.Assign(NS_ConvertUTF8toUCS2(nsDependentCString(ptr)).get());\
|
value.Assign(NS_ConvertUTF8toUCS2(nsDependentCString(ptr)).get());\
|
||||||
PR_smprintf_free(ptr);\
|
PR_smprintf_free(ptr);\
|
||||||
rc = EncodeSimpleValue(value,\
|
rc = EncodeSimpleValue(value,\
|
||||||
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],\
|
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],\
|
||||||
k##SOAPType##SchemaType,\
|
k##SOAPType##SchemaType,\
|
||||||
nsnull,\
|
nsnull,\
|
||||||
mSchemaVersion,\
|
mSchemaVersion,\
|
||||||
*aReturnValue,\
|
*aReturnValue,\
|
||||||
getter_AddRefs(dummy));\
|
getter_AddRefs(dummy));\
|
||||||
if (NS_FAILED(rc)) return rc;\
|
if (NS_FAILED(rc)) break;\
|
||||||
}\
|
}\
|
||||||
return rc;\
|
break;\
|
||||||
}
|
}
|
||||||
case nsIDataType::VTYPE_INT8:
|
case nsIDataType::VTYPE_INT8:
|
||||||
ENCODE_SIMPLE_ARRAY(PRUint8, Byte, "%hd",
|
ENCODE_SIMPLE_ARRAY(PRUint8, Byte, "%hd",
|
||||||
|
@ -818,26 +819,27 @@ NS_IMETHODIMP
|
||||||
ENCODE_SIMPLE_ARRAY(PRBool, Boolean, "%hu", (PRUint16) values[i]);
|
ENCODE_SIMPLE_ARRAY(PRBool, Boolean, "%hu", (PRUint16) values[i]);
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
ENCODE_SIMPLE_ARRAY(char *, String, "%s", values[i]);
|
ENCODE_SIMPLE_ARRAY(char *, String, "%s", values[i]);
|
||||||
|
case nsIDataType::VTYPE_ID:
|
||||||
|
case nsIDataType::VTYPE_WCHAR:
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
|
freeptrs = PR_TRUE;
|
||||||
ENCODE_SIMPLE_ARRAY(PRUnichar *, String, "%s", NS_ConvertUCS2toUTF8
|
ENCODE_SIMPLE_ARRAY(PRUnichar *, String, "%s", NS_ConvertUCS2toUTF8
|
||||||
(values[i]).get());
|
(values[i]).get());
|
||||||
case nsIDataType::VTYPE_CHAR:
|
case nsIDataType::VTYPE_CHAR:
|
||||||
ENCODE_SIMPLE_ARRAY(char, String, "%c", values[i]);
|
ENCODE_SIMPLE_ARRAY(char, String, "%c", values[i]);
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
|
||||||
ENCODE_SIMPLE_ARRAY(nsAString, String, "%s",
|
|
||||||
NS_ConvertUCS2toUTF8(values[i]).get())
|
|
||||||
case nsIDataType::VTYPE_INTERFACE_IS:
|
case nsIDataType::VTYPE_INTERFACE_IS:
|
||||||
|
freeptrs = PR_TRUE;
|
||||||
if (iid.Equals(NS_GET_IID(nsIVariant))) { // Only do variants for now.
|
if (iid.Equals(NS_GET_IID(nsIVariant))) { // Only do variants for now.
|
||||||
nsAutoString value;
|
nsAutoString value;
|
||||||
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);
|
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);
|
||||||
if (NS_FAILED(rc)) return rc;
|
if (NS_FAILED(rc)) break;
|
||||||
value.Append(nsSOAPUtils::kQualifiedSeparator);
|
value.Append(nsSOAPUtils::kQualifiedSeparator);
|
||||||
value.Append(kAnyTypeSchemaType);
|
value.Append(kAnyTypeSchemaType);
|
||||||
value.Append(NS_LITERAL_STRING("[") +
|
value.Append(NS_LITERAL_STRING("[") +
|
||||||
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) +
|
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) +
|
||||||
NS_LITERAL_STRING("]"));
|
NS_LITERAL_STRING("]"));
|
||||||
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);
|
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);
|
||||||
if (NS_FAILED(rc)) return rc;
|
if (NS_FAILED(rc)) break;
|
||||||
nsIVariant** values = NS_STATIC_CAST(nsIVariant**, array);
|
nsIVariant** values = NS_STATIC_CAST(nsIVariant**, array);
|
||||||
nsCOMPtr<nsIDOMElement> dummy;
|
nsCOMPtr<nsIDOMElement> dummy;
|
||||||
for (PRUint32 i = 0; i < count; i++) {
|
for (PRUint32 i = 0; i < count; i++) {
|
||||||
|
@ -848,20 +850,25 @@ NS_IMETHODIMP
|
||||||
aAttachments,
|
aAttachments,
|
||||||
*aReturnValue,
|
*aReturnValue,
|
||||||
getter_AddRefs(dummy));
|
getter_AddRefs(dummy));
|
||||||
if (NS_FAILED(rc)) return rc;
|
if (NS_FAILED(rc)) break;
|
||||||
}
|
}
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
// Don't support these array types just now (needs more work).
|
// Don't support these array types just now (needs more work).
|
||||||
case nsIDataType::VTYPE_WCHAR:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
case nsIDataType::VTYPE_ID:
|
|
||||||
case nsIDataType::VTYPE_VOID:
|
case nsIDataType::VTYPE_VOID:
|
||||||
case nsIDataType::VTYPE_EMPTY:
|
case nsIDataType::VTYPE_EMPTY:
|
||||||
case nsIDataType::VTYPE_INTERFACE:
|
case nsIDataType::VTYPE_INTERFACE:
|
||||||
case nsIDataType::VTYPE_ARRAY:
|
case nsIDataType::VTYPE_ARRAY:
|
||||||
break;
|
rc = NS_ERROR_ILLEGAL_VALUE;
|
||||||
}
|
}
|
||||||
return NS_ERROR_ILLEGAL_VALUE;
|
if (freeptrs) {
|
||||||
|
void** ptrs = NS_STATIC_CAST(void**,array);
|
||||||
|
for (PRUint32 i = 0; i < count; i++) {
|
||||||
|
nsMemory::Free(ptrs[i]);
|
||||||
|
}
|
||||||
|
nsMemory::Free(array);
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// String
|
// String
|
||||||
|
@ -1350,10 +1357,10 @@ NS_IMETHODIMP
|
||||||
nsCOMPtr < nsISchemaType > lookupType = subsubType;
|
nsCOMPtr < nsISchemaType > lookupType = subsubType;
|
||||||
do {
|
do {
|
||||||
if (lookupType == subType) { // Tick off the located super classes
|
if (lookupType == subType) { // Tick off the located super classes
|
||||||
subType = nsnull;
|
subType = nsnull;
|
||||||
}
|
}
|
||||||
if (lookupType == type) { // Tick off the located super classes
|
if (lookupType == type) { // Tick off the located super classes
|
||||||
type = nsnull;
|
type = nsnull;
|
||||||
}
|
}
|
||||||
PRUint16 typevalue;
|
PRUint16 typevalue;
|
||||||
rc = lookupType->GetSchemaType(&typevalue);
|
rc = lookupType->GetSchemaType(&typevalue);
|
||||||
|
@ -1480,7 +1487,7 @@ NS_IMETHODIMP
|
||||||
static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement* aElement,
|
static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement* aElement,
|
||||||
nsISchemaParticle* aParticle,
|
nsISchemaParticle* aParticle,
|
||||||
nsISOAPAttachments * aAttachments, nsISOAPPropertyBagMutator* aDestination,
|
nsISOAPAttachments * aAttachments, nsISOAPPropertyBagMutator* aDestination,
|
||||||
nsIDOMElement** _retElement)
|
nsIDOMElement** _retElement)
|
||||||
{
|
{
|
||||||
nsresult rc;
|
nsresult rc;
|
||||||
*_retElement = nsnull;
|
*_retElement = nsnull;
|
||||||
|
@ -1503,56 +1510,56 @@ static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement*
|
||||||
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
||||||
nsAutoString name;
|
nsAutoString name;
|
||||||
rc = element->GetTargetNamespace(name);
|
rc = element->GetTargetNamespace(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (!name.IsEmpty()) {
|
if (!name.IsEmpty()) {
|
||||||
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsAutoString ename;
|
nsAutoString ename;
|
||||||
if (aElement) { // Permits aElement to be null and fail recoverably
|
if (aElement) { // Permits aElement to be null and fail recoverably
|
||||||
aElement->GetNamespaceURI(ename);
|
aElement->GetNamespaceURI(ename);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (ename.IsEmpty()) {
|
if (ename.IsEmpty()) {
|
||||||
ename.SetLength(0); // No name.
|
ename.SetLength(0); // No name.
|
||||||
} else {
|
} else {
|
||||||
aElement->GetLocalName(ename);
|
aElement->GetLocalName(ename);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ename.Equals(name))
|
if (!ename.Equals(name))
|
||||||
rc = NS_ERROR_NOT_AVAILABLE; // The element must be a declaration of the next element
|
rc = NS_ERROR_NOT_AVAILABLE; // The element must be a declaration of the next element
|
||||||
}
|
}
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
nsCOMPtr<nsISchemaType> type;
|
nsCOMPtr<nsISchemaType> type;
|
||||||
rc = element->GetType(getter_AddRefs(type));
|
rc = element->GetType(getter_AddRefs(type));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsIVariant> value;
|
nsCOMPtr<nsIVariant> value;
|
||||||
rc = aEncoding->Decode(aElement, type, aAttachments, getter_AddRefs(value));
|
rc = aEncoding->Decode(aElement, type, aAttachments, getter_AddRefs(value));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = aDestination->AddProperty(name, value);
|
rc = aDestination->AddProperty(name, value);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsSOAPUtils::GetNextSiblingElement(aElement, _retElement);
|
nsSOAPUtils::GetNextSiblingElement(aElement, _retElement);
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) // If we failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) // If we failed recoverably, but we were permitted to, then return success
|
||||||
*_retElement = aElement;
|
*_retElement = aElement;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
||||||
{
|
{
|
||||||
|
@ -1568,99 +1575,99 @@ static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement*
|
||||||
rc = modelGroup->GetParticleCount(&particleCount);
|
rc = modelGroup->GetParticleCount(&particleCount);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_ALL) { // This handles out-of-order appearances.
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_ALL) { // This handles out-of-order appearances.
|
||||||
nsCOMPtr<nsISupportsArray> all = new nsSupportsArray(); // Create something we can mutate
|
nsCOMPtr<nsISupportsArray> all = new nsSupportsArray(); // Create something we can mutate
|
||||||
all->SizeTo(particleCount);
|
all->SizeTo(particleCount);
|
||||||
nsCOMPtr<nsISchemaParticle> child;
|
nsCOMPtr<nsISchemaParticle> child;
|
||||||
PRBool mangled = PR_FALSE;
|
PRBool mangled = PR_FALSE;
|
||||||
for (PRUint32 i = 0; i < particleCount; i++) {
|
for (PRUint32 i = 0; i < particleCount; i++) {
|
||||||
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = all->AppendElement(child);
|
rc = all->AppendElement(child);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsIDOMElement> next = aElement;
|
nsCOMPtr<nsIDOMElement> next = aElement;
|
||||||
while (particleCount > 0) {
|
while (particleCount > 0) {
|
||||||
for (PRUint32 i = 0; i < particleCount; i++) {
|
for (PRUint32 i = 0; i < particleCount; i++) {
|
||||||
child = dont_AddRef(NS_STATIC_CAST
|
child = dont_AddRef(NS_STATIC_CAST
|
||||||
(nsISchemaParticle*, all->ElementAt(i)));
|
(nsISchemaParticle*, all->ElementAt(i)));
|
||||||
nsCOMPtr<nsIDOMElement> after;
|
nsCOMPtr<nsIDOMElement> after;
|
||||||
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
next = after;
|
next = after;
|
||||||
mangled = PR_TRUE;
|
mangled = PR_TRUE;
|
||||||
rc = all->RemoveElementAt(i);
|
rc = all->RemoveElementAt(i);
|
||||||
particleCount--;
|
particleCount--;
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
if (rc != NS_ERROR_NOT_AVAILABLE) {
|
if (rc != NS_ERROR_NOT_AVAILABLE) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mangled && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
if (mangled && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
||||||
}
|
}
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
*_retElement = next;
|
*_retElement = next;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
*_retElement = aElement;
|
*_retElement = aElement;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // This handles sequences and choices.
|
else { // This handles sequences and choices.
|
||||||
nsCOMPtr<nsIDOMElement> next = aElement;
|
nsCOMPtr<nsIDOMElement> next = aElement;
|
||||||
for (PRUint32 i = 0; i < particleCount; i++) {
|
for (PRUint32 i = 0; i < particleCount; i++) {
|
||||||
nsCOMPtr<nsISchemaParticle> child;
|
nsCOMPtr<nsISchemaParticle> child;
|
||||||
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsIDOMElement> after;
|
nsCOMPtr<nsIDOMElement> after;
|
||||||
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
next = after;
|
next = after;
|
||||||
}
|
}
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
||||||
if (rc == NS_ERROR_NOT_AVAILABLE) {
|
if (rc == NS_ERROR_NOT_AVAILABLE) {
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
*_retElement = next;
|
*_retElement = next;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
||||||
}
|
}
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE)
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE)
|
||||||
rc = NS_ERROR_NOT_AVAILABLE;
|
rc = NS_ERROR_NOT_AVAILABLE;
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
*_retElement = next;
|
*_retElement = next;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
*_retElement = aElement;
|
*_retElement = aElement;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rc; // Return status
|
return rc; // Return status
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
||||||
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
||||||
|
@ -1816,9 +1823,12 @@ static PRInt32 GetArrayDimensions(const nsAString& src, PRInt32* dim, nsAString
|
||||||
int len;
|
int len;
|
||||||
{
|
{
|
||||||
nsReadingIterator < PRUnichar > i3 = i2++; // Cover any extra white space
|
nsReadingIterator < PRUnichar > i3 = i2++; // Cover any extra white space
|
||||||
while (i1 != i2 // Loop past white space
|
while (i1 != i3) { // Loop past white space
|
||||||
&& *(--i2) <= ' ')
|
if (*(--i3) > ' ') {
|
||||||
;
|
i3++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
len = Distance(i1, i3); // Length remaining in string after operation
|
len = Distance(i1, i3); // Length remaining in string after operation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1930,7 +1940,7 @@ NS_IMETHODIMP
|
||||||
|
|
||||||
if (d > 0) {
|
if (d > 0) {
|
||||||
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
||||||
for (int i = 0; i < d; i++) {
|
for (PRInt32 i = 0; i < d; i++) {
|
||||||
PRInt32 next = dim[i];
|
PRInt32 next = dim[i];
|
||||||
if (next == -1) {
|
if (next == -1) {
|
||||||
tot = -1;
|
tot = -1;
|
||||||
|
@ -2013,7 +2023,7 @@ NS_IMETHODIMP
|
||||||
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));
|
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));
|
||||||
PRInt32 pp[MAX_ARRAY_DIMENSIONS];
|
PRInt32 pp[MAX_ARRAY_DIMENSIONS];
|
||||||
if (d != -1) {
|
if (d != -1) {
|
||||||
for (int i = d; i-- != 0;) {
|
for (PRUint32 i = d; i-- != 0;) {
|
||||||
pp[i] = 0;
|
pp[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2037,7 +2047,7 @@ NS_IMETHODIMP
|
||||||
return NS_ERROR_ILLEGAL_VALUE;
|
return NS_ERROR_ILLEGAL_VALUE;
|
||||||
if (d == -1) {
|
if (d == -1) {
|
||||||
d = i; // If we never had dimension count before, we do now.
|
d = i; // If we never had dimension count before, we do now.
|
||||||
for (int i = d; i-- != 0;) {
|
for (PRUint32 i = d; i-- != 0;) {
|
||||||
pp[i] = 0;
|
pp[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2067,7 +2077,7 @@ NS_IMETHODIMP
|
||||||
pp[0] = next;
|
pp[0] = next;
|
||||||
}
|
}
|
||||||
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
||||||
for (int i = 0; i < d; i++) {
|
for (PRInt32 i = 0; i < d; i++) {
|
||||||
PRInt32 next = dim[i];
|
PRInt32 next = dim[i];
|
||||||
if (next == -1) { // Only derive those with no other declaration
|
if (next == -1) { // Only derive those with no other declaration
|
||||||
dim[i] = next = pp[i];
|
dim[i] = next = pp[i];
|
||||||
|
@ -2084,8 +2094,9 @@ NS_IMETHODIMP
|
||||||
|
|
||||||
nsCOMPtr<nsIWritableVariant> result = do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
nsCOMPtr<nsIWritableVariant> result = do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
||||||
|
|
||||||
#define DECODE_ARRAY(XPType, VTYPE, Test, iid, Convert) \
|
#define DECODE_ARRAY(XPType, VTYPE, iid, Convert, Free) \
|
||||||
XPType* a = new XPType[size];\
|
XPType* a = new XPType[size];\
|
||||||
|
for (PRInt32 i = 0; i < size; i++) a[i] = 0;\
|
||||||
nsCOMPtr<nsIDOMElement> child;\
|
nsCOMPtr<nsIDOMElement> child;\
|
||||||
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));\
|
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));\
|
||||||
PRUint32 next = offset;\
|
PRUint32 next = offset;\
|
||||||
|
@ -2108,7 +2119,7 @@ NS_IMETHODIMP
|
||||||
p = next++;\
|
p = next++;\
|
||||||
}\
|
}\
|
||||||
if (p >= size\
|
if (p >= size\
|
||||||
|| Test) {\
|
|| a[p]) {\
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE;\
|
rc = NS_ERROR_ILLEGAL_VALUE;\
|
||||||
break;\
|
break;\
|
||||||
}\
|
}\
|
||||||
|
@ -2117,6 +2128,7 @@ NS_IMETHODIMP
|
||||||
rc = aEncoding->Decode(child, subtype, aAttachments, getter_AddRefs(v));\
|
rc = aEncoding->Decode(child, subtype, aAttachments, getter_AddRefs(v));\
|
||||||
if (NS_FAILED(rc))\
|
if (NS_FAILED(rc))\
|
||||||
break;\
|
break;\
|
||||||
|
Convert \
|
||||||
\
|
\
|
||||||
nsCOMPtr<nsIDOMElement> next;\
|
nsCOMPtr<nsIDOMElement> next;\
|
||||||
nsSOAPUtils::GetNextSiblingElement(child, getter_AddRefs(next));\
|
nsSOAPUtils::GetNextSiblingElement(child, getter_AddRefs(next));\
|
||||||
|
@ -2125,39 +2137,38 @@ NS_IMETHODIMP
|
||||||
if (!NS_FAILED(rc)) {\
|
if (!NS_FAILED(rc)) {\
|
||||||
rc = result->SetAsArray(nsIDataType::VTYPE_##VTYPE,iid,size,a);\
|
rc = result->SetAsArray(nsIDataType::VTYPE_##VTYPE,iid,size,a);\
|
||||||
}\
|
}\
|
||||||
|
Free\
|
||||||
delete[] a;\
|
delete[] a;\
|
||||||
if (NS_FAILED(rc))\
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
#define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE, Test, Ref) \
|
#define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE) \
|
||||||
DECODE_ARRAY(XPType, VTYPE, Test, nsnull, rc = v->GetAs##VType(Ref(a + p));if(NS_FAILED(rc))break;)
|
DECODE_ARRAY(XPType, VTYPE, nsnull, rc = v->GetAs##VType(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(kBooleanSchemaType)) {
|
if (name.Equals(kBooleanSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL,a[p],);
|
DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL);
|
||||||
} else if (name.Equals(kFloatSchemaType)) {
|
} else if (name.Equals(kFloatSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(float,Float,FLOAT,a[p],);
|
DECODE_SIMPLE_ARRAY(float,Float,FLOAT);
|
||||||
} else if (name.Equals(kDoubleSchemaType)) {
|
} else if (name.Equals(kDoubleSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(double,Double,DOUBLE,a[p],);
|
DECODE_SIMPLE_ARRAY(double,Double,DOUBLE);
|
||||||
} else if (name.Equals(kLongSchemaType)) {
|
} else if (name.Equals(kLongSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRInt64,Int64,INT64,a[p],);
|
DECODE_SIMPLE_ARRAY(PRInt64,Int64,INT64);
|
||||||
} else if (name.Equals(kIntSchemaType)) {
|
} else if (name.Equals(kIntSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRInt32,Int32,INT32,a[p],);
|
DECODE_SIMPLE_ARRAY(PRInt32,Int32,INT32);
|
||||||
} else if (name.Equals(kShortSchemaType)) {
|
} else if (name.Equals(kShortSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRInt16,Int16,INT16,a[p],);
|
DECODE_SIMPLE_ARRAY(PRInt16,Int16,INT16);
|
||||||
} else if (name.Equals(kByteSchemaType)) {
|
} else if (name.Equals(kByteSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint8,Int8,INT8,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint8,Int8,INT8);
|
||||||
} else if (name.Equals(kUnsignedLongSchemaType)) {
|
} else if (name.Equals(kUnsignedLongSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint64,Uint64,UINT64,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint64,Uint64,UINT64);
|
||||||
} else if (name.Equals(kUnsignedIntSchemaType)) {
|
} else if (name.Equals(kUnsignedIntSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint32,Uint32,UINT32,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint32,Uint32,UINT32);
|
||||||
} else if (name.Equals(kUnsignedShortSchemaType)) {
|
} else if (name.Equals(kUnsignedShortSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint16,Uint16,UINT16,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint16,Uint16,UINT16);
|
||||||
} else if (name.Equals(kUnsignedByteSchemaType)) {
|
} else if (name.Equals(kUnsignedByteSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint8,Uint8,UINT8,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint8,Uint8,UINT8);
|
||||||
} else {
|
} else {
|
||||||
unhandled = PR_TRUE;
|
unhandled = PR_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -2167,18 +2178,22 @@ NS_IMETHODIMP
|
||||||
if (unhandled) { // Handle all the other cases
|
if (unhandled) { // Handle all the other cases
|
||||||
if (subtype) {
|
if (subtype) {
|
||||||
PRUint16 typevalue;
|
PRUint16 typevalue;
|
||||||
nsresult rc = aSchemaType->GetSchemaType(&typevalue);
|
nsresult rc = subtype->GetSchemaType(&typevalue);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (typevalue != nsISchemaType::SCHEMA_TYPE_COMPLEX) {// Simple == string
|
if (typevalue != nsISchemaType::SCHEMA_TYPE_COMPLEX) {// Simple == string
|
||||||
DECODE_SIMPLE_ARRAY(nsString,AString,ASTRING,!a[p].IsEmpty(),*);
|
DECODE_ARRAY(PRUnichar*,WCHAR_STR,nsnull,rc = v->GetAsWString(a + p);if(NS_FAILED(rc))break;,
|
||||||
|
for (PRInt32 i = 0; i < size; i++) nsMemory::Free(a[i]););
|
||||||
unhandled = PR_FALSE;
|
unhandled = PR_FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (unhandled) { // Handle all the other cases as variants.
|
if (unhandled) { // Handle all the other cases as variants.
|
||||||
DECODE_ARRAY(nsIVariant*,INTERFACE,a[p],&NS_GET_IID(nsIVariant),a[p] = v;);
|
DECODE_ARRAY(nsIVariant*,INTERFACE,&NS_GET_IID(nsIVariant),a[p] = v;,
|
||||||
|
for (PRInt32 i = 0; i < size; i++) a[i]->Release(););
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (NS_FAILED(rc))\
|
||||||
|
return rc;
|
||||||
*_retval = result;
|
*_retval = result;
|
||||||
NS_ADDREF(*_retval);
|
NS_ADDREF(*_retval);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
@ -121,12 +121,14 @@ NS_IMETHODIMP nsHTTPSOAPTransport::SyncCall(nsISOAPCall * aCall,
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
|
#if 0
|
||||||
PRUint32 status;
|
PRUint32 status;
|
||||||
rv = request->GetStatus(&status);
|
rv = request->GetStatus(&status);
|
||||||
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
||||||
rv = NS_ERROR_FAILURE;
|
rv = NS_ERROR_FAILURE;
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (aResponse) {
|
if (aResponse) {
|
||||||
nsCOMPtr < nsIDOMDocument > response;
|
nsCOMPtr < nsIDOMDocument > response;
|
||||||
|
@ -214,13 +216,15 @@ NS_IMETHODIMP nsHTTPSOAPTransportCompletion::Abort(PRBool * _retval)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsHTTPSOAPTransportCompletion::HandleEvent(nsIDOMEvent * aEvent)
|
nsHTTPSOAPTransportCompletion::HandleEvent(nsIDOMEvent * aEvent)
|
||||||
{
|
{
|
||||||
PRUint32 status;
|
// PRUint32 status;
|
||||||
nsresult rv;
|
nsresult rv = NS_OK;
|
||||||
if (mRequest) { // Avoid if it has been aborted.
|
if (mRequest) { // Avoid if it has been aborted.
|
||||||
|
#if 0
|
||||||
rv = mRequest->GetStatus(&status);
|
rv = mRequest->GetStatus(&status);
|
||||||
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
||||||
rv = NS_ERROR_FAILURE;
|
rv = NS_ERROR_FAILURE;
|
||||||
if (mResponse && NS_SUCCEEDED(rv)) {
|
#endif
|
||||||
|
if (mResponse) { // && NS_SUCCEEDED(rv)) {
|
||||||
nsCOMPtr < nsIDOMDocument > document;
|
nsCOMPtr < nsIDOMDocument > document;
|
||||||
rv = mRequest->GetResponseXML(getter_AddRefs(document));
|
rv = mRequest->GetResponseXML(getter_AddRefs(document));
|
||||||
if (NS_SUCCEEDED(rv) && document) {
|
if (NS_SUCCEEDED(rv) && document) {
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include "nsIDOMNodeList.h"
|
#include "nsIDOMNodeList.h"
|
||||||
#include "nsISOAPMessage.h"
|
#include "nsISOAPMessage.h"
|
||||||
|
|
||||||
|
static NS_NAMED_LITERAL_STRING(kEmpty, "");
|
||||||
|
|
||||||
nsSOAPFault::nsSOAPFault()
|
nsSOAPFault::nsSOAPFault()
|
||||||
{
|
{
|
||||||
NS_INIT_ISUPPORTS();
|
NS_INIT_ISUPPORTS();
|
||||||
|
@ -83,11 +85,33 @@ NS_IMETHODIMP nsSOAPFault::GetFaultCode(nsAString & aFaultCode)
|
||||||
aFaultCode.Truncate();
|
aFaultCode.Truncate();
|
||||||
nsCOMPtr < nsIDOMElement > faultcode;
|
nsCOMPtr < nsIDOMElement > faultcode;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultCodeTagName,
|
nsSOAPUtils::kFaultCodeTagName,
|
||||||
getter_AddRefs(faultcode));
|
getter_AddRefs(faultcode));
|
||||||
if (faultcode) {
|
if (faultcode) {
|
||||||
nsSOAPUtils::GetElementTextContent(faultcode, aFaultCode);
|
nsAutoString combined;
|
||||||
|
nsSOAPUtils::GetElementTextContent(faultcode, combined);
|
||||||
|
return nsSOAPUtils::GetLocalName(combined, aFaultCode);
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* readonly attribute wstring faultNamespaceURI; */
|
||||||
|
NS_IMETHODIMP nsSOAPFault::GetFaultNamespaceURI(nsAString & aNamespaceURI)
|
||||||
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(&aNamespaceURI);
|
||||||
|
if (!mFaultElement)
|
||||||
|
return NS_ERROR_ILLEGAL_VALUE;
|
||||||
|
aNamespaceURI.Truncate();
|
||||||
|
nsCOMPtr < nsIDOMElement > faultcode;
|
||||||
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
|
kEmpty,
|
||||||
|
nsSOAPUtils::kFaultCodeTagName,
|
||||||
|
getter_AddRefs(faultcode));
|
||||||
|
if (faultcode) {
|
||||||
|
nsAutoString combined;
|
||||||
|
nsSOAPUtils::GetElementTextContent(faultcode, combined);
|
||||||
|
return nsSOAPUtils::GetNamespaceURI(faultcode, combined, aNamespaceURI);
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -102,7 +126,7 @@ NS_IMETHODIMP nsSOAPFault::GetFaultString(nsAString & aFaultString)
|
||||||
aFaultString.Truncate();
|
aFaultString.Truncate();
|
||||||
nsCOMPtr < nsIDOMElement > element;
|
nsCOMPtr < nsIDOMElement > element;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultStringTagName,
|
nsSOAPUtils::kFaultStringTagName,
|
||||||
getter_AddRefs(element));
|
getter_AddRefs(element));
|
||||||
if (element) {
|
if (element) {
|
||||||
|
@ -121,7 +145,7 @@ NS_IMETHODIMP nsSOAPFault::GetFaultActor(nsAString & aFaultActor)
|
||||||
aFaultActor.Truncate();
|
aFaultActor.Truncate();
|
||||||
nsCOMPtr < nsIDOMElement > element;
|
nsCOMPtr < nsIDOMElement > element;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultActorTagName,
|
nsSOAPUtils::kFaultActorTagName,
|
||||||
getter_AddRefs(element));
|
getter_AddRefs(element));
|
||||||
if (element) {
|
if (element) {
|
||||||
|
@ -139,7 +163,7 @@ NS_IMETHODIMP nsSOAPFault::GetDetail(nsIDOMElement * *aDetail)
|
||||||
|
|
||||||
nsCOMPtr < nsIDOMElement > element;
|
nsCOMPtr < nsIDOMElement > element;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultDetailTagName,
|
nsSOAPUtils::kFaultDetailTagName,
|
||||||
aDetail);
|
aDetail);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
@ -18,8 +18,8 @@ function oncompletion(resp, call, status) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var detail = f.detail;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var detailStr = ds.serializeToString(detail);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {});
|
var ret = resp.getParameters(false, {});
|
||||||
|
|
|
@ -25,11 +25,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {})[0].value;
|
var ret = resp.getParameters(false, {})[0].value;
|
||||||
|
|
|
@ -25,11 +25,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {});
|
var ret = resp.getParameters(false, {});
|
||||||
|
|
|
@ -26,11 +26,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {});
|
var ret = resp.getParameters(false, {});
|
||||||
|
|
|
@ -26,11 +26,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {})[0].value;
|
var ret = resp.getParameters(false, {})[0].value;
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
</HEAD>
|
||||||
|
<BODY>
|
||||||
|
<H1>SOAP Test: Unscramble</H1>
|
||||||
|
The entered word will be unscrambled against a dictionary. Other services found on
|
||||||
|
<A href="http://www.xmethods.com">X Methods Website</A>. View the source of this
|
||||||
|
page for details on how it was called. If you compile mozilla DEBUG (you also need
|
||||||
|
MOZ_SOAP), the message sent and received will be logged to the console.
|
||||||
|
<p>Experimenters may wish to add other tests which exercize services, with specific
|
||||||
|
user interfaces such as the one in this test.
|
||||||
|
<SCRIPT>
|
||||||
|
|
||||||
|
var currentCall;
|
||||||
|
|
||||||
|
// Passed in as the response handler in the asynchronous case
|
||||||
|
// and called directly (see below) in the synchronous case
|
||||||
|
function oncompletion(resp, call, status) {
|
||||||
|
document.getElementById('BUTTON').value = "Call";
|
||||||
|
if (status != 0) {
|
||||||
|
alert("Error completion: " + status);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Was there a SOAP fault in the response?
|
||||||
|
if (resp.fault != null) {
|
||||||
|
var f = resp.fault;
|
||||||
|
var detail = f.detail;
|
||||||
|
var ds = new XMLSerializer();
|
||||||
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var ret = resp.getParameters(false, {})[0].value;
|
||||||
|
for (i = 0; i < ret.length; i++) {
|
||||||
|
alert(ret[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeCall(word) {
|
||||||
|
var s = new SOAPCall();
|
||||||
|
// The targetObjectURI, methodName and destinatioName are mandatory.
|
||||||
|
// The actionURI is optional.
|
||||||
|
|
||||||
|
s.transportURI = "http://ray.dsl.xmission.com:8080/soap/servlet/rpcrouter";
|
||||||
|
|
||||||
|
// Set the parameters on the call object. Note that in this case,
|
||||||
|
// the last parameter is an object that will be serialized into
|
||||||
|
// a struct parameter. It does not have a parameter wrapper because
|
||||||
|
// we don't need it to be named
|
||||||
|
s.encode(0, "unscramble", "http://ray.dsl.xmission.com/dictionary", 0, null,
|
||||||
|
2, new Array(new SOAPParameter("us","language"), new SOAPParameter(word,"word")));
|
||||||
|
if (currentCall != null) { currentCall.abort(); }
|
||||||
|
document.getElementById('BUTTON').value = "Wait...";
|
||||||
|
currentCall = s.asyncInvoke(oncompletion);
|
||||||
|
|
||||||
|
}
|
||||||
|
</SCRIPT>
|
||||||
|
<P>
|
||||||
|
<FORM>
|
||||||
|
|
||||||
|
<INPUT
|
||||||
|
<INPUT ID=WORD TYPE="text">
|
||||||
|
<INPUT ID=BUTTON TYPE="button" VALUE="Call" ONCLICK="makeCall(document.getElementById('WORD').value);">
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
|
@ -84,6 +84,7 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsDOMParser)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPCall)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPCall)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPResponse)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPResponse)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPEncoding)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPEncoding)
|
||||||
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPFault)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPHeaderBlock)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPHeaderBlock)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPParameter)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSOAPParameter)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDefaultSOAPEncoder_1_1)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDefaultSOAPEncoder_1_1)
|
||||||
|
@ -260,6 +261,12 @@ RegisterXMLExtras(nsIComponentManager *aCompMgr,
|
||||||
PR_TRUE, PR_TRUE, getter_Copies(previous));
|
PR_TRUE, PR_TRUE, getter_Copies(previous));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY,
|
||||||
|
"SOAPFault",
|
||||||
|
NS_SOAPFAULT_CONTRACTID,
|
||||||
|
PR_TRUE, PR_TRUE, getter_Copies(previous));
|
||||||
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY,
|
rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY,
|
||||||
"SOAPHeaderBlock",
|
"SOAPHeaderBlock",
|
||||||
NS_SOAPHEADERBLOCK_CONTRACTID,
|
NS_SOAPHEADERBLOCK_CONTRACTID,
|
||||||
|
@ -324,7 +331,7 @@ static nsModuleComponentInfo components[] = {
|
||||||
nsnull, &NS_CLASSINFO_NAME(nsSOAPEncoding),
|
nsnull, &NS_CLASSINFO_NAME(nsSOAPEncoding),
|
||||||
nsIClassInfo::DOM_OBJECT },
|
nsIClassInfo::DOM_OBJECT },
|
||||||
{ "SOAP Fault", NS_SOAPFAULT_CID, NS_SOAPFAULT_CONTRACTID,
|
{ "SOAP Fault", NS_SOAPFAULT_CID, NS_SOAPFAULT_CONTRACTID,
|
||||||
nsnull, nsnull, nsnull, nsnull,
|
nsSOAPFaultConstructor, nsnull, nsnull, nsnull,
|
||||||
NS_CI_INTERFACE_GETTER_NAME(nsSOAPFault),
|
NS_CI_INTERFACE_GETTER_NAME(nsSOAPFault),
|
||||||
nsnull, &NS_CLASSINFO_NAME(nsSOAPFault),
|
nsnull, &NS_CLASSINFO_NAME(nsSOAPFault),
|
||||||
nsIClassInfo::DOM_OBJECT },
|
nsIClassInfo::DOM_OBJECT },
|
||||||
|
|
|
@ -38,6 +38,11 @@ interface nsISOAPFault:nsISupports {
|
||||||
*/
|
*/
|
||||||
attribute nsIDOMElement element;
|
attribute nsIDOMElement element;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The namespaceURI of the fault code.
|
||||||
|
*/
|
||||||
|
readonly attribute AString faultNamespaceURI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The fault code
|
* The fault code
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -48,64 +48,64 @@
|
||||||
#include "nsIPropertyBag.h"
|
#include "nsIPropertyBag.h"
|
||||||
#include "nsSupportsArray.h"
|
#include "nsSupportsArray.h"
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kEmpty, "");
|
static NS_NAMED_LITERAL_STRING(kEmpty, "");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kSOAPArrayTypeAttribute, "arrayType");
|
static NS_NAMED_LITERAL_STRING(kSOAPArrayTypeAttribute, "arrayType");
|
||||||
NS_NAMED_LITERAL_STRING(kSOAPArrayOffsetAttribute, "offset");
|
static NS_NAMED_LITERAL_STRING(kSOAPArrayOffsetAttribute, "offset");
|
||||||
NS_NAMED_LITERAL_STRING(kSOAPArrayPositionAttribute, "position");
|
static NS_NAMED_LITERAL_STRING(kSOAPArrayPositionAttribute, "position");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kAnyTypeSchemaType, "anyType");
|
static NS_NAMED_LITERAL_STRING(kAnyTypeSchemaType, "anyType");
|
||||||
NS_NAMED_LITERAL_STRING(kAnySimpleTypeSchemaType, "anySimpleType");
|
static NS_NAMED_LITERAL_STRING(kAnySimpleTypeSchemaType, "anySimpleType");
|
||||||
NS_NAMED_LITERAL_STRING(kArraySOAPType, "Array");
|
static NS_NAMED_LITERAL_STRING(kArraySOAPType, "Array");
|
||||||
NS_NAMED_LITERAL_STRING(kStructSOAPType, "Struct");
|
static NS_NAMED_LITERAL_STRING(kStructSOAPType, "Struct");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kStringSchemaType, "string");
|
static NS_NAMED_LITERAL_STRING(kStringSchemaType, "string");
|
||||||
NS_NAMED_LITERAL_STRING(kBooleanSchemaType, "boolean");
|
static NS_NAMED_LITERAL_STRING(kBooleanSchemaType, "boolean");
|
||||||
NS_NAMED_LITERAL_STRING(kFloatSchemaType, "float");
|
static NS_NAMED_LITERAL_STRING(kFloatSchemaType, "float");
|
||||||
NS_NAMED_LITERAL_STRING(kDoubleSchemaType, "double");
|
static NS_NAMED_LITERAL_STRING(kDoubleSchemaType, "double");
|
||||||
NS_NAMED_LITERAL_STRING(kLongSchemaType, "long");
|
static NS_NAMED_LITERAL_STRING(kLongSchemaType, "long");
|
||||||
NS_NAMED_LITERAL_STRING(kIntSchemaType, "int");
|
static NS_NAMED_LITERAL_STRING(kIntSchemaType, "int");
|
||||||
NS_NAMED_LITERAL_STRING(kShortSchemaType, "short");
|
static NS_NAMED_LITERAL_STRING(kShortSchemaType, "short");
|
||||||
NS_NAMED_LITERAL_STRING(kByteSchemaType, "byte");
|
static NS_NAMED_LITERAL_STRING(kByteSchemaType, "byte");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedLongSchemaType, "unsignedLong");
|
static NS_NAMED_LITERAL_STRING(kUnsignedLongSchemaType, "unsignedLong");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedIntSchemaType, "unsignedInt");
|
static NS_NAMED_LITERAL_STRING(kUnsignedIntSchemaType, "unsignedInt");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedShortSchemaType, "unsignedShort");
|
static NS_NAMED_LITERAL_STRING(kUnsignedShortSchemaType, "unsignedShort");
|
||||||
NS_NAMED_LITERAL_STRING(kUnsignedByteSchemaType, "unsignedByte");
|
static NS_NAMED_LITERAL_STRING(kUnsignedByteSchemaType, "unsignedByte");
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(kDurationSchemaType, "duration");
|
static NS_NAMED_LITERAL_STRING(kDurationSchemaType, "duration");
|
||||||
NS_NAMED_LITERAL_STRING(kDateTimeSchemaType, "dateTime");
|
static NS_NAMED_LITERAL_STRING(kDateTimeSchemaType, "dateTime");
|
||||||
NS_NAMED_LITERAL_STRING(kTimeSchemaType, "time");
|
static NS_NAMED_LITERAL_STRING(kTimeSchemaType, "time");
|
||||||
NS_NAMED_LITERAL_STRING(kDateSchemaType, "date");
|
static NS_NAMED_LITERAL_STRING(kDateSchemaType, "date");
|
||||||
NS_NAMED_LITERAL_STRING(kGYearMonthSchemaType, "gYearMonth");
|
static NS_NAMED_LITERAL_STRING(kGYearMonthSchemaType, "gYearMonth");
|
||||||
NS_NAMED_LITERAL_STRING(kGYearSchemaType, "gYear");
|
static NS_NAMED_LITERAL_STRING(kGYearSchemaType, "gYear");
|
||||||
NS_NAMED_LITERAL_STRING(kGMonthDaySchemaType, "gMonthDay");
|
static NS_NAMED_LITERAL_STRING(kGMonthDaySchemaType, "gMonthDay");
|
||||||
NS_NAMED_LITERAL_STRING(kGDaySchemaType, "gDay");
|
static NS_NAMED_LITERAL_STRING(kGDaySchemaType, "gDay");
|
||||||
NS_NAMED_LITERAL_STRING(kGMonthSchemaType, "gMonth");
|
static NS_NAMED_LITERAL_STRING(kGMonthSchemaType, "gMonth");
|
||||||
NS_NAMED_LITERAL_STRING(kHexBinarySchemaType, "hexBinary");
|
static NS_NAMED_LITERAL_STRING(kHexBinarySchemaType, "hexBinary");
|
||||||
NS_NAMED_LITERAL_STRING(kBase64BinarySchemaType, "base64Binary");
|
static NS_NAMED_LITERAL_STRING(kBase64BinarySchemaType, "base64Binary");
|
||||||
NS_NAMED_LITERAL_STRING(kAnyURISchemaType, "anyURI");
|
static NS_NAMED_LITERAL_STRING(kAnyURISchemaType, "anyURI");
|
||||||
NS_NAMED_LITERAL_STRING(kQNameSchemaType, "QName");
|
static NS_NAMED_LITERAL_STRING(kQNameSchemaType, "QName");
|
||||||
NS_NAMED_LITERAL_STRING(kNOTATIONSchemaType, "NOTATION");
|
static NS_NAMED_LITERAL_STRING(kNOTATIONSchemaType, "NOTATION");
|
||||||
NS_NAMED_LITERAL_STRING(kNormalizedStringSchemaType, "normalizedString");
|
static NS_NAMED_LITERAL_STRING(kNormalizedStringSchemaType, "normalizedString");
|
||||||
NS_NAMED_LITERAL_STRING(kTokenSchemaType, "token");
|
static NS_NAMED_LITERAL_STRING(kTokenSchemaType, "token");
|
||||||
NS_NAMED_LITERAL_STRING(kLanguageSchemaType, "language");
|
static NS_NAMED_LITERAL_STRING(kLanguageSchemaType, "language");
|
||||||
NS_NAMED_LITERAL_STRING(kNMTOKENSchemaType, "NMTOKEN");
|
static NS_NAMED_LITERAL_STRING(kNMTOKENSchemaType, "NMTOKEN");
|
||||||
NS_NAMED_LITERAL_STRING(kNMTOKENSSchemaType, "NMTOKENS");
|
static NS_NAMED_LITERAL_STRING(kNMTOKENSSchemaType, "NMTOKENS");
|
||||||
NS_NAMED_LITERAL_STRING(kNameSchemaType, "Name");
|
static NS_NAMED_LITERAL_STRING(kNameSchemaType, "Name");
|
||||||
NS_NAMED_LITERAL_STRING(kNCNameSchemaType, "NCName");
|
static NS_NAMED_LITERAL_STRING(kNCNameSchemaType, "NCName");
|
||||||
NS_NAMED_LITERAL_STRING(kIDSchemaType, "ID");
|
static NS_NAMED_LITERAL_STRING(kIDSchemaType, "ID");
|
||||||
NS_NAMED_LITERAL_STRING(kIDREFSchemaType, "IDREF");
|
static NS_NAMED_LITERAL_STRING(kIDREFSchemaType, "IDREF");
|
||||||
NS_NAMED_LITERAL_STRING(kIDREFSSchemaType, "IDREFS");
|
static NS_NAMED_LITERAL_STRING(kIDREFSSchemaType, "IDREFS");
|
||||||
NS_NAMED_LITERAL_STRING(kENTITYSchemaType, "ENTITY");
|
static NS_NAMED_LITERAL_STRING(kENTITYSchemaType, "ENTITY");
|
||||||
NS_NAMED_LITERAL_STRING(kENTITIESSchemaType, "ENTITIES");
|
static NS_NAMED_LITERAL_STRING(kENTITIESSchemaType, "ENTITIES");
|
||||||
NS_NAMED_LITERAL_STRING(kDecimalSchemaType, "decimal");
|
static NS_NAMED_LITERAL_STRING(kDecimalSchemaType, "decimal");
|
||||||
NS_NAMED_LITERAL_STRING(kIntegerSchemaType, "integer");
|
static NS_NAMED_LITERAL_STRING(kIntegerSchemaType, "integer");
|
||||||
NS_NAMED_LITERAL_STRING(kNonPositiveIntegerSchemaType,
|
static NS_NAMED_LITERAL_STRING(kNonPositiveIntegerSchemaType,
|
||||||
"nonPositiveInteger");
|
"nonPositiveInteger");
|
||||||
NS_NAMED_LITERAL_STRING(kNegativeIntegerSchemaType, "negativeInteger");
|
static NS_NAMED_LITERAL_STRING(kNegativeIntegerSchemaType, "negativeInteger");
|
||||||
NS_NAMED_LITERAL_STRING(kNonNegativeIntegerSchemaType,
|
static NS_NAMED_LITERAL_STRING(kNonNegativeIntegerSchemaType,
|
||||||
"nonNegativeInteger");
|
"nonNegativeInteger");
|
||||||
NS_NAMED_LITERAL_STRING(kPositiveIntegerSchemaType, "positiveInteger");
|
static NS_NAMED_LITERAL_STRING(kPositiveIntegerSchemaType, "positiveInteger");
|
||||||
|
|
||||||
#define DECLARE_ENCODER(name) \
|
#define DECLARE_ENCODER(name) \
|
||||||
class ns##name##Encoder : \
|
class ns##name##Encoder : \
|
||||||
|
@ -541,37 +541,37 @@ static nsresult EncodeStructParticle(nsISOAPEncoding* aEncoding, nsIPropertyBag*
|
||||||
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
||||||
nsAutoString name;
|
nsAutoString name;
|
||||||
rc = element->GetTargetNamespace(name);
|
rc = element->GetTargetNamespace(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (!name.IsEmpty()) {
|
if (!name.IsEmpty()) {
|
||||||
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsISchemaType> type;
|
nsCOMPtr<nsISchemaType> type;
|
||||||
rc = element->GetType(getter_AddRefs(type));
|
rc = element->GetType(getter_AddRefs(type));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsIVariant> value;
|
nsCOMPtr<nsIVariant> value;
|
||||||
rc = aPropertyBag->GetProperty(name, getter_AddRefs(value));
|
rc = aPropertyBag->GetProperty(name, getter_AddRefs(value));
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
nsCOMPtr<nsIDOMElement> dummy;
|
nsCOMPtr<nsIDOMElement> dummy;
|
||||||
rc = aEncoding->Encode(value, kEmpty, name, type, aAttachments, aDestination, getter_AddRefs(dummy));
|
rc = aEncoding->Encode(value, kEmpty, name, type, aAttachments, aDestination, getter_AddRefs(dummy));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
||||||
{
|
{
|
||||||
|
@ -593,26 +593,26 @@ static nsresult EncodeStructParticle(nsISOAPEncoding* aEncoding, nsIPropertyBag*
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = EncodeStructParticle(aEncoding, aPropertyBag, child, aAttachments, aDestination);
|
rc = EncodeStructParticle(aEncoding, aPropertyBag, child, aAttachments, aDestination);
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
if (rc == NS_ERROR_NOT_AVAILABLE) { // In a choice, recoverable model failures are OK.
|
if (rc == NS_ERROR_NOT_AVAILABLE) { // In a choice, recoverable model failures are OK.
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
||||||
}
|
}
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) // If choice selected nothing, this is recoverable failure
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) // If choice selected nothing, this is recoverable failure
|
||||||
rc = NS_ERROR_NOT_AVAILABLE;
|
rc = NS_ERROR_NOT_AVAILABLE;
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
return rc; // Return status
|
return rc; // Return status
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
||||||
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
||||||
|
@ -761,37 +761,38 @@ NS_IMETHODIMP
|
||||||
do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
|
PRBool freeptrs = PR_FALSE;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
#define ENCODE_SIMPLE_ARRAY(XPType, SOAPType, Format, Source) \
|
#define ENCODE_SIMPLE_ARRAY(XPType, SOAPType, Format, Source) \
|
||||||
{\
|
{\
|
||||||
nsAutoString value;\
|
nsAutoString value;\
|
||||||
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);\
|
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);\
|
||||||
if (NS_FAILED(rc)) return rc;\
|
if (NS_FAILED(rc)) break;\
|
||||||
value.Append(nsSOAPUtils::kQualifiedSeparator);\
|
value.Append(nsSOAPUtils::kQualifiedSeparator);\
|
||||||
value.Append(k##SOAPType##SchemaType);\
|
value.Append(k##SOAPType##SchemaType);\
|
||||||
value.Append(NS_LITERAL_STRING("[") + \
|
value.Append(NS_LITERAL_STRING("[") + \
|
||||||
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) + \
|
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) + \
|
||||||
NS_LITERAL_STRING("]")); \
|
NS_LITERAL_STRING("]")); \
|
||||||
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);\
|
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);\
|
||||||
if (NS_FAILED(rc)) return rc;\
|
if (NS_FAILED(rc)) break;\
|
||||||
XPType* values = NS_STATIC_CAST(XPType*, array);\
|
XPType* values = NS_STATIC_CAST(XPType*, array);\
|
||||||
nsCOMPtr<nsIDOMElement> dummy;\
|
nsCOMPtr<nsIDOMElement> dummy;\
|
||||||
for (PRUint32 i = 0; i < count; i++) {\
|
for (PRUint32 i = 0; i < count; i++) {\
|
||||||
char* ptr = PR_smprintf(Format,Source);\
|
char* ptr = PR_smprintf(Format,Source);\
|
||||||
if (!ptr) return NS_ERROR_OUT_OF_MEMORY;\
|
if (!ptr) {rc = NS_ERROR_OUT_OF_MEMORY;break;}\
|
||||||
nsAutoString value;\
|
nsAutoString value;\
|
||||||
value.Assign(NS_ConvertUTF8toUCS2(nsDependentCString(ptr)).get());\
|
value.Assign(NS_ConvertUTF8toUCS2(nsDependentCString(ptr)).get());\
|
||||||
PR_smprintf_free(ptr);\
|
PR_smprintf_free(ptr);\
|
||||||
rc = EncodeSimpleValue(value,\
|
rc = EncodeSimpleValue(value,\
|
||||||
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],\
|
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],\
|
||||||
k##SOAPType##SchemaType,\
|
k##SOAPType##SchemaType,\
|
||||||
nsnull,\
|
nsnull,\
|
||||||
mSchemaVersion,\
|
mSchemaVersion,\
|
||||||
*aReturnValue,\
|
*aReturnValue,\
|
||||||
getter_AddRefs(dummy));\
|
getter_AddRefs(dummy));\
|
||||||
if (NS_FAILED(rc)) return rc;\
|
if (NS_FAILED(rc)) break;\
|
||||||
}\
|
}\
|
||||||
return rc;\
|
break;\
|
||||||
}
|
}
|
||||||
case nsIDataType::VTYPE_INT8:
|
case nsIDataType::VTYPE_INT8:
|
||||||
ENCODE_SIMPLE_ARRAY(PRUint8, Byte, "%hd",
|
ENCODE_SIMPLE_ARRAY(PRUint8, Byte, "%hd",
|
||||||
|
@ -818,26 +819,27 @@ NS_IMETHODIMP
|
||||||
ENCODE_SIMPLE_ARRAY(PRBool, Boolean, "%hu", (PRUint16) values[i]);
|
ENCODE_SIMPLE_ARRAY(PRBool, Boolean, "%hu", (PRUint16) values[i]);
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
ENCODE_SIMPLE_ARRAY(char *, String, "%s", values[i]);
|
ENCODE_SIMPLE_ARRAY(char *, String, "%s", values[i]);
|
||||||
|
case nsIDataType::VTYPE_ID:
|
||||||
|
case nsIDataType::VTYPE_WCHAR:
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
|
freeptrs = PR_TRUE;
|
||||||
ENCODE_SIMPLE_ARRAY(PRUnichar *, String, "%s", NS_ConvertUCS2toUTF8
|
ENCODE_SIMPLE_ARRAY(PRUnichar *, String, "%s", NS_ConvertUCS2toUTF8
|
||||||
(values[i]).get());
|
(values[i]).get());
|
||||||
case nsIDataType::VTYPE_CHAR:
|
case nsIDataType::VTYPE_CHAR:
|
||||||
ENCODE_SIMPLE_ARRAY(char, String, "%c", values[i]);
|
ENCODE_SIMPLE_ARRAY(char, String, "%c", values[i]);
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
|
||||||
ENCODE_SIMPLE_ARRAY(nsAString, String, "%s",
|
|
||||||
NS_ConvertUCS2toUTF8(values[i]).get())
|
|
||||||
case nsIDataType::VTYPE_INTERFACE_IS:
|
case nsIDataType::VTYPE_INTERFACE_IS:
|
||||||
|
freeptrs = PR_TRUE;
|
||||||
if (iid.Equals(NS_GET_IID(nsIVariant))) { // Only do variants for now.
|
if (iid.Equals(NS_GET_IID(nsIVariant))) { // Only do variants for now.
|
||||||
nsAutoString value;
|
nsAutoString value;
|
||||||
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);
|
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);
|
||||||
if (NS_FAILED(rc)) return rc;
|
if (NS_FAILED(rc)) break;
|
||||||
value.Append(nsSOAPUtils::kQualifiedSeparator);
|
value.Append(nsSOAPUtils::kQualifiedSeparator);
|
||||||
value.Append(kAnyTypeSchemaType);
|
value.Append(kAnyTypeSchemaType);
|
||||||
value.Append(NS_LITERAL_STRING("[") +
|
value.Append(NS_LITERAL_STRING("[") +
|
||||||
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) +
|
NS_ConvertUTF8toUCS2(nsPrintfCString("%d", count)) +
|
||||||
NS_LITERAL_STRING("]"));
|
NS_LITERAL_STRING("]"));
|
||||||
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);
|
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);
|
||||||
if (NS_FAILED(rc)) return rc;
|
if (NS_FAILED(rc)) break;
|
||||||
nsIVariant** values = NS_STATIC_CAST(nsIVariant**, array);
|
nsIVariant** values = NS_STATIC_CAST(nsIVariant**, array);
|
||||||
nsCOMPtr<nsIDOMElement> dummy;
|
nsCOMPtr<nsIDOMElement> dummy;
|
||||||
for (PRUint32 i = 0; i < count; i++) {
|
for (PRUint32 i = 0; i < count; i++) {
|
||||||
|
@ -848,20 +850,25 @@ NS_IMETHODIMP
|
||||||
aAttachments,
|
aAttachments,
|
||||||
*aReturnValue,
|
*aReturnValue,
|
||||||
getter_AddRefs(dummy));
|
getter_AddRefs(dummy));
|
||||||
if (NS_FAILED(rc)) return rc;
|
if (NS_FAILED(rc)) break;
|
||||||
}
|
}
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
// Don't support these array types just now (needs more work).
|
// Don't support these array types just now (needs more work).
|
||||||
case nsIDataType::VTYPE_WCHAR:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
case nsIDataType::VTYPE_ID:
|
|
||||||
case nsIDataType::VTYPE_VOID:
|
case nsIDataType::VTYPE_VOID:
|
||||||
case nsIDataType::VTYPE_EMPTY:
|
case nsIDataType::VTYPE_EMPTY:
|
||||||
case nsIDataType::VTYPE_INTERFACE:
|
case nsIDataType::VTYPE_INTERFACE:
|
||||||
case nsIDataType::VTYPE_ARRAY:
|
case nsIDataType::VTYPE_ARRAY:
|
||||||
break;
|
rc = NS_ERROR_ILLEGAL_VALUE;
|
||||||
}
|
}
|
||||||
return NS_ERROR_ILLEGAL_VALUE;
|
if (freeptrs) {
|
||||||
|
void** ptrs = NS_STATIC_CAST(void**,array);
|
||||||
|
for (PRUint32 i = 0; i < count; i++) {
|
||||||
|
nsMemory::Free(ptrs[i]);
|
||||||
|
}
|
||||||
|
nsMemory::Free(array);
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
// String
|
// String
|
||||||
|
@ -1350,10 +1357,10 @@ NS_IMETHODIMP
|
||||||
nsCOMPtr < nsISchemaType > lookupType = subsubType;
|
nsCOMPtr < nsISchemaType > lookupType = subsubType;
|
||||||
do {
|
do {
|
||||||
if (lookupType == subType) { // Tick off the located super classes
|
if (lookupType == subType) { // Tick off the located super classes
|
||||||
subType = nsnull;
|
subType = nsnull;
|
||||||
}
|
}
|
||||||
if (lookupType == type) { // Tick off the located super classes
|
if (lookupType == type) { // Tick off the located super classes
|
||||||
type = nsnull;
|
type = nsnull;
|
||||||
}
|
}
|
||||||
PRUint16 typevalue;
|
PRUint16 typevalue;
|
||||||
rc = lookupType->GetSchemaType(&typevalue);
|
rc = lookupType->GetSchemaType(&typevalue);
|
||||||
|
@ -1480,7 +1487,7 @@ NS_IMETHODIMP
|
||||||
static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement* aElement,
|
static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement* aElement,
|
||||||
nsISchemaParticle* aParticle,
|
nsISchemaParticle* aParticle,
|
||||||
nsISOAPAttachments * aAttachments, nsISOAPPropertyBagMutator* aDestination,
|
nsISOAPAttachments * aAttachments, nsISOAPPropertyBagMutator* aDestination,
|
||||||
nsIDOMElement** _retElement)
|
nsIDOMElement** _retElement)
|
||||||
{
|
{
|
||||||
nsresult rc;
|
nsresult rc;
|
||||||
*_retElement = nsnull;
|
*_retElement = nsnull;
|
||||||
|
@ -1503,56 +1510,56 @@ static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement*
|
||||||
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
return NS_ERROR_NOT_AVAILABLE; // For now, we just try something else if we can (recoverable)
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
nsCOMPtr<nsISchemaElement> element = do_QueryInterface(aParticle);
|
||||||
nsAutoString name;
|
nsAutoString name;
|
||||||
rc = element->GetTargetNamespace(name);
|
rc = element->GetTargetNamespace(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (!name.IsEmpty()) {
|
if (!name.IsEmpty()) {
|
||||||
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
rc = NS_ERROR_NOT_AVAILABLE; // No known way to use namespace qualification in struct
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = element->GetName(name);
|
rc = element->GetName(name);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsAutoString ename;
|
nsAutoString ename;
|
||||||
if (aElement) { // Permits aElement to be null and fail recoverably
|
if (aElement) { // Permits aElement to be null and fail recoverably
|
||||||
aElement->GetNamespaceURI(ename);
|
aElement->GetNamespaceURI(ename);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (ename.IsEmpty()) {
|
if (ename.IsEmpty()) {
|
||||||
ename.SetLength(0); // No name.
|
ename.SetLength(0); // No name.
|
||||||
} else {
|
} else {
|
||||||
aElement->GetLocalName(ename);
|
aElement->GetLocalName(ename);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ename.Equals(name))
|
if (!ename.Equals(name))
|
||||||
rc = NS_ERROR_NOT_AVAILABLE; // The element must be a declaration of the next element
|
rc = NS_ERROR_NOT_AVAILABLE; // The element must be a declaration of the next element
|
||||||
}
|
}
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
nsCOMPtr<nsISchemaType> type;
|
nsCOMPtr<nsISchemaType> type;
|
||||||
rc = element->GetType(getter_AddRefs(type));
|
rc = element->GetType(getter_AddRefs(type));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsIVariant> value;
|
nsCOMPtr<nsIVariant> value;
|
||||||
rc = aEncoding->Decode(aElement, type, aAttachments, getter_AddRefs(value));
|
rc = aEncoding->Decode(aElement, type, aAttachments, getter_AddRefs(value));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = aDestination->AddProperty(name, value);
|
rc = aDestination->AddProperty(name, value);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsSOAPUtils::GetNextSiblingElement(aElement, _retElement);
|
nsSOAPUtils::GetNextSiblingElement(aElement, _retElement);
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) // If we failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) // If we failed recoverably, but we were permitted to, then return success
|
||||||
*_retElement = aElement;
|
*_retElement = aElement;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
case nsISchemaParticle::PARTICLE_TYPE_MODEL_GROUP:
|
||||||
{
|
{
|
||||||
|
@ -1568,99 +1575,99 @@ static nsresult DecodeStructParticle(nsISOAPEncoding* aEncoding, nsIDOMElement*
|
||||||
rc = modelGroup->GetParticleCount(&particleCount);
|
rc = modelGroup->GetParticleCount(&particleCount);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_ALL) { // This handles out-of-order appearances.
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_ALL) { // This handles out-of-order appearances.
|
||||||
nsCOMPtr<nsISupportsArray> all = new nsSupportsArray(); // Create something we can mutate
|
nsCOMPtr<nsISupportsArray> all = new nsSupportsArray(); // Create something we can mutate
|
||||||
all->SizeTo(particleCount);
|
all->SizeTo(particleCount);
|
||||||
nsCOMPtr<nsISchemaParticle> child;
|
nsCOMPtr<nsISchemaParticle> child;
|
||||||
PRBool mangled = PR_FALSE;
|
PRBool mangled = PR_FALSE;
|
||||||
for (PRUint32 i = 0; i < particleCount; i++) {
|
for (PRUint32 i = 0; i < particleCount; i++) {
|
||||||
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
rc = all->AppendElement(child);
|
rc = all->AppendElement(child);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsIDOMElement> next = aElement;
|
nsCOMPtr<nsIDOMElement> next = aElement;
|
||||||
while (particleCount > 0) {
|
while (particleCount > 0) {
|
||||||
for (PRUint32 i = 0; i < particleCount; i++) {
|
for (PRUint32 i = 0; i < particleCount; i++) {
|
||||||
child = dont_AddRef(NS_STATIC_CAST
|
child = dont_AddRef(NS_STATIC_CAST
|
||||||
(nsISchemaParticle*, all->ElementAt(i)));
|
(nsISchemaParticle*, all->ElementAt(i)));
|
||||||
nsCOMPtr<nsIDOMElement> after;
|
nsCOMPtr<nsIDOMElement> after;
|
||||||
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
next = after;
|
next = after;
|
||||||
mangled = PR_TRUE;
|
mangled = PR_TRUE;
|
||||||
rc = all->RemoveElementAt(i);
|
rc = all->RemoveElementAt(i);
|
||||||
particleCount--;
|
particleCount--;
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
if (rc != NS_ERROR_NOT_AVAILABLE) {
|
if (rc != NS_ERROR_NOT_AVAILABLE) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mangled && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
if (mangled && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
||||||
}
|
}
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
*_retElement = next;
|
*_retElement = next;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
*_retElement = aElement;
|
*_retElement = aElement;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // This handles sequences and choices.
|
else { // This handles sequences and choices.
|
||||||
nsCOMPtr<nsIDOMElement> next = aElement;
|
nsCOMPtr<nsIDOMElement> next = aElement;
|
||||||
for (PRUint32 i = 0; i < particleCount; i++) {
|
for (PRUint32 i = 0; i < particleCount; i++) {
|
||||||
nsCOMPtr<nsISchemaParticle> child;
|
nsCOMPtr<nsISchemaParticle> child;
|
||||||
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
rc = modelGroup->GetParticle(i, getter_AddRefs(child));
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
nsCOMPtr<nsIDOMElement> after;
|
nsCOMPtr<nsIDOMElement> after;
|
||||||
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
rc = DecodeStructParticle(aEncoding, aElement, child, aAttachments, aDestination, getter_AddRefs(after));
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
next = after;
|
next = after;
|
||||||
}
|
}
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE) {
|
||||||
if (rc == NS_ERROR_NOT_AVAILABLE) {
|
if (rc == NS_ERROR_NOT_AVAILABLE) {
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
*_retElement = next;
|
*_retElement = next;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
else if (i > 0 && rc == NS_ERROR_NOT_AVAILABLE) { // This detects ambiguous model (non-deterministic choice which fails after succeeding on first)
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
rc = NS_ERROR_ILLEGAL_VALUE; // Error is not considered recoverable due to partially-created output.
|
||||||
}
|
}
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE)
|
if (compositor == nsISchemaModelGroup::COMPOSITOR_CHOICE)
|
||||||
rc = NS_ERROR_NOT_AVAILABLE;
|
rc = NS_ERROR_NOT_AVAILABLE;
|
||||||
if (!NS_FAILED(rc)) {
|
if (!NS_FAILED(rc)) {
|
||||||
*_retElement = next;
|
*_retElement = next;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
}
|
}
|
||||||
if (minOccurs == 0
|
if (minOccurs == 0
|
||||||
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
&& rc == NS_ERROR_NOT_AVAILABLE) { // If we succeeded or failed recoverably, but we were permitted to, then return success
|
||||||
*_retElement = aElement;
|
*_retElement = aElement;
|
||||||
NS_IF_ADDREF(*_retElement);
|
NS_IF_ADDREF(*_retElement);
|
||||||
rc = NS_OK;
|
rc = NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rc; // Return status
|
return rc; // Return status
|
||||||
}
|
}
|
||||||
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
case nsISchemaParticle::PARTICLE_TYPE_ANY:
|
||||||
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
// No model available here (we may wish to handle strict versus lazy, but what does that mean with only local accessor names)
|
||||||
|
@ -1816,9 +1823,12 @@ static PRInt32 GetArrayDimensions(const nsAString& src, PRInt32* dim, nsAString
|
||||||
int len;
|
int len;
|
||||||
{
|
{
|
||||||
nsReadingIterator < PRUnichar > i3 = i2++; // Cover any extra white space
|
nsReadingIterator < PRUnichar > i3 = i2++; // Cover any extra white space
|
||||||
while (i1 != i2 // Loop past white space
|
while (i1 != i3) { // Loop past white space
|
||||||
&& *(--i2) <= ' ')
|
if (*(--i3) > ' ') {
|
||||||
;
|
i3++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
len = Distance(i1, i3); // Length remaining in string after operation
|
len = Distance(i1, i3); // Length remaining in string after operation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1930,7 +1940,7 @@ NS_IMETHODIMP
|
||||||
|
|
||||||
if (d > 0) {
|
if (d > 0) {
|
||||||
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
||||||
for (int i = 0; i < d; i++) {
|
for (PRInt32 i = 0; i < d; i++) {
|
||||||
PRInt32 next = dim[i];
|
PRInt32 next = dim[i];
|
||||||
if (next == -1) {
|
if (next == -1) {
|
||||||
tot = -1;
|
tot = -1;
|
||||||
|
@ -2013,7 +2023,7 @@ NS_IMETHODIMP
|
||||||
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));
|
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));
|
||||||
PRInt32 pp[MAX_ARRAY_DIMENSIONS];
|
PRInt32 pp[MAX_ARRAY_DIMENSIONS];
|
||||||
if (d != -1) {
|
if (d != -1) {
|
||||||
for (int i = d; i-- != 0;) {
|
for (PRUint32 i = d; i-- != 0;) {
|
||||||
pp[i] = 0;
|
pp[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2037,7 +2047,7 @@ NS_IMETHODIMP
|
||||||
return NS_ERROR_ILLEGAL_VALUE;
|
return NS_ERROR_ILLEGAL_VALUE;
|
||||||
if (d == -1) {
|
if (d == -1) {
|
||||||
d = i; // If we never had dimension count before, we do now.
|
d = i; // If we never had dimension count before, we do now.
|
||||||
for (int i = d; i-- != 0;) {
|
for (PRUint32 i = d; i-- != 0;) {
|
||||||
pp[i] = 0;
|
pp[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2067,7 +2077,7 @@ NS_IMETHODIMP
|
||||||
pp[0] = next;
|
pp[0] = next;
|
||||||
}
|
}
|
||||||
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
PRInt64 tot = 1; // Collect in 64 bits, just to make sure it fits
|
||||||
for (int i = 0; i < d; i++) {
|
for (PRInt32 i = 0; i < d; i++) {
|
||||||
PRInt32 next = dim[i];
|
PRInt32 next = dim[i];
|
||||||
if (next == -1) { // Only derive those with no other declaration
|
if (next == -1) { // Only derive those with no other declaration
|
||||||
dim[i] = next = pp[i];
|
dim[i] = next = pp[i];
|
||||||
|
@ -2084,8 +2094,9 @@ NS_IMETHODIMP
|
||||||
|
|
||||||
nsCOMPtr<nsIWritableVariant> result = do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
nsCOMPtr<nsIWritableVariant> result = do_CreateInstance(NS_VARIANT_CONTRACTID, &rc);
|
||||||
|
|
||||||
#define DECODE_ARRAY(XPType, VTYPE, Test, iid, Convert) \
|
#define DECODE_ARRAY(XPType, VTYPE, iid, Convert, Free) \
|
||||||
XPType* a = new XPType[size];\
|
XPType* a = new XPType[size];\
|
||||||
|
for (PRInt32 i = 0; i < size; i++) a[i] = 0;\
|
||||||
nsCOMPtr<nsIDOMElement> child;\
|
nsCOMPtr<nsIDOMElement> child;\
|
||||||
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));\
|
nsSOAPUtils::GetFirstChildElement(aSource, getter_AddRefs(child));\
|
||||||
PRUint32 next = offset;\
|
PRUint32 next = offset;\
|
||||||
|
@ -2108,7 +2119,7 @@ NS_IMETHODIMP
|
||||||
p = next++;\
|
p = next++;\
|
||||||
}\
|
}\
|
||||||
if (p >= size\
|
if (p >= size\
|
||||||
|| Test) {\
|
|| a[p]) {\
|
||||||
rc = NS_ERROR_ILLEGAL_VALUE;\
|
rc = NS_ERROR_ILLEGAL_VALUE;\
|
||||||
break;\
|
break;\
|
||||||
}\
|
}\
|
||||||
|
@ -2117,6 +2128,7 @@ NS_IMETHODIMP
|
||||||
rc = aEncoding->Decode(child, subtype, aAttachments, getter_AddRefs(v));\
|
rc = aEncoding->Decode(child, subtype, aAttachments, getter_AddRefs(v));\
|
||||||
if (NS_FAILED(rc))\
|
if (NS_FAILED(rc))\
|
||||||
break;\
|
break;\
|
||||||
|
Convert \
|
||||||
\
|
\
|
||||||
nsCOMPtr<nsIDOMElement> next;\
|
nsCOMPtr<nsIDOMElement> next;\
|
||||||
nsSOAPUtils::GetNextSiblingElement(child, getter_AddRefs(next));\
|
nsSOAPUtils::GetNextSiblingElement(child, getter_AddRefs(next));\
|
||||||
|
@ -2125,39 +2137,38 @@ NS_IMETHODIMP
|
||||||
if (!NS_FAILED(rc)) {\
|
if (!NS_FAILED(rc)) {\
|
||||||
rc = result->SetAsArray(nsIDataType::VTYPE_##VTYPE,iid,size,a);\
|
rc = result->SetAsArray(nsIDataType::VTYPE_##VTYPE,iid,size,a);\
|
||||||
}\
|
}\
|
||||||
|
Free\
|
||||||
delete[] a;\
|
delete[] a;\
|
||||||
if (NS_FAILED(rc))\
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
#define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE, Test, Ref) \
|
#define DECODE_SIMPLE_ARRAY(XPType, VType, VTYPE) \
|
||||||
DECODE_ARRAY(XPType, VTYPE, Test, nsnull, rc = v->GetAs##VType(Ref(a + p));if(NS_FAILED(rc))break;)
|
DECODE_ARRAY(XPType, VTYPE, nsnull, rc = v->GetAs##VType(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(kBooleanSchemaType)) {
|
if (name.Equals(kBooleanSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL,a[p],);
|
DECODE_SIMPLE_ARRAY(PRBool,Bool,BOOL);
|
||||||
} else if (name.Equals(kFloatSchemaType)) {
|
} else if (name.Equals(kFloatSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(float,Float,FLOAT,a[p],);
|
DECODE_SIMPLE_ARRAY(float,Float,FLOAT);
|
||||||
} else if (name.Equals(kDoubleSchemaType)) {
|
} else if (name.Equals(kDoubleSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(double,Double,DOUBLE,a[p],);
|
DECODE_SIMPLE_ARRAY(double,Double,DOUBLE);
|
||||||
} else if (name.Equals(kLongSchemaType)) {
|
} else if (name.Equals(kLongSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRInt64,Int64,INT64,a[p],);
|
DECODE_SIMPLE_ARRAY(PRInt64,Int64,INT64);
|
||||||
} else if (name.Equals(kIntSchemaType)) {
|
} else if (name.Equals(kIntSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRInt32,Int32,INT32,a[p],);
|
DECODE_SIMPLE_ARRAY(PRInt32,Int32,INT32);
|
||||||
} else if (name.Equals(kShortSchemaType)) {
|
} else if (name.Equals(kShortSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRInt16,Int16,INT16,a[p],);
|
DECODE_SIMPLE_ARRAY(PRInt16,Int16,INT16);
|
||||||
} else if (name.Equals(kByteSchemaType)) {
|
} else if (name.Equals(kByteSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint8,Int8,INT8,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint8,Int8,INT8);
|
||||||
} else if (name.Equals(kUnsignedLongSchemaType)) {
|
} else if (name.Equals(kUnsignedLongSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint64,Uint64,UINT64,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint64,Uint64,UINT64);
|
||||||
} else if (name.Equals(kUnsignedIntSchemaType)) {
|
} else if (name.Equals(kUnsignedIntSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint32,Uint32,UINT32,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint32,Uint32,UINT32);
|
||||||
} else if (name.Equals(kUnsignedShortSchemaType)) {
|
} else if (name.Equals(kUnsignedShortSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint16,Uint16,UINT16,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint16,Uint16,UINT16);
|
||||||
} else if (name.Equals(kUnsignedByteSchemaType)) {
|
} else if (name.Equals(kUnsignedByteSchemaType)) {
|
||||||
DECODE_SIMPLE_ARRAY(PRUint8,Uint8,UINT8,a[p],);
|
DECODE_SIMPLE_ARRAY(PRUint8,Uint8,UINT8);
|
||||||
} else {
|
} else {
|
||||||
unhandled = PR_TRUE;
|
unhandled = PR_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -2167,18 +2178,22 @@ NS_IMETHODIMP
|
||||||
if (unhandled) { // Handle all the other cases
|
if (unhandled) { // Handle all the other cases
|
||||||
if (subtype) {
|
if (subtype) {
|
||||||
PRUint16 typevalue;
|
PRUint16 typevalue;
|
||||||
nsresult rc = aSchemaType->GetSchemaType(&typevalue);
|
nsresult rc = subtype->GetSchemaType(&typevalue);
|
||||||
if (NS_FAILED(rc))
|
if (NS_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (typevalue != nsISchemaType::SCHEMA_TYPE_COMPLEX) {// Simple == string
|
if (typevalue != nsISchemaType::SCHEMA_TYPE_COMPLEX) {// Simple == string
|
||||||
DECODE_SIMPLE_ARRAY(nsString,AString,ASTRING,!a[p].IsEmpty(),*);
|
DECODE_ARRAY(PRUnichar*,WCHAR_STR,nsnull,rc = v->GetAsWString(a + p);if(NS_FAILED(rc))break;,
|
||||||
|
for (PRInt32 i = 0; i < size; i++) nsMemory::Free(a[i]););
|
||||||
unhandled = PR_FALSE;
|
unhandled = PR_FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (unhandled) { // Handle all the other cases as variants.
|
if (unhandled) { // Handle all the other cases as variants.
|
||||||
DECODE_ARRAY(nsIVariant*,INTERFACE,a[p],&NS_GET_IID(nsIVariant),a[p] = v;);
|
DECODE_ARRAY(nsIVariant*,INTERFACE,&NS_GET_IID(nsIVariant),a[p] = v;,
|
||||||
|
for (PRInt32 i = 0; i < size; i++) a[i]->Release(););
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (NS_FAILED(rc))\
|
||||||
|
return rc;
|
||||||
*_retval = result;
|
*_retval = result;
|
||||||
NS_ADDREF(*_retval);
|
NS_ADDREF(*_retval);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
@ -121,12 +121,14 @@ NS_IMETHODIMP nsHTTPSOAPTransport::SyncCall(nsISOAPCall * aCall,
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
|
#if 0
|
||||||
PRUint32 status;
|
PRUint32 status;
|
||||||
rv = request->GetStatus(&status);
|
rv = request->GetStatus(&status);
|
||||||
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
||||||
rv = NS_ERROR_FAILURE;
|
rv = NS_ERROR_FAILURE;
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (aResponse) {
|
if (aResponse) {
|
||||||
nsCOMPtr < nsIDOMDocument > response;
|
nsCOMPtr < nsIDOMDocument > response;
|
||||||
|
@ -214,13 +216,15 @@ NS_IMETHODIMP nsHTTPSOAPTransportCompletion::Abort(PRBool * _retval)
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsHTTPSOAPTransportCompletion::HandleEvent(nsIDOMEvent * aEvent)
|
nsHTTPSOAPTransportCompletion::HandleEvent(nsIDOMEvent * aEvent)
|
||||||
{
|
{
|
||||||
PRUint32 status;
|
// PRUint32 status;
|
||||||
nsresult rv;
|
nsresult rv = NS_OK;
|
||||||
if (mRequest) { // Avoid if it has been aborted.
|
if (mRequest) { // Avoid if it has been aborted.
|
||||||
|
#if 0
|
||||||
rv = mRequest->GetStatus(&status);
|
rv = mRequest->GetStatus(&status);
|
||||||
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
if (NS_SUCCEEDED(rv) && (status < 200 || status >= 300))
|
||||||
rv = NS_ERROR_FAILURE;
|
rv = NS_ERROR_FAILURE;
|
||||||
if (mResponse && NS_SUCCEEDED(rv)) {
|
#endif
|
||||||
|
if (mResponse) { // && NS_SUCCEEDED(rv)) {
|
||||||
nsCOMPtr < nsIDOMDocument > document;
|
nsCOMPtr < nsIDOMDocument > document;
|
||||||
rv = mRequest->GetResponseXML(getter_AddRefs(document));
|
rv = mRequest->GetResponseXML(getter_AddRefs(document));
|
||||||
if (NS_SUCCEEDED(rv) && document) {
|
if (NS_SUCCEEDED(rv) && document) {
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include "nsIDOMNodeList.h"
|
#include "nsIDOMNodeList.h"
|
||||||
#include "nsISOAPMessage.h"
|
#include "nsISOAPMessage.h"
|
||||||
|
|
||||||
|
static NS_NAMED_LITERAL_STRING(kEmpty, "");
|
||||||
|
|
||||||
nsSOAPFault::nsSOAPFault()
|
nsSOAPFault::nsSOAPFault()
|
||||||
{
|
{
|
||||||
NS_INIT_ISUPPORTS();
|
NS_INIT_ISUPPORTS();
|
||||||
|
@ -83,11 +85,33 @@ NS_IMETHODIMP nsSOAPFault::GetFaultCode(nsAString & aFaultCode)
|
||||||
aFaultCode.Truncate();
|
aFaultCode.Truncate();
|
||||||
nsCOMPtr < nsIDOMElement > faultcode;
|
nsCOMPtr < nsIDOMElement > faultcode;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultCodeTagName,
|
nsSOAPUtils::kFaultCodeTagName,
|
||||||
getter_AddRefs(faultcode));
|
getter_AddRefs(faultcode));
|
||||||
if (faultcode) {
|
if (faultcode) {
|
||||||
nsSOAPUtils::GetElementTextContent(faultcode, aFaultCode);
|
nsAutoString combined;
|
||||||
|
nsSOAPUtils::GetElementTextContent(faultcode, combined);
|
||||||
|
return nsSOAPUtils::GetLocalName(combined, aFaultCode);
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* readonly attribute wstring faultNamespaceURI; */
|
||||||
|
NS_IMETHODIMP nsSOAPFault::GetFaultNamespaceURI(nsAString & aNamespaceURI)
|
||||||
|
{
|
||||||
|
NS_ENSURE_ARG_POINTER(&aNamespaceURI);
|
||||||
|
if (!mFaultElement)
|
||||||
|
return NS_ERROR_ILLEGAL_VALUE;
|
||||||
|
aNamespaceURI.Truncate();
|
||||||
|
nsCOMPtr < nsIDOMElement > faultcode;
|
||||||
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
|
kEmpty,
|
||||||
|
nsSOAPUtils::kFaultCodeTagName,
|
||||||
|
getter_AddRefs(faultcode));
|
||||||
|
if (faultcode) {
|
||||||
|
nsAutoString combined;
|
||||||
|
nsSOAPUtils::GetElementTextContent(faultcode, combined);
|
||||||
|
return nsSOAPUtils::GetNamespaceURI(faultcode, combined, aNamespaceURI);
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -102,7 +126,7 @@ NS_IMETHODIMP nsSOAPFault::GetFaultString(nsAString & aFaultString)
|
||||||
aFaultString.Truncate();
|
aFaultString.Truncate();
|
||||||
nsCOMPtr < nsIDOMElement > element;
|
nsCOMPtr < nsIDOMElement > element;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultStringTagName,
|
nsSOAPUtils::kFaultStringTagName,
|
||||||
getter_AddRefs(element));
|
getter_AddRefs(element));
|
||||||
if (element) {
|
if (element) {
|
||||||
|
@ -121,7 +145,7 @@ NS_IMETHODIMP nsSOAPFault::GetFaultActor(nsAString & aFaultActor)
|
||||||
aFaultActor.Truncate();
|
aFaultActor.Truncate();
|
||||||
nsCOMPtr < nsIDOMElement > element;
|
nsCOMPtr < nsIDOMElement > element;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultActorTagName,
|
nsSOAPUtils::kFaultActorTagName,
|
||||||
getter_AddRefs(element));
|
getter_AddRefs(element));
|
||||||
if (element) {
|
if (element) {
|
||||||
|
@ -139,7 +163,7 @@ NS_IMETHODIMP nsSOAPFault::GetDetail(nsIDOMElement * *aDetail)
|
||||||
|
|
||||||
nsCOMPtr < nsIDOMElement > element;
|
nsCOMPtr < nsIDOMElement > element;
|
||||||
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
nsSOAPUtils::GetSpecificChildElement(mFaultElement,
|
||||||
*nsSOAPUtils::kSOAPEnvURI[mVersion],
|
kEmpty,
|
||||||
nsSOAPUtils::kFaultDetailTagName,
|
nsSOAPUtils::kFaultDetailTagName,
|
||||||
aDetail);
|
aDetail);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
@ -18,8 +18,8 @@ function oncompletion(resp, call, status) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var detail = f.detail;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var detailStr = ds.serializeToString(detail);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {});
|
var ret = resp.getParameters(false, {});
|
||||||
|
|
|
@ -25,11 +25,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {})[0].value;
|
var ret = resp.getParameters(false, {})[0].value;
|
||||||
|
|
|
@ -25,11 +25,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {});
|
var ret = resp.getParameters(false, {});
|
||||||
|
|
|
@ -26,11 +26,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {});
|
var ret = resp.getParameters(false, {});
|
||||||
|
|
|
@ -26,11 +26,10 @@ function oncompletion(resp, call, status) {
|
||||||
// Was there a SOAP fault in the response?
|
// Was there a SOAP fault in the response?
|
||||||
if (resp.fault != null) {
|
if (resp.fault != null) {
|
||||||
var f = resp.fault;
|
var f = resp.fault;
|
||||||
var element = f.element;
|
var detail = f.detail;
|
||||||
var ds = new XMLSerializer();
|
var ds = new XMLSerializer();
|
||||||
var elementStr = ds.serializeToString(element);
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
alert("Fault:\nFault code: " + f.faultCode + "\nFault string: " + f.faultString
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
+ "\nFault actor: " + f.faultActor + "\nDetail: " + elementStr);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var ret = resp.getParameters(false, {})[0].value;
|
var ret = resp.getParameters(false, {})[0].value;
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
</HEAD>
|
||||||
|
<BODY>
|
||||||
|
<H1>SOAP Test: Unscramble</H1>
|
||||||
|
The entered word will be unscrambled against a dictionary. Other services found on
|
||||||
|
<A href="http://www.xmethods.com">X Methods Website</A>. View the source of this
|
||||||
|
page for details on how it was called. If you compile mozilla DEBUG (you also need
|
||||||
|
MOZ_SOAP), the message sent and received will be logged to the console.
|
||||||
|
<p>Experimenters may wish to add other tests which exercize services, with specific
|
||||||
|
user interfaces such as the one in this test.
|
||||||
|
<SCRIPT>
|
||||||
|
|
||||||
|
var currentCall;
|
||||||
|
|
||||||
|
// Passed in as the response handler in the asynchronous case
|
||||||
|
// and called directly (see below) in the synchronous case
|
||||||
|
function oncompletion(resp, call, status) {
|
||||||
|
document.getElementById('BUTTON').value = "Call";
|
||||||
|
if (status != 0) {
|
||||||
|
alert("Error completion: " + status);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Was there a SOAP fault in the response?
|
||||||
|
if (resp.fault != null) {
|
||||||
|
var f = resp.fault;
|
||||||
|
var detail = f.detail;
|
||||||
|
var ds = new XMLSerializer();
|
||||||
|
var detailStr = detail ? ds.serializeToString(detail) : "";
|
||||||
|
alert("Fault namespace: " + f.faultNamespaceURI + "\nFault code: " + f.faultCode + "\nFault string: " + f.faultString + "\nFault actor: " + f.faultActor + "\nDetail: " + detailStr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var ret = resp.getParameters(false, {})[0].value;
|
||||||
|
for (i = 0; i < ret.length; i++) {
|
||||||
|
alert(ret[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeCall(word) {
|
||||||
|
var s = new SOAPCall();
|
||||||
|
// The targetObjectURI, methodName and destinatioName are mandatory.
|
||||||
|
// The actionURI is optional.
|
||||||
|
|
||||||
|
s.transportURI = "http://ray.dsl.xmission.com:8080/soap/servlet/rpcrouter";
|
||||||
|
|
||||||
|
// Set the parameters on the call object. Note that in this case,
|
||||||
|
// the last parameter is an object that will be serialized into
|
||||||
|
// a struct parameter. It does not have a parameter wrapper because
|
||||||
|
// we don't need it to be named
|
||||||
|
s.encode(0, "unscramble", "http://ray.dsl.xmission.com/dictionary", 0, null,
|
||||||
|
2, new Array(new SOAPParameter("us","language"), new SOAPParameter(word,"word")));
|
||||||
|
if (currentCall != null) { currentCall.abort(); }
|
||||||
|
document.getElementById('BUTTON').value = "Wait...";
|
||||||
|
currentCall = s.asyncInvoke(oncompletion);
|
||||||
|
|
||||||
|
}
|
||||||
|
</SCRIPT>
|
||||||
|
<P>
|
||||||
|
<FORM>
|
||||||
|
|
||||||
|
<INPUT
|
||||||
|
<INPUT ID=WORD TYPE="text">
|
||||||
|
<INPUT ID=BUTTON TYPE="button" VALUE="Call" ONCLICK="makeCall(document.getElementById('WORD').value);">
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
Загрузка…
Ссылка в новой задаче