java 不兼容的魔法值错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6327968/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 15:24:51  来源:igfitidea点击:

Incompatible magic value error

javaclassloadermagic-numbers

提问by roman

I was following an example from the following link:

我正在关注以下链接中的一个示例:

http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html?page=1and this is an output I am getting:

http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html?page=1这是我得到的输出:

This program will use SimpleClassLoader.
        >>>>>> Load class : TestClass
        >>>>>> Not a system class.
        >>>>>> Fetching the implementation of TestClass
file was read successfully
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1768779887 in class file 
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:80)
    at aha.SimpleClassLoader.loadClass(SimpleClassLoader.java:42)
    at aha.Example.main(Example.java:11)

here is an example of my method that reads a file:

这是我读取文件的方法的示例:

 private byte getClassImplFromDataBase(String className)[] {
        System.out.println("        >>>>>> Fetching the implementation of "+className);
        byte result[];
        try {
            FileInputStream fi = new FileInputStream("C:/delete/"+className+".impl");
            result = new byte[fi.available()];
            fi.read(result);
            System.out.println("file was read succesfullyl");
            return result;
        } catch (Exception e) {

            /*
             * If we caught an exception, either the class wasnt found or it
             * was unreadable by our process.
             */
            return null;
        }
    }

I placed TestClass.impl file under C:/delete directory . My classes reside under package: aha So the file TestClass.impl is read ok, but something happens during the result = defineClass(classData, 0, classData.length); I know this method is deprecated but still ??

我将 TestClass.impl 文件放在 C:/delete 目录下。我的类驻留在包下:啊哈 所以文件 TestClass.impl 读取正常,但在 result = defineClass(classData, 0, classData.length); 期间发生了一些事情。我知道这种方法已被弃用,但仍然 ??

回答by Peter Lawrey

I don't know what file type .implis but I suspect it not a class file which contains byte code. The magic number 1768779887in hex is 696D706For impoin ASCII. (The first four bytes of importI suspect)

我不知道文件类型.impl是什么,但我怀疑它不是包含字节码的类文件。1768779887十六进制的幻数是696D706FimpoASCII。(import我怀疑的前四个字节)

So it would appear to me that you are trying to load uncompiled Java code whcih you cannot do (that is what the compiler is for) You are better of using the Compiler API, but I suspect you really need something like OSGi as trying to load classes your self requires you to have a very detailed understanding of how class loading work.

因此,在我看来,您正在尝试加载无法执行的未编译 Java 代码(这就是编译器的用途)您最好使用 Compiler API,但我怀疑您确实需要像 OSGi 这样的东西来尝试加载你的类需要你对类加载的工作方式有非常详细的了解。

回答by surfealokesea

I've had a similar error with a regular struts2 project, solved cleaning the project.

我在常规 struts2 项目中遇到了类似的错误,解决了清理项目的问题

8266 ERROR [main]: Excepción arrancando filtro struts2
java.lang.ClassFormatError: Incompatible magic value 0 in class file com/lm/action/musician/MusicianList
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1650)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:856)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1305)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1187)
    at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:144)
    at com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:108)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:424)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:378)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:495)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:286)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:234)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:437)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:225)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:308)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:79)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3563)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4133)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
    at org.apache.catalina.core.StandardService.start(StandardService.java:450)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:680)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:536)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
8266 ERROR [main]: Excepción arrancando filtro struts2
java.lang.ClassFormatError: Incompatible magic value 0 in class file com/lm/action/musician/MusicianList
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1650)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:856)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1305)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1187)
    at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:144)
    at com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:108)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:424)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:378)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:495)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:286)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:234)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:437)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:225)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:308)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:79)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3563)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4133)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
    at org.apache.catalina.core.StandardService.start(StandardService.java:450)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:680)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:536)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
abr 19, 2013 10:32:25 AM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
abr 19, 2013 10:32:25 AM org.apache.catalina.core.StandardContext start