【发布时间】:2016-08-30 11:21:48
【问题描述】:
假设有一个 EJB 方法接受一个实现了某个接口的对象。
MyStatelessBean.method(InterfaceA aObj);
所以服务器实现了 MyStatelessBean 并且 InterfaceA 在其类路径中可用。
现在InterfaceA 的具体类在客户端实现。这些具体类不在服务器的类路径中。
现在,当客户端调用服务器并将具体类的实例传递给 EJB 方法时,
InterfaceA concreteObjA = new InterfaceA() { ... }
bean = context.lookup(ejbLookupStr);
bean.method(concreteObjA);
预期的行为是什么?
我在 WildFly 9.0.2 中的测试导致客户端日志中报告了 ClassNotFoundException(但它似乎报告了服务器端问题)。
线程“主”javax.ejb.EJBException 中的异常: java.lang.ClassNotFoundException: [模块中的 org.ktest.study.javaee.ejb.CallBackClient 服务模块中的“deployment.wildfly-ear.ear.wildfly-ejb.jar:main” 装载机] 在 org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:238) 在 org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183) 在 org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146) 在 com.sun.proxy.$Proxy0.register(Unknown Source) 在 org.ktest.study.javaee.ejb.ClientObject.main(ClientObject.java:21)
【问题讨论】:
-
序列化机制需要对象类反序列化成。如果类路径中没有类,ejb 接收器无法反序列化有效负载,因为它找不到类型,因此 classnotfoundexception
标签: java jakarta-ee ejb wildfly