sandygao 2002/10/25 09:42:39
Modified: java/src/org/apache/xerces/impl/xs XMLSchemaValidator.java
Log:
Performance: adding a new validate method that takes an Object as the string
value. This enables passing a StringBuffer to such method, and possibly avoid
some object creations. Without this method, we need to convert StringBuffer
to String before calling validate method, then create a StringBuffer in the
validate method for normalization, and finally convert the StringBuffer to a
String again after normalization:
buffer -> string -> buffer -> string
With this method, the original StringBuffer can be used to hold the normalized
value. This saves 2 object creations:
buffer -> string
Revision Changes Path
1.120 +11 -9
xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
Index: XMLSchemaValidator.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -r1.119 -r1.120
--- XMLSchemaValidator.java 24 Oct 2002 15:56:35 -0000 1.119
+++ XMLSchemaValidator.java 25 Oct 2002 16:42:38 -0000 1.120
@@ -2209,6 +2209,8 @@
// Same for append buffer. Simple types and elements with fixed
// value constraint don't allow sub-elements. -SG
fAppendBuffer = false;
+ // same here.
+ fUnionType = false;
}
return augs;
@@ -2806,9 +2808,6 @@
}
// fixed values are handled later, after xsi:type determined.
- String content = XMLSymbols.EMPTY_STRING;
- if (fAppendBuffer)
- content = fBuffer.toString();
fValidatedInfo.normalizedValue = null;
// Element Locally Valid (Element)
@@ -2843,11 +2842,12 @@
// 5.2 If the declaration has no {value constraint} or the item has
either element or character [children] or clause 3.2 has applied, then all of the
following must be true:
// 5.2.1 The element information item must be valid with respect to the
actual type definition as defined by Element Locally Valid (Type) (3.3.4).
- Object actualValue = elementLocallyValidType(element, content);
+ Object actualValue = elementLocallyValidType(element, fBuffer);
// 5.2.2 If there is a fixed {value constraint} and clause 3.2 has not
applied, all of the following must be true:
if (fCurrentElemDecl != null &&
fCurrentElemDecl.getConstraintType() == XSConstants.VC_FIXED &&
!fNil) {
+ String content = fBuffer.toString();
// 5.2.2.1 The element information item must have no element
information item [children].
if (fSubElement)
reportSchemaError("cvc-elt.5.2.2.1", new
Object[]{element.rawname});
@@ -2882,8 +2882,10 @@
fDocumentHandler != null && fUnionType) {
// for union types we need to send data because we delayed sending
// this data when we received it in the characters() call.
- if (fValidatedInfo.normalizedValue != null)
- content = fValidatedInfo.normalizedValue;
+ String content = fValidatedInfo.normalizedValue;
+ if (content == null)
+ content = fBuffer.toString();
+
int bufLen = content.length();
if (fNormalizedStr.ch == null || fNormalizedStr.ch.length < bufLen) {
fNormalizedStr.ch = new char[bufLen];
@@ -2895,7 +2897,7 @@
}
} // processElementContent
- Object elementLocallyValidType(QName element, String textContent) {
+ Object elementLocallyValidType(QName element, Object textContent) {
if (fCurrentType == null)
return null;
@@ -2930,7 +2932,7 @@
return retValue;
} // elementLocallyValidType
- Object elementLocallyValidComplexType(QName element, String textContent) {
+ Object elementLocallyValidComplexType(QName element, Object textContent) {
Object actualValue = null;
XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]