【问题标题】:Incompatible magic value 21877456 in class file类文件中不兼容的魔法值 21877456
【发布时间】:2012-05-08 15:14:07
【问题描述】:

我试图在我的网页上使用 java 小程序。我尝试/搜索很多东西,但没有机会。就是这样。

我的小程序代码在 app.html 中很简单:

    <applet codebase="." archive="applet.jar" code="de.escape.quincunx.dxf.apViewer" width="640" height="480" name="TEST">
    <param name="file"               value="40.dxf">
    <param name="framed"             value="false">
    <param name="frameWidth"         value="800">
    <param name="frameHeight"        value="600">
    </applet>

当我直接在浏览器中打开时,此 html 文件正在工作。当我使用 apache 服务它时它可以工作,但是当我尝试使用 IIS 服务时它不工作并给出错误“类文件中不兼容的魔法值 21877456”。在 apache 中我尝试了 php 和 html,两者都在工作。

当我尝试为小程序提供服务时,是否需要对 IIS 进行任何特殊配置?

感谢您的回答。

【问题讨论】:

    标签: java windows iis applet


    【解决方案1】:

    我认为 IIS 没有为 .class 提供正确的文件,可能它正在返回 404 错误或类似的错误,因为它找不到该文件。

    这个错误意味着 Java 需要一个 .class 文件,所有的类文件都以 0xCAFEBABE 开头,这是一个神奇的数字,Java 可以使用它来检查它正在接收的文件实际上是一个类文件。但是,在您的情况下,IIS 返回的文件不是类文件,它不是以 0xCAFEBABE 开头的,Java 无法解析它。

    最常见的原因是网络服务器无法提供文件,通常是因为 404 错误。

    您应该检查幕后发生的事情,在 IIS 日志中搜索 .class 文件的请求,或者使用工具(甚至可能是 firebug)查看返回给浏览器的内容。

    【讨论】:

    • IIS 也不会提供没有配置内容类型的文件。确保在 HLKM\System\Classes\.jar 的注册表中有一个名为“Content Type”的字符串值 - 正确的值似乎是 "application/x-java-archive"
    • 我猜你在谈论 HKLM\Software\Classes,我检查了一下,没有 .jar 的内容类型字符串,我添加了,但没有任何改变,但感谢您的回复,我正在寻找更深入。实际上,我确定我不是唯一看到这一点的人,肯定还有其他人使用 IIS 并提供小程序服务。我会等待另一个答复,同时进行更多调查。
    • @Simone Gianni,如果它与 Mime 类型有关,你知道 .jar 和 .class 的正确 mime 类型是什么吗?我尝试将 mime 类型放在 Apache mime 类型中但没有任何改变(对于 .jar 是 application/java-archive,对于 .class 是 application/java-vm)。在 iis 日志中,java 尝试获取“/de/escape /quincunx/ap/reader/apVPORT.class”,这是出现错误的地方。
    【解决方案2】:

    终于找到了解决办法。实际上它不是确切的解决方案,但感谢您的回答 Simone Gianni。他的回答让我深入搜索了 IIS 访问日志,并将其与 APACHE 访问日志进行了比较。是的,两者都是相同的,看起来 JAR 文件中没有几个类。所以 apVPORT.class 不在 jar 文件中,编写此小程序的开发人员将这些类的调用留在小程序的其他部分,即使他不使用它们。

    如果有人可以回答为什么 apache 不向 java 发送任何信息或“它的 okey”信息并继续加载小程序的其余部分,即使它看到 apVPORT.class 的 404 但 IIS 向 java 发送 404,这将成为这个问题的最终答案。

    【讨论】:

    • “JAR 文件中没有几个类”——Apache 不只是提供 .jar 文件,而不是单个类吗?您是否有显示单个 .class 请求的 apache 访问日志?它给出了什么响应码?
    • 您是否只阅读了我的那部分信息?因为我已经提到了 apache 和 iis 日志,所以两者都是一样的; “两者都是相同的,看起来 JAR 文件中没有几个类”它的 404 用于 apVPORT.class 例如,在 iis 和 apache 日志中。
    • 我不明白你关于发送“没关系”的最后一点,你在“apache 看到 404 但是 IIS 发送 404”中说“但是”,所以听起来像实际上正在发生一些不同的事情。我只是想澄清你的问题实际上是什么。为什么 apache 会知道丢失的文件没问题?
    • 行为很奇怪,所以很难解释。让我尝试用不同的方式来解释。我在 IIS 和 Apache 上使用相同的 JAR。在 IIS 上,java 在尝试运行小程序时出错,因为它看到 JAR 中的某些文件不存在(例如,在日志中 apVPORT.class 是返回 404)。这是当 java 找不到文件或请求的文件返回 404 给 JAVA 时的确切错误(不兼容的魔法值)。在 Apache 上发生了同样的事情(在 apache 日志中 apVPORT.class 是返回 404),但小程序正在正常工作,没有任何错误。其余的 cmets 只是我在这个问题上的强项。
    【解决方案3】:

    类文件中不兼容的魔法值21877456:我发现当页面无法访问/读取jar文件时出现此错误。

    在 aspx 页面中 -

       <applet code="FileAccess.class"
       archive="../applet/SignFileAccessApplet.jar" width="325" height="325">  
       </applet>
    

    在存档中使用 Visual Studio 的智能感知提供的“pickurl”选项检查 url 是否正确。 jar 文件中的类文件路径需要在 code 属性中给出。

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2013-12-21
      • 2012-08-24
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多