diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp index 29cb7b7ca83186a3b7deb9ed6e3e2636a2d91125..cdd931be1e678f265dda0d05f546bef53a4198e9 100644 --- a/src/xercesc/internal/IGXMLScanner2.cpp +++ b/src/xercesc/internal/IGXMLScanner2.cpp @@ -1697,7 +1697,8 @@ void IGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount) // normalize the attribute according to schema whitespace facet DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME); - ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiType, true); + normalizeAttRawValue(SchemaSymbols::fgXSI_TYPE, valuePtr, fXsiType); + ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiType.getRawBuffer(), fXsiType, true); if (!fXsiType.isEmpty()) { int colonPos = -1; unsigned int uriId = resolveQName ( @@ -1712,16 +1713,18 @@ void IGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount) else if (XMLString::equals(suffPtr, SchemaSymbols::fgATT_NILL)) { // normalize the attribute according to schema whitespace facet - XMLBuffer& fXsiNil = fBufMgr.bidOnBuffer(); + XMLBufBid bbXsi(&fBufMgr); + XMLBuffer& fXsiNil = bbXsi.getBuffer(); + DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN); - ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiNil, true); + normalizeAttRawValue(SchemaSymbols::fgATT_NILL, valuePtr, fXsiNil); + ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiNil.getRawBuffer(), fXsiNil, true); if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_TRUE)) ((SchemaValidator*)fValidator)->setNillable(true); else if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_FALSE)) ((SchemaValidator*)fValidator)->setNillable(false); else emitError(XMLErrs::InvalidAttValue, fXsiNil.getRawBuffer(), valuePtr); - fBufMgr.releaseBuffer(fXsiNil); } } } diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp index f16414e8eb3e82dbaa0c968ea2823c9ba861a31e..35c089b6e981d333bc0ffad9fa2f3ae9a402500e 100644 --- a/src/xercesc/internal/SGXMLScanner.cpp +++ b/src/xercesc/internal/SGXMLScanner.cpp @@ -3524,7 +3524,8 @@ void SGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount) // normalize the attribute according to schema whitespace facet DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_QNAME); - ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiType, true); + normalizeAttRawValue(SchemaSymbols::fgXSI_TYPE, valuePtr, fXsiType); + ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiType.getRawBuffer(), fXsiType, true); if (!fXsiType.isEmpty()) { int colonPos = -1; unsigned int uriId = resolveQName ( @@ -3539,16 +3540,18 @@ void SGXMLScanner::scanRawAttrListforNameSpaces(XMLSize_t attCount) else if (XMLString::equals(suffPtr, SchemaSymbols::fgATT_NILL)) { // normalize the attribute according to schema whitespace facet - XMLBuffer& fXsiNil = fBufMgr.bidOnBuffer(); + XMLBufBid bbXsi(&fBufMgr); + XMLBuffer& fXsiNil = bbXsi.getBuffer(); + DatatypeValidator* tempDV = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_BOOLEAN); - ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, valuePtr, fXsiNil, true); + normalizeAttRawValue(SchemaSymbols::fgATT_NILL, valuePtr, fXsiNil); + ((SchemaValidator*) fValidator)->normalizeWhiteSpace(tempDV, fXsiNil.getRawBuffer(), fXsiNil, true); if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_TRUE)) ((SchemaValidator*)fValidator)->setNillable(true); else if(XMLString::equals(fXsiNil.getRawBuffer(), SchemaSymbols::fgATTVAL_FALSE)) ((SchemaValidator*)fValidator)->setNillable(false); else emitError(XMLErrs::InvalidAttValue, fXsiNil.getRawBuffer(), valuePtr); - fBufMgr.releaseBuffer(fXsiNil); } } } diff --git a/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml new file mode 100644 index 0000000000000000000000000000000000000000..df5e3ff9419cfb8608419cdd889ea1447226b658 --- /dev/null +++ b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xml @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<p xsi:type=" 	Person " + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="test.xsd"> + <name>John Doe</name> +</p> + diff --git a/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd new file mode 100644 index 0000000000000000000000000000000000000000..24b5b5578716426d531d325555b39afa93f25a85 --- /dev/null +++ b/tests/src/XSTSHarness/regression/XERCESC-1945/test.xsd @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <xsd:complexType name="Person"> + <xsd:sequence> + <xsd:element name="name"/> + </xsd:sequence> + </xsd:complexType> +</xsd:schema> + diff --git a/tests/src/XSTSHarness/regression/Xerces.testSet b/tests/src/XSTSHarness/regression/Xerces.testSet index beb9616a95a943d90d260d1f4726d5e3ce676957..88e46808299b309a284d1ab0898541108478c950 100644 --- a/tests/src/XSTSHarness/regression/Xerces.testSet +++ b/tests/src/XSTSHarness/regression/Xerces.testSet @@ -826,4 +826,20 @@ <current status="accepted" date="2010-08-09"/> </instanceTest> </testGroup> + <testGroup name="XERCESC-1945"> + <annotation> + <documentation>Whitespace in xsi:type</documentation> + </annotation> + <documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-1945"/> + <schemaTest name="XERCESC-1945-1"> + <schemaDocument xlink:href="./XERCESC-1945/test.xsd"/> + <expected validity="valid"/> + <current status="accepted" date="2010-09-28"/> + </schemaTest> + <instanceTest name="XERCESC-1945-2"> + <instanceDocument xlink:href="./XERCESC-1945/test.xml"/> + <expected validity="valid"/> + <current status="accepted" date="2010-09-28"/> + </instanceTest> + </testGroup> </testSet>