morten 01/10/02 04:16:52
Modified: java/src/org/apache/xalan/xsltc/trax TemplatesImpl.java
TransformerFactoryImpl.java TransformerImpl.java
Log:
Fix to ensure that plain filenames can be passed in to the Transformer
and TransformerFactory. Up until now only URLs were accepted by the
TransformerFactory.
PR: n/a
Obtained from: n/a
Submitted by: [EMAIL PROTECTED]
Reviewed by: [EMAIL PROTECTED]
Revision Changes Path
1.7 +52 -35
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java
Index: TemplatesImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TemplatesImpl.java 2001/09/28 14:39:14 1.6
+++ TemplatesImpl.java 2001/10/02 11:16:52 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: TemplatesImpl.java,v 1.6 2001/09/28 14:39:14 morten Exp $
+ * @(#)$Id: TemplatesImpl.java,v 1.7 2001/10/02 11:16:52 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -64,6 +64,9 @@
package org.apache.xalan.xsltc.trax;
import java.io.Serializable;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.IOException;
import java.util.Properties;
import java.security.AccessController;
import java.security.PrivilegedAction;
@@ -84,6 +87,10 @@
// any auxiliary classes (representing node sort records, predicates,
etc.)
private byte[][] _bytecodes = null;
+ private Class[] _class = null;
+
+ private int _transletIndex = -1;
+
// This error could occur when a compilation inside the
TransformerFactory
// failed and when a template has been loaded from stable storage.
private final static String NO_TRANSLET_CODE =
@@ -102,6 +109,20 @@
}
}
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(_transletName);
+ out.writeObject(_bytecodes);
+ out.flush();
+ }
+
+ public void readExternal(ObjectInput in)
+ throws IOException, ClassNotFoundException {
+ _transletName = (String)in.readObject();
+ _bytecodes = (byte[][])in.readObject();
+ _class = null;
+ }
+
+
/**
* The only way to create an XSLTC emplate object
* The bytecodes for the translet and auxiliary classes, plus the name of
@@ -145,7 +166,7 @@
* Defines the translet class and auxiliary classes.
* Returns a reference to the Class object that defines the main class
*/
- private Translet defineTransletClasses()
+ private void defineTransletClasses()
throws TransformerConfigurationException {
if (_bytecodes == null)
@@ -161,25 +182,18 @@
);
try {
- int transletIndex = -1;
final int classCount = _bytecodes.length;
- Class[] clazz = new Class[classCount];
+ _class = new Class[classCount];
for (int i = 0; i < classCount; i++) {
- clazz[i] = loader.defineClass(_bytecodes[i]);
- if (clazz[i].getName().equals(_transletName)) transletIndex = i;
+ _class[i] = loader.defineClass(_bytecodes[i]);
+ if (_class[i].getName().equals(_transletName))
+ _transletIndex = i;
}
- if (transletIndex < 0)
+ if (_transletIndex < 0)
throw new TransformerConfigurationException(NO_MAIN_TRANSLET+
_transletName);
-
- Translet translet = (Translet)clazz[transletIndex].newInstance();
- for (int i = 0; i < classCount; i++) {
- if (i != transletIndex)
- translet.addAuxiliaryClass(clazz[i]);
- }
- return translet;
}
catch (ClassFormatError e) {
@@ -190,14 +204,6 @@
throw new TransformerConfigurationException(TRANSLET_OBJECT_ERR+
_transletName);
}
- catch (InstantiationException e) {
- throw new TransformerConfigurationException(TRANSLET_OBJECT_ERR+
- _transletName);
- }
- catch (IllegalAccessException e) {
- throw new TransformerConfigurationException(TRANSLET_OBJECT_ERR+
- _transletName);
- }
}
/**
@@ -207,21 +213,32 @@
*/
private Translet getTransletInstance()
throws TransformerConfigurationException {
- if (_transletName == null) return null;
-
- // First assume that the JVM already had the class definition
try {
- Class transletClass = Class.forName(_transletName);
- return((Translet)transletClass.newInstance());
- }
- // Ignore these for now, try to define translet class again
- catch (LinkageError e) { }
- catch (InstantiationException e) { }
- catch (ClassNotFoundException e) { }
- catch (IllegalAccessException e) { }
+ if (_transletName == null) return null;
- // Create the class definition from the bytecodes if failed
- return((Translet)defineTransletClasses());
+ if (_class == null) defineTransletClasses();
+
+ // The translet needs a reference to all its auxiliary class
+ // definitions so that it can instanciate them on the fly. You
+ // wouldn't think this is necessary, but it seems like the JVM
+ // quickly forgets the classes we define here and the translet
+ // needs to know them as long as it exists.
+ Translet translet = (Translet)_class[_transletIndex].newInstance();
+ final int classCount = _bytecodes.length;
+ for (int i = 0; i < classCount; i++) {
+ if (i != _transletIndex)
+ translet.addAuxiliaryClass(_class[i]);
+ }
+ return translet;
+ }
+ catch (InstantiationException e) {
+ throw new TransformerConfigurationException(TRANSLET_OBJECT_ERR+
+ _transletName);
+ }
+ catch (IllegalAccessException e) {
+ throw new TransformerConfigurationException(TRANSLET_OBJECT_ERR+
+ _transletName);
+ }
}
/**
1.19 +7 -8
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java
Index: TransformerFactoryImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- TransformerFactoryImpl.java 2001/08/02 16:01:51 1.18
+++ TransformerFactoryImpl.java 2001/10/02 11:16:52 1.19
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: TransformerFactoryImpl.java,v 1.18 2001/08/02 16:01:51 morten
Exp $
+ * @(#)$Id: TransformerFactoryImpl.java,v 1.19 2001/10/02 11:16:52 morten
Exp $
*
* The Apache Software License, Version 1.1
*
@@ -393,7 +393,7 @@
throws TransformerConfigurationException {
InputSource input = null;
- final String systemId = source.getSystemId();
+ String systemId = source.getSystemId();
try {
@@ -427,13 +427,12 @@
else {
throw new TransformerConfigurationException(UNKNOWN_SOURCE_ERR);
}
+
+ if ((new File(systemId)).exists())
+ systemId = "file:"+systemId;
+
// Try to create an InputStream from the SystemId if no input so far
- if (input == null) {
- if ((new File(systemId)).exists())
- input = new InputSource("file:/"+systemId);
- else
- input = new InputSource(systemId);
- }
+ if (input == null) input = new InputSource(systemId);
// Pass system id to InputSource just to be on the safe side
input.setSystemId(systemId);
1.16 +2 -2
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java
Index: TransformerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- TransformerImpl.java 2001/09/28 14:39:14 1.15
+++ TransformerImpl.java 2001/10/02 11:16:52 1.16
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: TransformerImpl.java,v 1.15 2001/09/28 14:39:14 morten Exp $
+ * @(#)$Id: TransformerImpl.java,v 1.16 2001/10/02 11:16:52 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -230,7 +230,7 @@
// other contents of the Result object could not be used
if (systemId != null) {
if ((new File(systemId)).exists())
- systemId = "file:/"+systemId;
+ systemId = "file:"+systemId;
final URL url = new URL(systemId);
final URLConnection connection = url.openConnection();
final OutputStream ostream = connection.getOutputStream();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]