You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2001/10/26 22:57:29 UTC
DO NOT REPLY [Bug 4464] New: -
patch: jar-packaged translet-classname built with wrong slash on windows platform
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4464>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4464
patch: jar-packaged translet-classname built with wrong slash on windows platform
Summary: patch: jar-packaged translet-classname built with wrong
slash on windows platform
Product: XalanJ2
Version: CurrentCVS
Platform: PC
OS/Version: Windows NT/2K
Status: NEW
Severity: Normal
Priority: Other
Component: org.apache.xalan.xsltc
AssignedTo: xalan-dev@xml.apache.org
ReportedBy: johnh@schemasoft.com
When compiling and packaging a translet to a jar file in windows \ is used for
both filesystem access and any jar-packaged classnames. This is incorrect
behaviour, / should always be used in constructing the jar-packaged classnames
regardless of platform.
repro steps
-----------
C:\local>java org.apache.xalan.xsltc.cmdline.Compile -p com.schemasoft -o
Table -j foo.jar Table.xsl
C:\local>jar tf foo.jar *
com\schemasoft\Table$0.class
com\schemasoft\Table$1.class
com\schemasoft\Table.class
C:\local>java -classpath foo.jar com.schemasoft.Table
Exception in thread "main" java.lang.NoClassDefFoundError: com/schemasoft/Table
Notice that java was looking for "com/schemasoft/Table" and not finding it
since the class is named "com\schemasoft\Table" (ie the wrong slash was used
when constructing the JarEntry).
patch
-----
--- XSLTC.java 2001/10/26 09:38:06 1.30
+++ XSLTC.java 2001/10/26 20:45:33
@@ -475,6 +475,14 @@
}
/**
+ * Convert for Java class name to jar file name.
+ * (Replace '.' with '/' for jarnames on all platforms)
+ */
+ private String classJarFileName(final String className) {
+ return className.replace('.', '/') + ".class";
+ }
+
+ /**
* Generate an output File object to send the translet to
*/
private File getOutputFile(String className) {
@@ -700,7 +708,7 @@
classes = _classes.elements();
while (classes.hasMoreElements()) {
final JavaClass cl = (JavaClass)classes.nextElement();
- jos.putNextEntry(new JarEntry(classFileName(cl.getClassName())));
+ jos.putNextEntry(new JarEntry(classJarFileName(cl.getClassName())));
final ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
cl.dump(out); // dump() closes it's output stream
out.writeTo(jos);