【问题标题】:How can I solve "RhinoScriptEngineFactory cannot be cast to ScriptEngineFactory"?如何解决“RhinoScriptEngineFactory 无法转换为 ScriptEngineFactory”?
【发布时间】:2015-11-16 05:33:04
【问题描述】:

最近有人要求我从旧环境迁移旧版 Web 应用程序:

  • JBoss EAP 4.0.2
  • JDK 1.5(Java SE 开发工具包 5.0u22)

到较旧的目标环境:

  • JBoss EAP 5.0.1
  • JDK 1.6(Java SE 开发工具包 6u45)

但在新环境中运行特定操作时出现错误:

java.lang.ClassCastException: com.sun.script.javascript.RhinoScriptEngineFactory cannot be cast to javax.script.ScriptEngineFactory
    at javax.script.ScriptEngineManager.initEngines(ScriptEngineManager.java:109)
    at javax.script.ScriptEngineManager.access$0(ScriptEngineManager.java:86)
    at javax.script.ScriptEngineManager$1.run(ScriptEngineManager.java:80)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.script.ScriptEngineManager.init(ScriptEngineManager.java:78)
    at javax.script.ScriptEngineManager.<init>(ScriptEngineManager.java:51)
    ...
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    ...
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

我该如何解决这个异常?

更新

产生上述异常的动作与旧版 Web 应用程序中 jsr223-1.0.jar 提供的 Groovy 脚本语言有关。

【问题讨论】:

  • 我认为他们知道 Java 6 已经过时多年了?就像从石碑迁移到纸莎草纸,而世界其他地方都在使用计算机?
  • 是的@tim_yates,他们知道。他们有一个环境迁移计划,并根据自己的生命周期和估计的迁移成本相应地迁移应用程序。在这种情况下,应用程序将在目标环境被解除之前终止。 “从石碑到纸莎草”的迁移成本非常低;-)

标签: jakarta-ee groovy jboss migration legacy


【解决方案1】:

这是一个因 JDK(1.5 到 1.6)迁移而复杂化的 JBoss 类加载器问题。

JDK 1.6 has included JSR 223 Scripting for the Java™ Platform API,因此不再需要jsr223-1.0.jar

对我有用的解决方案是删除jsr223-1.0.jar(归功于Joseph Valerio and Santosh Singh)。

您可能对reading the whole story 感兴趣。

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2022-01-18
    • 2020-03-11
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2020-06-26
    • 2018-11-26
    • 2020-03-11
    相关资源
    最近更新 更多