【问题标题】:NoSuchMethodError error when using JMS on Websphere 8.5在 Websphere 8.5 上使用 JMS 时出现 NoSuchMethodError 错误
【发布时间】:2020-02-29 05:00:25
【问题描述】:

我有一个部署在 Websphere 8.5 上的 Java 应用程序。它收到一条消息,我正在尝试使用它,但这是我得到的错误,即使我在 getBody()
代码片段:

上有正确的 JMS jar
if (arg0 instanceof BytesMessage)
{
    byte[] payload = arg0.getBody(byte[].class);
    myMessage = new String(payload);
}    

Jar 文件:

<dependency>
   <groupId>javax.jms</groupId>
   <artifactId>javax.jms-api</artifactId>
   <version>2.0.1</version>
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>javax</groupId>
   <artifactId>javaee-api</artifactId>
   <version>6.0</version>
   <scope>provided</scope>
</dependency>

来自 Websphere 日志的错误:

  Caused by: java.lang.NoSuchMethodError: javax/jms/Message.getBody(Ljava/lang/Class;)Ljava/lang/Object; (loaded from file:/opt/was_static/websphere_8.5.5.15.1/appserver/plugins/javax.j2ee.jms.jar by org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader@6d5d04f3) called from class com.mycompany.myapplication.sync.mdb.myapplicationSyncOutboundMDB (loaded from file:/opt/was_static/profiles/appsrv01/installedApps/eaodr01Cell01/myapplication-ear-mydomain.com-editionmyapplication-ear-0.9.6.ear/myapplication-ejb-0.9.6.jar by 
com.ibm.ws.classloader.CompoundClassLoader@19abf904[app:myapplication-ear-mydomain.com-editionmyapplication-ear-0.9.6]
   Local ClassPath: 
   Parent: com.ibm.ws.classloader.ExtJarClassLoader@890f8480[PF][server:0]
   Delegation Mode: PARENT_FIRST)  

Websphere CLassloading

任何想法为什么我的应用程序编译良好,因为它在代码中看到 javax.jms.Message 但 Websphere 找不到这个?

【问题讨论】:

    标签: java maven jms websphere-8


    【解决方案1】:

    WebSphere Application Server 8.5.5 支持 Java EE 6,其中包括 JMS 1.1,而不是 JMS 2.0,并且 getBody(Class) 方法已添加到 JMS 2.0(即 Java EE 7 和更新版本)中。

    如果您想使用 JMS 2.0,那么您需要升级到 WebSphere Application Server 9.0。

    【讨论】:

    • 在我的 Websphere 8.5 应用程序节点上,我认为 Java 1.8 是默认的。
    • 这是Java SE级别,与服务器的JEE级别不同。
    • 这可能是真的,但我的问题是代码不应该从 EAR 而不是从 Websphere 中获取依赖关系,因为我的 maven 构建中已经有了 javax.jms 库?
    • 没有。 Java 类加载首先委托给父类加载器,即应用程序服务器。如果您想从您的应用程序中使用 JMS 2,您可以切换顺序,但您必须确保您没有使用服务器定义的 JMS 资源,并确保您的耳朵不包含运行时所需的 API。跨度>
    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多