我有一个存在于 Weblogic 10.3 中的 EJB。我们将其移至 12c 并修改构建以使用 maven-plugin 来创建 EJB 客户端和 EJB(2 个单独的构建)。
有一个 Java 应用程序需要通过远程接口调用 EJB。这样做时,有 2 种方法会产生以下错误(其余方法工作正常):
java.rmi.UnmarshalException: Method identifier [29] out of range
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:290)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:248)
at net.footware.shoeManager.ShoeManager_xwmvzk_EOImpl_1211_WLStub.updateShoeStatus(Unknown Source)
另一种方法给出了相同的错误,但编号不同:
java.rmi.UnmarshalException: Method identifier [28] out of range
值得注意的是,客户端 jar 和 EJB jar 构建在 2 个不同的 pom.xml 文件中。构建客户端的 pom.xml 显式排除了一些类,而构建 EJB jar 的 pom.xml 没有。
它不仅仅是缺少该方法,因为它会发回“未找到方法”错误。我还将方法简化为简单地返回 true(没有其他逻辑)。看来调用永远不会到达远程方法中的代码。还有其他方法可以获取和返回相同的对象并且不会抛出错误。
当我创建一个接受布尔值的新方法时,我收到了这个错误:
Caused by: java.io.StreamCorruptedException: invalid type code: 04
知道什么可能导致这些错误吗?