java - jboss 无法定义类 javax.jms.JMSException

标签 java eclipse jakarta-ee jboss

我是 JBoss 的新手。我有一个 Ear 文件在 WAS 上工作正常。但是当我在 JBoss EAP 7.1 上尝试时,它给出了以下错误。

14:15:18,640 WARN  [org.jboss.modules] (MSC service thread 1-6) Failed to define class javax.jms.JMSException in Module "deployment.xxx.ear.yyy.war:mai
n" from Service Module Loader: java.lang.ClassFormatError: Failed to link javax/jms/JMSException (Module "xxx.ear.yyy.war:main" from Service
 Module Loader): Absent Code attribute in method that is not native or abstract in class file javax/jms/JMSException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:78)
    at org.jboss.modules.Module.loadModuleClass(Module.java:605)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getConstructor(Unknown Source)
    at org.jboss.as.jsf.deployment.JSFManagedBeanProcessor.deploy(JSFManagedBeanProcessor.java:100)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

14:15:18,640 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service jboss.deployment.subunit."xxx.ear"."yyy.war
".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."xxx.ear"."yyy.war".POST_MODULE: WFLYSRV0153: Failed to process
 phase POST_MODULE of subdeployment "yyy.war" of deployment "xxx.ear"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassFormatError: Failed to link javax/jms/JMSException (Module "deployment.xxx.ear.yyy.war:main" from Service Module Loader): Abs
ent Code attribute in method that is not native or abstract in class file javax/jms/JMSException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:78)
    at org.jboss.modules.Module.loadModuleClass(Module.java:605)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getConstructor(Unknown Source)
    at org.jboss.as.jsf.deployment.JSFManagedBeanProcessor.deploy(JSFManagedBeanProcessor.java:100)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)
    ... 5 more

从研究来看,似乎是依赖问题,只有接口(interface)。

<dependency>
  <groupId>javax</groupId>
   <artifactId>javaee-api</artifactId>
   <version>6.0</version>
   <scope>provided</scope>
</dependency>

所以我改为

  <dependency>
    <groupId>org.apache.openejb</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0-5</version>
  </dependency>

但运气不佳。我也在寻找像j2ee.jar这样的jar。我可以在 JBoss 运行时下找到一个 jboss-ejb-api_3.2_spec-1.0.0.Final-redhat-1.jar 。但它不包含 javax.jms.* 上的任何内容。

我还查看了类加载。使用 jboss-deployment-struction.xml 修补了ear文件,其中包含消除双重类加载的内容。

<jboss-deployment-structure> 
    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>    
</jboss-deployment-structure>

还是不行。有什么建议吗?

最佳答案

那个javax.javaee-api.6.0 Maven 依赖项有一个 well documented问题 - 它所需的任何实现类的字节代码已被剥离,导致 java.lang.ClassFormatError .

您看到此情况的原因是因为即使您的 dependency<scope>provided</scope> ,此 jar 的副本已泄漏到您的应用程序部署中的某处。你需要摆脱它。

完成此操作后,您可以将依赖项升级到 <version>7.0</version>它没有这个问题(这通常只是依赖它的单元测试的问题)。

关于java - jboss 无法定义类 javax.jms.JMSException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285090/

相关文章:

java - 我怎样才能只退出我的子程序,而不是整个虚拟机?

database - 如何在 Windows 中使用的 Eclipse 中设置 Prolog Interpreter 路径?

java - JPA 2.1 转换器注释

java - 哪个版本的jetty与cometd-3.0.2兼容

java - 是否可以在 Groovy 中使用不是脚本的委托(delegate)

java - Map 和 Hashmap 有区别吗?

java - 在 netbeans 8.2 中添加 Glassfish Server 5.0

java - Intellij 空 R 文件

java - 使用应用程序 android 将图像上传到谷歌云存储

eclipse - 注释类型资源的属性查找未定义