From 5938f059e545c80984d0041e456f12ffac8b923a Mon Sep 17 00:00:00 2001 From: "doronr%us.ibm.com" Date: Tue, 8 Mar 2005 21:34:41 +0000 Subject: [PATCH] bug 284351 - nsSchemaLoader doesn't handle xsd:complexType correctly. r/sr=peterv --- .../webservices/schema/src/nsSchemaLoader.cpp | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/extensions/webservices/schema/src/nsSchemaLoader.cpp b/extensions/webservices/schema/src/nsSchemaLoader.cpp index 25feb91c1cf3..689f1f33bfd4 100644 --- a/extensions/webservices/schema/src/nsSchemaLoader.cpp +++ b/extensions/webservices/schema/src/nsSchemaLoader.cpp @@ -1301,31 +1301,41 @@ nsSchemaLoader::ProcessComplexType(nsIWebServiceErrorHandler* aErrorHandler, PRUint16 derivation = nsISchemaComplexType::DERIVATION_SELF_CONTAINED; nsCOMPtr baseType; nsCOMPtr modelGroup; - + while (NS_SUCCEEDED(iterator.GetNextChild(getter_AddRefs(childElement), getter_AddRefs(tagName))) && childElement) { if (tagName == nsSchemaAtoms::sSimpleContent_atom) { contentModel = nsISchemaComplexType::CONTENT_MODEL_SIMPLE; - - rv = ProcessSimpleContent(aErrorHandler, aSchema, - childElement, typeInst, + + rv = ProcessSimpleContent(aErrorHandler, aSchema, childElement, typeInst, &derivation, getter_AddRefs(baseType)); break; } - else if (tagName == nsSchemaAtoms::sComplexContent_atom) { - rv = ProcessComplexContent(aErrorHandler, aSchema, - childElement, typeInst, + + if (tagName == nsSchemaAtoms::sComplexContent_atom) { + rv = ProcessComplexContent(aErrorHandler, aSchema, childElement, typeInst, &contentModel, &derivation, getter_AddRefs(baseType)); - break; + break; } - else if (tagName != nsSchemaAtoms::sAnnotation_atom) { - rv = ProcessComplexTypeBody(aErrorHandler, aSchema, + + if (tagName == nsSchemaAtoms::sModelGroup_atom || + tagName == nsSchemaAtoms::sAll_atom || + tagName == nsSchemaAtoms::sChoice_atom || + tagName == nsSchemaAtoms::sSequence_atom || + tagName == nsSchemaAtoms::sAttribute_atom || + tagName == nsSchemaAtoms::sAttributeGroup_atom || + tagName == nsSchemaAtoms::sAnyAttribute_atom) { + rv = ProcessComplexTypeBody(aErrorHandler, aSchema, aElement, typeInst, nsnull, &contentModel); break; } + + if (tagName == nsSchemaAtoms::sAnnotation_atom) { + // XXX: skipping for now + } else { // Unexpected schema element nsAutoString elementName;