java - ClassNotFoundException 编码(marshal)处理 EJB 参数

标签 java jsf jpa jboss7.x ejb-3.0

我正在制作一个具有分布式架构的项目,但我在将 java.util.Collection 返回给客户端应用程序时遇到问题。

我在托管 Bean 中调用 EJB 以带来持久化实体的集合。

我正在使用 Java7 和 JBoss7.1.1。

ManagedBean 方法:

public Collection<Cliente> getClientes() {

   clientes=new ArrayList<Cliente>();

   try {

   Context ctx = new InitialContext();

   facade = (ClienteFacadeRemote) ctx.lookup(ClienteFacadeBean.NOME_EJB);

   } catch (NamingException e) {

     e.printStackTrace();
   }

   clientes = facade.getCarteira();

   return clientes;

}

EJB 方法:

public Collection<Cliente> getCarteira() {
    carteira = clienteDao.read(Cliente.QUERY_ALL);
    return carteira;
}

clienteDao.read(Cliente.QUERY_ALL) 方法,查找实体并填充集合。然而,回到托管 Bean,我们有堆栈跟踪:

javax.faces.el.EvaluationException: java.lang.RuntimeException: ClassNotFoundException marshaling EJB parameters
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
root cause

java.lang.RuntimeException: ClassNotFoundException marshaling EJB parameters
    org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:229)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:216)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:188)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:179)
    org.jboss.ejb.client.TransactionInterceptor.handleInvocation(TransactionInterceptor.java:43)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
    org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
    org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136)
    org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121)
    org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104)
    $Proxy31.getCarteira(Unknown Source)
    br.tcc.faetec.managedbean.ClienteMB.getTeste(ClienteMB.java:316)
    br.tcc.faetec.managedbean.ClienteMB.teste(ClienteMB.java:410)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)
    org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
root cause

java.lang.ClassNotFoundException: org.hibernate.collection.internal.PersistentBag from [Module "deployment.external./home/marcos/tccmodel.jar:main" from Service Module Loader]
    org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    java.lang.Class.forName0(Native Method)
    java.lang.Class.forName(Class.java:264)
    org.jboss.marshalling.cloner.ClassLoaderClassCloner.clone(ClassLoaderClassCloner.java:46)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:158)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:135)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:187)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:135)
    org.jboss.marshalling.cloner.SerializingCloner.cloneFields(SerializingCloner.java:348)
    org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:309)
    org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:286)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:254)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:135)
    org.jboss.marshalling.cloner.SerializingCloner$StepObjectInput.doReadObject(SerializingCloner.java:738)
    org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:37)
    org.jboss.marshalling.MarshallerObjectInputStream.readObjectOverride(MarshallerObjectInputStream.java:57)
    java.io.ObjectInputStream.readObject(ObjectInputStream.java:363)
    java.util.ArrayList.readObject(ArrayList.java:733)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)
    org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:213)
    org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:302)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:254)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:135)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:225)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:216)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:188)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:179)
    org.jboss.ejb.client.TransactionInterceptor.handleInvocation(TransactionInterceptor.java:43)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
    org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
    org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136)
    org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121)
    org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104)
    $Proxy31.getCarteira(Unknown Source)
    br.tcc.faetec.managedbean.ClienteMB.getTeste(ClienteMB.java:316)
    br.tcc.faetec.managedbean.ClienteMB.teste(ClienteMB.java:410)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)
    org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

最佳答案

将文件 jboss-deployment-structure.xml 放入您的 WEB-INF 文件夹中:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
        <module name="javaee.api" />
        <module name="org.hibernate" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

关于java - ClassNotFoundException 编码(marshal)处理 EJB 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692495/

相关文章:

java - 在 JSP 中使用属性文本占位符是一种好的做法吗?

spring - 在 Spring 中使用多个数据源

java - 以编程方式缩短 URL 字符串

java - 如何在Rxjava中按键合并两个Observable?

java - 应用程序如何几乎完全使设备崩溃?

validation - 将参数传递给 o :validateOrder OmniFaces 2. 0 中的资源文件

java - 我的游戏有问题

java - 您能否在不同的 OSGi 包中包含 JSF 自定义组件?

java - 如果列表发生唯一约束错误,Spring 不会回滚。如何启用整个列表的回滚?

java - 如何在 JPA 中映射自定义集合?