You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2002/11/11 21:47:31 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xs XMLSchemaLoader.java
neilg 2002/11/11 12:47:31
Modified: java/src/org/apache/xerces/impl/xs XMLSchemaLoader.java
Log:
fixing bug 14455. Since it is not possible to read a byte stream twice, we used to fail when we tried doing so.
Revision Changes Path
1.12 +31 -4 xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java
Index: XMLSchemaLoader.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XMLSchemaLoader.java 28 Oct 2002 05:06:30 -0000 1.11
+++ XMLSchemaLoader.java 11 Nov 2002 20:47:31 -0000 1.12
@@ -186,6 +186,7 @@
private String fExternalSchemas = null;
private String fExternalNoNSSchema = null;
private Object fJAXPSource = null;
+ private Hashtable fJAXPCache;
private Locale fLocale = Locale.getDefault();
private XSDHandler fSchemaHandler;
@@ -243,6 +244,7 @@
fCMBuilder = builder;
fSchemaHandler = new XSDHandler(fGrammarBucket);
fDeclPool = new XSDeclarationPool();
+ fJAXPCache = new Hashtable();
}
/**
@@ -448,6 +450,7 @@
fSchemaHandler.setDeclPool(null);
}
fSubGroupHandler.reset();
+ fJAXPProcessed = false;
} // reset()
/**
@@ -576,6 +579,7 @@
* that it should. - NG
*/
private void processJAXPSchemaSource(Hashtable locationPairs) throws IOException {
+ fJAXPProcessed = true;
if (fJAXPSource == null) {
return;
}
@@ -585,6 +589,14 @@
String sid = null;
if (componentType == null) {
// Not an array
+ if(fJAXPSource instanceof InputStream ||
+ fJAXPSource instanceof InputSource) {
+ SchemaGrammar g = (SchemaGrammar)fJAXPCache.get(fJAXPSource);
+ if(g != null) {
+ fGrammarBucket.putGrammar(g);
+ return;
+ }
+ }
fXSDDescription.reset();
xis = xsdToXMLInputSource(fJAXPSource);
sid = xis.getSystemId();
@@ -594,8 +606,12 @@
fXSDDescription.setExpandedSystemId(sid);
fXSDDescription.fLocationHints = new String[]{sid};
}
- fJAXPProcessed = true;
- fGrammarBucket.putGrammar(loadSchema(fXSDDescription, xis, locationPairs));
+ SchemaGrammar g = loadSchema(fXSDDescription, xis, locationPairs);
+ if(fJAXPSource instanceof InputStream ||
+ fJAXPSource instanceof InputSource) {
+ fJAXPCache.put(fJAXPSource, g);
+ }
+ fGrammarBucket.putGrammar(g);
return ;
} else if ( (componentType != Object.class) &&
(componentType != String.class) &&
@@ -614,10 +630,17 @@
// JAXP spec. allow []s of type String, File, InputStream,
// InputSource also, apart from [] of type Object.
Object[] objArr = (Object[]) fJAXPSource;
- fJAXPProcessed = true;
//make local vector for storing targetn namespaces of schemasources specified in object arrays.
Vector jaxpSchemaSourceNamespaces = new Vector() ;
for (int i = 0; i < objArr.length; i++) {
+ if(objArr[i] instanceof InputStream ||
+ objArr[i] instanceof InputSource) {
+ SchemaGrammar g = (SchemaGrammar)fJAXPCache.get(objArr[i]);
+ if (g != null) {
+ fGrammarBucket.putGrammar(g);
+ continue;
+ }
+ }
fXSDDescription.reset();
xis = xsdToXMLInputSource(objArr[i]);
sid = xis.getSystemId();
@@ -639,6 +662,10 @@
}
else{
jaxpSchemaSourceNamespaces.add(targetNamespace) ;
+ }
+ if(objArr[i] instanceof InputStream ||
+ objArr[i] instanceof InputSource) {
+ fJAXPCache.put(objArr[i], grammar);
}
fGrammarBucket.putGrammar(grammar);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org