Duplicate :
|
|
Duplicate :
|
|
Duplicate :
|
|
Relates :
|
Consider this source file, which is stripped out of: http://cvs.apache.org/viewcvs.cgi/xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/Token.java ----%<---- Test.java public class Test { private static final String x1 = "\u0000\u007F\u0080\u00FF\u0100\u017F\u0180\u024F\u0250\u02AF\u02B0\u02FF\u0300\u036F\u0370\u03FF\u0400\u04FF\u0530\u058F\u0590\u05FF\u0600\u06FF\u0700\u074F\u0780\u07BF"; public static void main(String[] args) { StringBuffer buf1 = new StringBuffer(String.valueOf(x1.length())); StringBuffer buf2 = new StringBuffer("OK; length="); buf2.append(buf1); System.out.println(buf2); } } ----%<---- Compiled under 1.3.1, it can be run on 1.3.1 or 1.4.1_01 but not 1.4.2-beta-b10. Compiled under 1.4.x, it can be run on 1.4.x but not 1.3.1. illegalutf8test$ /space/jdk1.3.1_03/bin/javac Test.java illegalutf8test$ /space/jdk1.3.1_03/bin/java Test OK; length=28 illegalutf8test$ /space/jdk1.4.1_01/bin/java Test OK; length=28 illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java Test Exception in thread "main" java.lang.ClassFormatError: Test (Illegal UTF8 string in constant pool) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:504) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at java.net.URLClassLoader.defineClass(URLClassLoader.java:250) at java.net.URLClassLoader.access$100(URLClassLoader.java:54) at java.net.URLClassLoader$1.run(URLClassLoader.java:193) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315) Could not find the main class. Program will exit. illegalutf8test$ /space/jdk1.4.1_01/bin/javac Test.java illegalutf8test$ /space/jdk1.3.1_03/bin/java Test Exception in thread "main" java.lang.NoSuchMethodError at Test.main(Test.java:6) illegalutf8test$ /space/jdk1.4.1_01/bin/java Test OK; length=28 illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java Test OK; length=28 illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/javac Test.java illegalutf8test$ /space/jdk1.3.1_03/bin/java Test Exception in thread "main" java.lang.NoSuchMethodError at Test.main(Test.java:6) illegalutf8test$ /space/jdk1.4.1_01/bin/java Test OK; length=28 illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java Test OK; length=28 illegalutf8test$ /space/jdk1.3.1_03/bin/java -version java version "1.3.1_03" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_03-b03) Java HotSpot(TM) Client VM (build 1.3.1_03-b03, mixed mode) illegalutf8test$ /space/jdk1.4.1_01/bin/java -version java version "1.4.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01) Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode) illegalutf8test$ /space/jdk1.4.2-beta-b10/bin/java -version java version "1.4.2-beta" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b10) Java HotSpot(TM) Client VM (build 1.4.2-beta-b10, mixed mode) illegalutf8test$ Looks like some check in the VM was tightened up in 1.4.2 - unfortunately this can break older compiled code. To see in NetBeans, get a NetBeans development build, open an XML file, and right-click in the Editor and choose Validate XML. Under 1.4.1_01, it validates; under 1.4.2, a ClassFormatError is thrown from Xerces code. I do not know offhand what version of javac was used to compile this xerces2.jar; I think we got it in binary form from xml.apache.org. ###@###.### 2002-12-13 ###@###.### 2002-12-13 ###@###.### 2002-12-13 ###@###.### 2002-12-13
|