Fix for undefined symbol under Linux. Eliminated proxy/test due to

Makefile.in problems.  Added ability for a specific version of SOAP
(Encoding) to deal with either version of Schema URI if it is
explicitly specified.

SOAP is not part of the default build.
This commit is contained in:
rayw%netscape.com 2002-01-08 22:11:57 +00:00
Родитель 9a16931339
Коммит fb93a54e63
13 изменённых файлов: 129 добавлений и 158 удалений

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

@ -27,7 +27,7 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
ifdef ENABLE_TESTS
DIRS += tests
#DIRS += tests
endif
MODULE = xmlextras

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

@ -26,6 +26,9 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = wsproxytests
XPIDL_MODULE = wsproxytests
REQUIRES = xpcom \
string \
xmlextras \
@ -44,7 +47,7 @@ CPPSRCS = \
SIMPLE_PROGRAMS = $(CPPSRCS:.cpp=$(BIN_SUFFIX))
include $(topsrcdir)/config/config.mk
#include $(topsrcdir)/config/config.mk
LIBS = \
$(DIST)/lib/libxmlextrasproxy_s.$(LIB_SUFFIX) \

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

@ -105,15 +105,16 @@ class ns##name##Encoder : \
{\
public:\
ns##name##Encoder();\
ns##name##Encoder(PRUint16 aVersion);\
ns##name##Encoder(PRUint16 aSOAPVersion, PRUint16 aSchemaVersion);\
virtual ~ns##name##Encoder();\
PRUint16 mVersion;\
PRUint16 mSOAPVersion;\
PRUint16 mSchemaVersion;\
NS_DECL_ISUPPORTS\
NS_DECL_NSISOAPENCODER\
NS_DECL_NSISOAPDECODER\
};\
NS_IMPL_ISUPPORTS2(ns##name##Encoder,nsISOAPEncoder,nsISOAPDecoder) \
ns##name##Encoder::ns##name##Encoder(PRUint16 aVersion) {NS_INIT_ISUPPORTS();mVersion=aVersion;}\
ns##name##Encoder::ns##name##Encoder(PRUint16 aSOAPVersion,PRUint16 aSchemaVersion) {NS_INIT_ISUPPORTS();mSOAPVersion=aSOAPVersion;mSchemaVersion=aSchemaVersion;}\
ns##name##Encoder::~ns##name##Encoder() {}
// All encoders must be first declared and then registered.
@ -134,11 +135,20 @@ DECLARE_ENCODER(UnsignedInt)
DECLARE_ENCODER(UnsignedShort)
DECLARE_ENCODER(UnsignedByte)
/**
* This now separates the version with respect to the SOAP specification from the version
* with respect to the schema version (using the same constants for both). This permits
* a user of a SOAP 1.1 or 1.2 encoding to choose which encoding to encode to.
*/
#define REGISTER_ENCODER(name) \
{\
ns##name##Encoder *handler = new ns##name##Encoder(version);\
ns##name##Encoder *handler = new ns##name##Encoder(version,nsISOAPMessage::VERSION_1_1);\
nsAutoString encodingKey;\
SOAPEncodingKey(*nsSOAPUtils::kXSURI[version], k##name##SchemaType, encodingKey);\
SOAPEncodingKey(*nsSOAPUtils::kXSURI[nsISOAPMessage::VERSION_1_1], k##name##SchemaType, encodingKey);\
SetEncoder(encodingKey, handler); \
SetDecoder(encodingKey, handler); \
handler = new ns##name##Encoder(version,nsISOAPMessage::VERSION_1_2);\
SOAPEncodingKey(*nsSOAPUtils::kXSURI[nsISOAPMessage::VERSION_1_2], k##name##SchemaType, encodingKey);\
SetEncoder(encodingKey, handler); \
SetDecoder(encodingKey, handler); \
}
@ -146,15 +156,15 @@ DECLARE_ENCODER(UnsignedByte)
nsDefaultSOAPEncoder_1_1::nsDefaultSOAPEncoder_1_1(): nsSOAPEncoding(*nsSOAPUtils::kSOAPEncURI[nsISOAPMessage::VERSION_1_1], nsnull, nsnull)
{
PRUint16 version = nsISOAPMessage::VERSION_1_1;
{
nsDefaultEncoder *handler = new nsDefaultEncoder(version);
{ // Schema type defaults to default for SOAP level
nsDefaultEncoder *handler = new nsDefaultEncoder(version,version);
SetDefaultEncoder(handler);
SetDefaultDecoder(handler);
}
REGISTER_ENCODER(AnyType)
REGISTER_ENCODER(AnySimpleType)
{
nsArrayEncoder *handler = new nsArrayEncoder(version);
{ // There is no ability to preserve non-standard schema choice under single array type.
nsArrayEncoder *handler = new nsArrayEncoder(version,version);
nsAutoString encodingKey;
SOAPEncodingKey(*nsSOAPUtils::kSOAPEncURI[version], kArraySOAPType, encodingKey);
SetEncoder(encodingKey, handler);
@ -177,15 +187,15 @@ nsDefaultSOAPEncoder_1_1::nsDefaultSOAPEncoder_1_1(): nsSOAPEncoding(*nsSOAPUtil
nsDefaultSOAPEncoder_1_2::nsDefaultSOAPEncoder_1_2(): nsSOAPEncoding(*nsSOAPUtils::kSOAPEncURI[nsISOAPMessage::VERSION_1_2], nsnull, nsnull)
{
PRUint16 version = nsISOAPMessage::VERSION_1_2;
{
nsDefaultEncoder *handler = new nsDefaultEncoder(version);
{ // Schema type defaults to default for SOAP level
nsDefaultEncoder *handler = new nsDefaultEncoder(version,version);
SetDefaultEncoder(handler);
SetDefaultDecoder(handler);
}
REGISTER_ENCODER(AnyType)
REGISTER_ENCODER(AnySimpleType)
{
nsArrayEncoder *handler = new nsArrayEncoder(version);
{ // There is no ability to preserve non-standard schema choice under single array type.
nsArrayEncoder *handler = new nsArrayEncoder(version,version);
nsAutoString encodingKey;
SOAPEncodingKey(*nsSOAPUtils::kSOAPEncURI[version], kArraySOAPType, encodingKey);
SetEncoder(encodingKey, handler);
@ -281,10 +291,10 @@ NS_IMETHODIMP nsDefaultEncoder::Encode(nsISOAPEncoding* aEncoding,
}
nsAutoString encodingKey;
if (typevalue == nsISchemaType::SCHEMA_TYPE_COMPLEX) {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnyTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnyTypeSchemaType, encodingKey);
}
else {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnySimpleTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnySimpleTypeSchemaType, encodingKey);
}
nsresult rc = aEncoding->GetEncoder(encodingKey, getter_AddRefs(encoder));
if (NS_FAILED(rc)) return rc;
@ -321,7 +331,7 @@ NS_IMETHODIMP nsAnyTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
}
}
PRUint16 typevalue;
nativeSchemaURI.Assign(*nsSOAPUtils::kXSURI[mVersion]);
nativeSchemaURI.Assign(*nsSOAPUtils::kXSURI[mSchemaVersion]);
aSource->GetDataType(&typevalue);
switch(typevalue) {
case nsIDataType::VTYPE_INT8:
@ -371,7 +381,7 @@ NS_IMETHODIMP nsAnyTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
case nsIDataType::VTYPE_ARRAY:
if (mustBeSimple) return NS_ERROR_ILLEGAL_VALUE;
nativeSchemaType.Assign(kArraySOAPType);
nativeSchemaURI.Assign(*nsSOAPUtils::kSOAPEncURI[mVersion]);
nativeSchemaURI.Assign(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion]);
break;
#if 0
{
@ -421,11 +431,11 @@ NS_IMETHODIMP nsAnyTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
&& !aSchemaType
&& !aName.IsEmpty()) {
nsAutoString type;
rc = nsSOAPUtils::MakeNamespacePrefixFixed(*aReturnValue, nativeSchemaURI, mVersion, type);
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, nativeSchemaURI, type);
if (NS_FAILED(rc)) return rc;
type.Append(nsSOAPUtils::kQualifiedSeparator);
type.Append(nativeSchemaType);
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kXSIURI[mVersion], nsSOAPUtils::kXSITypeAttribute, type);
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kXSIURI[mSchemaVersion], nsSOAPUtils::kXSITypeAttribute, type);
}
return rc;
}
@ -452,7 +462,7 @@ NS_IMETHODIMP nsAnySimpleTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kAnySimpleTypeSchemaType,
aDestination,
aReturnValue);
@ -483,7 +493,7 @@ NS_IMETHODIMP nsArrayEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) { // Now create the element to hold the array
rc = EncodeSimpleValue(kEmpty,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kArraySOAPType,
aDestination,
aReturnValue);
@ -506,11 +516,11 @@ NS_IMETHODIMP nsArrayEncoder::Encode(nsISOAPEncoding* aEncoding,
#define DO_SIMPLE_ARRAY(XPType, SOAPType, Format, Source) \
{\
nsAutoString value;\
rc = nsSOAPUtils::MakeNamespacePrefixFixed(*aReturnValue, *nsSOAPUtils::kXSURI[mVersion], mVersion, value);\
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);\
if (NS_FAILED(rc)) return rc;\
value.Append(nsSOAPUtils::kQualifiedSeparator);\
value.Append(k##SOAPType##SchemaType);\
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mVersion], kSOAPArrayTypeAttribute, value);\
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);\
if (NS_FAILED(rc)) return rc;\
XPType* values = NS_STATIC_CAST(XPType*, array);\
nsCOMPtr<nsIDOMElement> dummy;\
@ -521,7 +531,7 @@ NS_IMETHODIMP nsArrayEncoder::Encode(nsISOAPEncoding* aEncoding,
value.Assign(NS_ConvertUTF8toUCS2(nsDependentCString(ptr)).get());\
PR_smprintf_free(ptr);\
rc = EncodeSimpleValue(value,\
*nsSOAPUtils::kSOAPEncURI[mVersion],\
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],\
k##SOAPType##SchemaType,\
*aReturnValue,\
getter_AddRefs(dummy));\
@ -589,7 +599,7 @@ NS_IMETHODIMP nsStringEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kStringSchemaType,
aDestination,
aReturnValue);
@ -618,7 +628,7 @@ NS_IMETHODIMP nsBooleanEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) {
return EncodeSimpleValue(b ? nsSOAPUtils::kTrueA : nsSOAPUtils::kFalseA,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kBooleanSchemaType,
aDestination,
aReturnValue);
@ -652,7 +662,7 @@ NS_IMETHODIMP nsDoubleEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kDoubleSchemaType,
aDestination,
aReturnValue);
@ -686,7 +696,7 @@ NS_IMETHODIMP nsFloatEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kFloatSchemaType,
aDestination,
aReturnValue);
@ -720,7 +730,7 @@ NS_IMETHODIMP nsLongEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kLongSchemaType,
aDestination,
aReturnValue);
@ -754,7 +764,7 @@ NS_IMETHODIMP nsIntEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kIntSchemaType,
aDestination,
aReturnValue);
@ -788,7 +798,7 @@ NS_IMETHODIMP nsShortEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kShortSchemaType,
aDestination,
aReturnValue);
@ -822,7 +832,7 @@ NS_IMETHODIMP nsByteEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kByteSchemaType,
aDestination,
aReturnValue);
@ -856,7 +866,7 @@ NS_IMETHODIMP nsUnsignedLongEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kLongSchemaType,
aDestination,
aReturnValue);
@ -890,7 +900,7 @@ NS_IMETHODIMP nsUnsignedIntEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kIntSchemaType,
aDestination,
aReturnValue);
@ -924,7 +934,7 @@ NS_IMETHODIMP nsUnsignedShortEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kShortSchemaType,
aDestination,
aReturnValue);
@ -958,7 +968,7 @@ NS_IMETHODIMP nsUnsignedByteEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kByteSchemaType,
aDestination,
aReturnValue);
@ -981,7 +991,7 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
{
nsCOMPtr<nsIDOMAttr> enc;
nsresult rv = aSource->GetAttributeNodeNS(*nsSOAPUtils::kSOAPEncURI[mVersion], nsSOAPUtils::kEncodingStyleAttribute, getter_AddRefs(enc));
nsresult rv = aSource->GetAttributeNodeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], nsSOAPUtils::kEncodingStyleAttribute, getter_AddRefs(enc));
if (NS_FAILED(rv)) return rv;
if (enc) {
nsAutoString style;
@ -1002,7 +1012,7 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
nsresult rc = aEncoding->GetSchemaCollection(getter_AddRefs(collection));
if (NS_FAILED(rc)) return rc;
nsAutoString explicittype;
rc = aSource->GetAttributeNS(*nsSOAPUtils::kXSIURI[mVersion], nsSOAPUtils::kXSITypeAttribute, explicittype);
rc = aSource->GetAttributeNS(*nsSOAPUtils::kXSIURI[mSchemaVersion], nsSOAPUtils::kXSITypeAttribute, explicittype);
if (NS_FAILED(rc)) return rc;
nsAutoString ns;
nsAutoString name;
@ -1026,12 +1036,12 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
rc = element->GetType(getter_AddRefs(type));
if (NS_FAILED(rc)) return rc;
}
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mVersion])) { // Last-ditch hack to get undeclared types from SOAP namespace
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion])) { // Last-ditch hack to get undeclared types from SOAP namespace
if (name.Equals(kArraySOAPType)) { // This should not be needed if schema has these declarations
rc = collection->GetType(name, ns, getter_AddRefs(type));
}
else {
rc = collection->GetType(name, *nsSOAPUtils::kXSURI[mVersion], getter_AddRefs(type));
rc = collection->GetType(name, *nsSOAPUtils::kXSURI[mSchemaVersion], getter_AddRefs(type));
}
// if (NS_FAILED(rc)) return rc;
}
@ -1057,7 +1067,7 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
rc = simpleType->GetSimpleType(&simpleTypeValue);
if (NS_FAILED(rc)) return rc;
if (simpleTypeValue == nsISchemaSimpleType::SIMPLE_TYPE_BUILTIN) {
schemaURI.Assign(*nsSOAPUtils::kXSURI[mVersion]);
schemaURI.Assign(*nsSOAPUtils::kXSURI[mSchemaVersion]);
}
}
nsAutoString encodingKey;
@ -1085,10 +1095,10 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
}
nsAutoString encodingKey;
if (typevalue == nsISchemaType::SCHEMA_TYPE_COMPLEX) {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnyTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnyTypeSchemaType, encodingKey);
}
else {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnySimpleTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnySimpleTypeSchemaType, encodingKey);
}
nsresult rc = aEncoding->GetDecoder(encodingKey, getter_AddRefs(decoder));
if (NS_FAILED(rc)) return rc;
@ -1171,7 +1181,7 @@ NS_IMETHODIMP nsArrayEncoder::Decode(nsISOAPEncoding* aEncoding,
nsAutoString name;
nsCOMPtr<nsISchemaType>subtype;
nsAutoString value;
nsresult rc = aSource->GetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mVersion], kSOAPArrayTypeAttribute, value);
nsresult rc = aSource->GetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);
if (!value.IsEmpty()) { // Need to truncate []
nsCOMPtr<nsISchemaCollection> collection;
rc = aEncoding->GetSchemaCollection(getter_AddRefs(collection));
@ -1187,7 +1197,7 @@ NS_IMETHODIMP nsArrayEncoder::Decode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
}
}
if (ns.Equals(*nsSOAPUtils::kXSURI[mVersion])) {
if (ns.Equals(*nsSOAPUtils::kXSURI[mSchemaVersion])) {
if (name.Equals(kStringSchemaType)) {
}
else if (name.Equals(kBooleanSchemaType)) {
@ -1214,7 +1224,7 @@ NS_IMETHODIMP nsArrayEncoder::Decode(nsISOAPEncoding* aEncoding,
}
else return NS_ERROR_ILLEGAL_VALUE;
}
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mVersion]))
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion]))
{
if (name.Equals(kArraySOAPType)) {
return NS_ERROR_ILLEGAL_VALUE; // Fix nested arrays later

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

@ -362,7 +362,7 @@ NS_IMETHODIMP nsSOAPMessage::Encode(PRUint16 aVersion, const nsAString & aMethod
if (NS_FAILED(rv)) return rv;
body = call;
nsAutoString prefix;
rv = nsSOAPUtils::MakeNamespacePrefixFixed(body, aTargetObjectURI, aVersion, prefix);
rv = nsSOAPUtils::MakeNamespacePrefix(body, aTargetObjectURI, prefix);
if (NS_FAILED(rv)) return rv;
if (!prefix.IsEmpty()) {
rv = body->SetPrefix(prefix);

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

@ -385,8 +385,7 @@ nsSOAPUtils::MakeNamespacePrefix(nsIDOMElement* aScope,
if (NS_FAILED(rc)) return rc;
if (hasDecl)
break;
current->GetParentNode(getter_AddRefs(temp));
current = temp;
echeck->GetParentNode(getter_AddRefs(check));
}
}
if (check == current) {
@ -453,30 +452,6 @@ nsSOAPUtils::MakeNamespacePrefix(nsIDOMElement* aScope,
*i2 = 'n';
return NS_OK;
}
/**
* This code optimizes the cases of known prefixes, which
* it is assumed are not overridden. The specified version
* number is also assumed to be correct.
*/
nsresult
nsSOAPUtils::MakeNamespacePrefixFixed(nsIDOMElement* aScope,
const nsAString & aURI,
PRUint16 aVersion,
nsAString & aPrefix)
{
if (aURI.Equals(*kSOAPEncURI[aVersion]))
aPrefix = kSOAPEncPrefix;
else if (aURI.Equals(*kSOAPEnvURI[aVersion]))
aPrefix = kSOAPEnvPrefix;
else if (aURI.Equals(*kXSIURI[aVersion]))
aPrefix = kXSIPrefix;
else if (aURI.Equals(*kXSURI[aVersion]))
aPrefix = kXSPrefix;
else
return MakeNamespacePrefix(aScope, aURI, aPrefix);
return NS_OK;
}
PRBool nsSOAPUtils::StartsWith(nsAString& aSuper,
nsAString& aSub)

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

@ -49,10 +49,6 @@ public:
static nsresult MakeNamespacePrefix(nsIDOMElement* aElement,
const nsAString & aURI,
nsAString & aPrefix);
static nsresult MakeNamespacePrefixFixed(nsIDOMElement* aElement,
const nsAString & aURI,
PRUint16 aVersion,
nsAString & aPrefix);
static nsresult GetNamespaceURI(nsIDOMElement* aElement,
const nsAString & aQName,
nsAString & aURI);

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

@ -63,6 +63,7 @@
#include "nsSchemaPrivate.h"
#include "nsWSDLLoader.h"
#include "nsWSDLPrivate.h"
#include "wspprivate.h"
#endif
#include "nsString.h"
@ -131,6 +132,8 @@ NS_DECL_CLASSINFO(nsSOAPPortBinding)
NS_DECL_CLASSINFO(nsSOAPOperationBinding)
NS_DECL_CLASSINFO(nsSOAPMessageBinding)
NS_DECL_CLASSINFO(nsSOAPPartBinding)
NS_DECL_CLASSINFO(WSPCallContext)
#endif
class nsXMLExtrasNameset : public nsISupports

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

@ -27,7 +27,7 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
ifdef ENABLE_TESTS
DIRS += tests
#DIRS += tests
endif
MODULE = xmlextras

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

@ -26,6 +26,9 @@ VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = wsproxytests
XPIDL_MODULE = wsproxytests
REQUIRES = xpcom \
string \
xmlextras \
@ -44,7 +47,7 @@ CPPSRCS = \
SIMPLE_PROGRAMS = $(CPPSRCS:.cpp=$(BIN_SUFFIX))
include $(topsrcdir)/config/config.mk
#include $(topsrcdir)/config/config.mk
LIBS = \
$(DIST)/lib/libxmlextrasproxy_s.$(LIB_SUFFIX) \

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

@ -105,15 +105,16 @@ class ns##name##Encoder : \
{\
public:\
ns##name##Encoder();\
ns##name##Encoder(PRUint16 aVersion);\
ns##name##Encoder(PRUint16 aSOAPVersion, PRUint16 aSchemaVersion);\
virtual ~ns##name##Encoder();\
PRUint16 mVersion;\
PRUint16 mSOAPVersion;\
PRUint16 mSchemaVersion;\
NS_DECL_ISUPPORTS\
NS_DECL_NSISOAPENCODER\
NS_DECL_NSISOAPDECODER\
};\
NS_IMPL_ISUPPORTS2(ns##name##Encoder,nsISOAPEncoder,nsISOAPDecoder) \
ns##name##Encoder::ns##name##Encoder(PRUint16 aVersion) {NS_INIT_ISUPPORTS();mVersion=aVersion;}\
ns##name##Encoder::ns##name##Encoder(PRUint16 aSOAPVersion,PRUint16 aSchemaVersion) {NS_INIT_ISUPPORTS();mSOAPVersion=aSOAPVersion;mSchemaVersion=aSchemaVersion;}\
ns##name##Encoder::~ns##name##Encoder() {}
// All encoders must be first declared and then registered.
@ -134,11 +135,20 @@ DECLARE_ENCODER(UnsignedInt)
DECLARE_ENCODER(UnsignedShort)
DECLARE_ENCODER(UnsignedByte)
/**
* This now separates the version with respect to the SOAP specification from the version
* with respect to the schema version (using the same constants for both). This permits
* a user of a SOAP 1.1 or 1.2 encoding to choose which encoding to encode to.
*/
#define REGISTER_ENCODER(name) \
{\
ns##name##Encoder *handler = new ns##name##Encoder(version);\
ns##name##Encoder *handler = new ns##name##Encoder(version,nsISOAPMessage::VERSION_1_1);\
nsAutoString encodingKey;\
SOAPEncodingKey(*nsSOAPUtils::kXSURI[version], k##name##SchemaType, encodingKey);\
SOAPEncodingKey(*nsSOAPUtils::kXSURI[nsISOAPMessage::VERSION_1_1], k##name##SchemaType, encodingKey);\
SetEncoder(encodingKey, handler); \
SetDecoder(encodingKey, handler); \
handler = new ns##name##Encoder(version,nsISOAPMessage::VERSION_1_2);\
SOAPEncodingKey(*nsSOAPUtils::kXSURI[nsISOAPMessage::VERSION_1_2], k##name##SchemaType, encodingKey);\
SetEncoder(encodingKey, handler); \
SetDecoder(encodingKey, handler); \
}
@ -146,15 +156,15 @@ DECLARE_ENCODER(UnsignedByte)
nsDefaultSOAPEncoder_1_1::nsDefaultSOAPEncoder_1_1(): nsSOAPEncoding(*nsSOAPUtils::kSOAPEncURI[nsISOAPMessage::VERSION_1_1], nsnull, nsnull)
{
PRUint16 version = nsISOAPMessage::VERSION_1_1;
{
nsDefaultEncoder *handler = new nsDefaultEncoder(version);
{ // Schema type defaults to default for SOAP level
nsDefaultEncoder *handler = new nsDefaultEncoder(version,version);
SetDefaultEncoder(handler);
SetDefaultDecoder(handler);
}
REGISTER_ENCODER(AnyType)
REGISTER_ENCODER(AnySimpleType)
{
nsArrayEncoder *handler = new nsArrayEncoder(version);
{ // There is no ability to preserve non-standard schema choice under single array type.
nsArrayEncoder *handler = new nsArrayEncoder(version,version);
nsAutoString encodingKey;
SOAPEncodingKey(*nsSOAPUtils::kSOAPEncURI[version], kArraySOAPType, encodingKey);
SetEncoder(encodingKey, handler);
@ -177,15 +187,15 @@ nsDefaultSOAPEncoder_1_1::nsDefaultSOAPEncoder_1_1(): nsSOAPEncoding(*nsSOAPUtil
nsDefaultSOAPEncoder_1_2::nsDefaultSOAPEncoder_1_2(): nsSOAPEncoding(*nsSOAPUtils::kSOAPEncURI[nsISOAPMessage::VERSION_1_2], nsnull, nsnull)
{
PRUint16 version = nsISOAPMessage::VERSION_1_2;
{
nsDefaultEncoder *handler = new nsDefaultEncoder(version);
{ // Schema type defaults to default for SOAP level
nsDefaultEncoder *handler = new nsDefaultEncoder(version,version);
SetDefaultEncoder(handler);
SetDefaultDecoder(handler);
}
REGISTER_ENCODER(AnyType)
REGISTER_ENCODER(AnySimpleType)
{
nsArrayEncoder *handler = new nsArrayEncoder(version);
{ // There is no ability to preserve non-standard schema choice under single array type.
nsArrayEncoder *handler = new nsArrayEncoder(version,version);
nsAutoString encodingKey;
SOAPEncodingKey(*nsSOAPUtils::kSOAPEncURI[version], kArraySOAPType, encodingKey);
SetEncoder(encodingKey, handler);
@ -281,10 +291,10 @@ NS_IMETHODIMP nsDefaultEncoder::Encode(nsISOAPEncoding* aEncoding,
}
nsAutoString encodingKey;
if (typevalue == nsISchemaType::SCHEMA_TYPE_COMPLEX) {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnyTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnyTypeSchemaType, encodingKey);
}
else {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnySimpleTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnySimpleTypeSchemaType, encodingKey);
}
nsresult rc = aEncoding->GetEncoder(encodingKey, getter_AddRefs(encoder));
if (NS_FAILED(rc)) return rc;
@ -321,7 +331,7 @@ NS_IMETHODIMP nsAnyTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
}
}
PRUint16 typevalue;
nativeSchemaURI.Assign(*nsSOAPUtils::kXSURI[mVersion]);
nativeSchemaURI.Assign(*nsSOAPUtils::kXSURI[mSchemaVersion]);
aSource->GetDataType(&typevalue);
switch(typevalue) {
case nsIDataType::VTYPE_INT8:
@ -371,7 +381,7 @@ NS_IMETHODIMP nsAnyTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
case nsIDataType::VTYPE_ARRAY:
if (mustBeSimple) return NS_ERROR_ILLEGAL_VALUE;
nativeSchemaType.Assign(kArraySOAPType);
nativeSchemaURI.Assign(*nsSOAPUtils::kSOAPEncURI[mVersion]);
nativeSchemaURI.Assign(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion]);
break;
#if 0
{
@ -421,11 +431,11 @@ NS_IMETHODIMP nsAnyTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
&& !aSchemaType
&& !aName.IsEmpty()) {
nsAutoString type;
rc = nsSOAPUtils::MakeNamespacePrefixFixed(*aReturnValue, nativeSchemaURI, mVersion, type);
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, nativeSchemaURI, type);
if (NS_FAILED(rc)) return rc;
type.Append(nsSOAPUtils::kQualifiedSeparator);
type.Append(nativeSchemaType);
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kXSIURI[mVersion], nsSOAPUtils::kXSITypeAttribute, type);
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kXSIURI[mSchemaVersion], nsSOAPUtils::kXSITypeAttribute, type);
}
return rc;
}
@ -452,7 +462,7 @@ NS_IMETHODIMP nsAnySimpleTypeEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kAnySimpleTypeSchemaType,
aDestination,
aReturnValue);
@ -483,7 +493,7 @@ NS_IMETHODIMP nsArrayEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) { // Now create the element to hold the array
rc = EncodeSimpleValue(kEmpty,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kArraySOAPType,
aDestination,
aReturnValue);
@ -506,11 +516,11 @@ NS_IMETHODIMP nsArrayEncoder::Encode(nsISOAPEncoding* aEncoding,
#define DO_SIMPLE_ARRAY(XPType, SOAPType, Format, Source) \
{\
nsAutoString value;\
rc = nsSOAPUtils::MakeNamespacePrefixFixed(*aReturnValue, *nsSOAPUtils::kXSURI[mVersion], mVersion, value);\
rc = nsSOAPUtils::MakeNamespacePrefix(*aReturnValue, *nsSOAPUtils::kXSURI[mSchemaVersion], value);\
if (NS_FAILED(rc)) return rc;\
value.Append(nsSOAPUtils::kQualifiedSeparator);\
value.Append(k##SOAPType##SchemaType);\
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mVersion], kSOAPArrayTypeAttribute, value);\
rc = (*aReturnValue)->SetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);\
if (NS_FAILED(rc)) return rc;\
XPType* values = NS_STATIC_CAST(XPType*, array);\
nsCOMPtr<nsIDOMElement> dummy;\
@ -521,7 +531,7 @@ NS_IMETHODIMP nsArrayEncoder::Encode(nsISOAPEncoding* aEncoding,
value.Assign(NS_ConvertUTF8toUCS2(nsDependentCString(ptr)).get());\
PR_smprintf_free(ptr);\
rc = EncodeSimpleValue(value,\
*nsSOAPUtils::kSOAPEncURI[mVersion],\
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],\
k##SOAPType##SchemaType,\
*aReturnValue,\
getter_AddRefs(dummy));\
@ -589,7 +599,7 @@ NS_IMETHODIMP nsStringEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kStringSchemaType,
aDestination,
aReturnValue);
@ -618,7 +628,7 @@ NS_IMETHODIMP nsBooleanEncoder::Encode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
if (aName.IsEmpty()) {
return EncodeSimpleValue(b ? nsSOAPUtils::kTrueA : nsSOAPUtils::kFalseA,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kBooleanSchemaType,
aDestination,
aReturnValue);
@ -652,7 +662,7 @@ NS_IMETHODIMP nsDoubleEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kDoubleSchemaType,
aDestination,
aReturnValue);
@ -686,7 +696,7 @@ NS_IMETHODIMP nsFloatEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kFloatSchemaType,
aDestination,
aReturnValue);
@ -720,7 +730,7 @@ NS_IMETHODIMP nsLongEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kLongSchemaType,
aDestination,
aReturnValue);
@ -754,7 +764,7 @@ NS_IMETHODIMP nsIntEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kIntSchemaType,
aDestination,
aReturnValue);
@ -788,7 +798,7 @@ NS_IMETHODIMP nsShortEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kShortSchemaType,
aDestination,
aReturnValue);
@ -822,7 +832,7 @@ NS_IMETHODIMP nsByteEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kByteSchemaType,
aDestination,
aReturnValue);
@ -856,7 +866,7 @@ NS_IMETHODIMP nsUnsignedLongEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kLongSchemaType,
aDestination,
aReturnValue);
@ -890,7 +900,7 @@ NS_IMETHODIMP nsUnsignedIntEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kIntSchemaType,
aDestination,
aReturnValue);
@ -924,7 +934,7 @@ NS_IMETHODIMP nsUnsignedShortEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kShortSchemaType,
aDestination,
aReturnValue);
@ -958,7 +968,7 @@ NS_IMETHODIMP nsUnsignedByteEncoder::Encode(nsISOAPEncoding* aEncoding,
PR_smprintf_free(ptr);
if (aName.IsEmpty()) {
return EncodeSimpleValue(value,
*nsSOAPUtils::kSOAPEncURI[mVersion],
*nsSOAPUtils::kSOAPEncURI[mSOAPVersion],
kByteSchemaType,
aDestination,
aReturnValue);
@ -981,7 +991,7 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
{
nsCOMPtr<nsIDOMAttr> enc;
nsresult rv = aSource->GetAttributeNodeNS(*nsSOAPUtils::kSOAPEncURI[mVersion], nsSOAPUtils::kEncodingStyleAttribute, getter_AddRefs(enc));
nsresult rv = aSource->GetAttributeNodeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], nsSOAPUtils::kEncodingStyleAttribute, getter_AddRefs(enc));
if (NS_FAILED(rv)) return rv;
if (enc) {
nsAutoString style;
@ -1002,7 +1012,7 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
nsresult rc = aEncoding->GetSchemaCollection(getter_AddRefs(collection));
if (NS_FAILED(rc)) return rc;
nsAutoString explicittype;
rc = aSource->GetAttributeNS(*nsSOAPUtils::kXSIURI[mVersion], nsSOAPUtils::kXSITypeAttribute, explicittype);
rc = aSource->GetAttributeNS(*nsSOAPUtils::kXSIURI[mSchemaVersion], nsSOAPUtils::kXSITypeAttribute, explicittype);
if (NS_FAILED(rc)) return rc;
nsAutoString ns;
nsAutoString name;
@ -1026,12 +1036,12 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
rc = element->GetType(getter_AddRefs(type));
if (NS_FAILED(rc)) return rc;
}
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mVersion])) { // Last-ditch hack to get undeclared types from SOAP namespace
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion])) { // Last-ditch hack to get undeclared types from SOAP namespace
if (name.Equals(kArraySOAPType)) { // This should not be needed if schema has these declarations
rc = collection->GetType(name, ns, getter_AddRefs(type));
}
else {
rc = collection->GetType(name, *nsSOAPUtils::kXSURI[mVersion], getter_AddRefs(type));
rc = collection->GetType(name, *nsSOAPUtils::kXSURI[mSchemaVersion], getter_AddRefs(type));
}
// if (NS_FAILED(rc)) return rc;
}
@ -1057,7 +1067,7 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
rc = simpleType->GetSimpleType(&simpleTypeValue);
if (NS_FAILED(rc)) return rc;
if (simpleTypeValue == nsISchemaSimpleType::SIMPLE_TYPE_BUILTIN) {
schemaURI.Assign(*nsSOAPUtils::kXSURI[mVersion]);
schemaURI.Assign(*nsSOAPUtils::kXSURI[mSchemaVersion]);
}
}
nsAutoString encodingKey;
@ -1085,10 +1095,10 @@ NS_IMETHODIMP nsDefaultEncoder::Decode(nsISOAPEncoding* aEncoding,
}
nsAutoString encodingKey;
if (typevalue == nsISchemaType::SCHEMA_TYPE_COMPLEX) {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnyTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnyTypeSchemaType, encodingKey);
}
else {
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mVersion], kAnySimpleTypeSchemaType, encodingKey);
SOAPEncodingKey(*nsSOAPUtils::kXSURI[mSchemaVersion], kAnySimpleTypeSchemaType, encodingKey);
}
nsresult rc = aEncoding->GetDecoder(encodingKey, getter_AddRefs(decoder));
if (NS_FAILED(rc)) return rc;
@ -1171,7 +1181,7 @@ NS_IMETHODIMP nsArrayEncoder::Decode(nsISOAPEncoding* aEncoding,
nsAutoString name;
nsCOMPtr<nsISchemaType>subtype;
nsAutoString value;
nsresult rc = aSource->GetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mVersion], kSOAPArrayTypeAttribute, value);
nsresult rc = aSource->GetAttributeNS(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion], kSOAPArrayTypeAttribute, value);
if (!value.IsEmpty()) { // Need to truncate []
nsCOMPtr<nsISchemaCollection> collection;
rc = aEncoding->GetSchemaCollection(getter_AddRefs(collection));
@ -1187,7 +1197,7 @@ NS_IMETHODIMP nsArrayEncoder::Decode(nsISOAPEncoding* aEncoding,
if (NS_FAILED(rc)) return rc;
}
}
if (ns.Equals(*nsSOAPUtils::kXSURI[mVersion])) {
if (ns.Equals(*nsSOAPUtils::kXSURI[mSchemaVersion])) {
if (name.Equals(kStringSchemaType)) {
}
else if (name.Equals(kBooleanSchemaType)) {
@ -1214,7 +1224,7 @@ NS_IMETHODIMP nsArrayEncoder::Decode(nsISOAPEncoding* aEncoding,
}
else return NS_ERROR_ILLEGAL_VALUE;
}
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mVersion]))
else if (ns.Equals(*nsSOAPUtils::kSOAPEncURI[mSOAPVersion]))
{
if (name.Equals(kArraySOAPType)) {
return NS_ERROR_ILLEGAL_VALUE; // Fix nested arrays later

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

@ -362,7 +362,7 @@ NS_IMETHODIMP nsSOAPMessage::Encode(PRUint16 aVersion, const nsAString & aMethod
if (NS_FAILED(rv)) return rv;
body = call;
nsAutoString prefix;
rv = nsSOAPUtils::MakeNamespacePrefixFixed(body, aTargetObjectURI, aVersion, prefix);
rv = nsSOAPUtils::MakeNamespacePrefix(body, aTargetObjectURI, prefix);
if (NS_FAILED(rv)) return rv;
if (!prefix.IsEmpty()) {
rv = body->SetPrefix(prefix);

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

@ -385,8 +385,7 @@ nsSOAPUtils::MakeNamespacePrefix(nsIDOMElement* aScope,
if (NS_FAILED(rc)) return rc;
if (hasDecl)
break;
current->GetParentNode(getter_AddRefs(temp));
current = temp;
echeck->GetParentNode(getter_AddRefs(check));
}
}
if (check == current) {
@ -453,30 +452,6 @@ nsSOAPUtils::MakeNamespacePrefix(nsIDOMElement* aScope,
*i2 = 'n';
return NS_OK;
}
/**
* This code optimizes the cases of known prefixes, which
* it is assumed are not overridden. The specified version
* number is also assumed to be correct.
*/
nsresult
nsSOAPUtils::MakeNamespacePrefixFixed(nsIDOMElement* aScope,
const nsAString & aURI,
PRUint16 aVersion,
nsAString & aPrefix)
{
if (aURI.Equals(*kSOAPEncURI[aVersion]))
aPrefix = kSOAPEncPrefix;
else if (aURI.Equals(*kSOAPEnvURI[aVersion]))
aPrefix = kSOAPEnvPrefix;
else if (aURI.Equals(*kXSIURI[aVersion]))
aPrefix = kXSIPrefix;
else if (aURI.Equals(*kXSURI[aVersion]))
aPrefix = kXSPrefix;
else
return MakeNamespacePrefix(aScope, aURI, aPrefix);
return NS_OK;
}
PRBool nsSOAPUtils::StartsWith(nsAString& aSuper,
nsAString& aSub)

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

@ -49,10 +49,6 @@ public:
static nsresult MakeNamespacePrefix(nsIDOMElement* aElement,
const nsAString & aURI,
nsAString & aPrefix);
static nsresult MakeNamespacePrefixFixed(nsIDOMElement* aElement,
const nsAString & aURI,
PRUint16 aVersion,
nsAString & aPrefix);
static nsresult GetNamespaceURI(nsIDOMElement* aElement,
const nsAString & aQName,
nsAString & aURI);