JBOSS:EJB如何修复java.lang.reflect.UndeclaredThrowableException?

时间:2012-05-08 19:45:45

标签: java jboss ejb ejb-3.0 ejb-3.1

在bean中我尝试使用此方法列出所有文章

public List<Article> listerLesArticles() {
    javax.persistence.Query req = manager.createQuery("select * from Article");
    return req.getResultList();
}
当我调用方法

时从客户端

public void lister() {
    List<Article> arr = epicerie.listerLesArticles();
    System.out.println(" ");
    Iterator<Article> iterator =  arr.iterator();
    while (iterator.hasNext()) {
        Article unArticle=iterator.next();
        System.out.println(unArticle.getCode());
    }
    System.exit(0);
}

但我得到了Exception

Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
    at $Proxy2.listerLesArticles(Unknown Source)
    at ecpicerie.EpicerieClient.lister(EpicerieClient.java:80)
    at ecpicerie.EpicerieClient.main(EpicerieClient.java:122)
Caused by: java.lang.ClassNotFoundException: org.hibernate.hql.ast.QuerySyntaxException
    at org.jboss.remoting.serialization.ClassLoaderUtility.loadClass(ClassLoaderUtility.java:103)
    at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:86)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:176)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1592)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1963)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1887)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1770)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
    at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObjectVersion2_2(JavaSerializationManager.java:238)
    at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:138)
    at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:123)
    at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.versionedRead(MicroSocketClientInvoker.java:1215)
    at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:845)
    at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:160)
    at org.jboss.remoting.Client.invoke(Client.java:1708)
    at org.jboss.remoting.Client.invoke(Client.java:612)
    at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:60)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    at $Proxy3.invoke(Unknown Source)
    at org.jboss.ejb3.proxy.handler.ProxyInvocationHandlerBase.invoke(ProxyInvocationHandlerBase.java:261)
    at org.jboss.ejb3.proxy.handler.session.SessionSpecProxyInvocationHandlerBase.invoke(SessionSpecProxyInvocationHandlerBase.java:101)
    at $Proxy2.listerLesArticles(Unknown Source)
    at ecpicerie.EpicerieClient.lister(EpicerieClient.java:80)
    at ecpicerie.EpicerieClient.main(EpicerieClient.java:122)
    at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:72)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:65)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    at $Proxy3.invoke(Unknown Source)
    at org.jboss.ejb3.proxy.handler.ProxyInvocationHandlerBase.invoke(ProxyInvocationHandlerBase.java:261)
    at org.jboss.ejb3.proxy.handler.session.SessionSpecProxyInvocationHandlerBase.invoke(SessionSpecProxyInvocationHandlerBase.java:101)
    ... 3 more

在这一行

List<Article> arr=epicerie.listerLesArticles();

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

您有两个基本问题:

  • 您的JPQL查询错误
  • 您的客户端没有所有必需的客户端库

查看查询的其他答案,但意识到通过修复查询,您只解决了一半问题。服务器的文档应该告诉你需要复制哪些库(在JBoss的情况下,它基本上是整个/客户端库)。

答案 1 :(得分:0)

尝试将HQL查询设置为:&#34;来自文章&#34;。这样做的根本原因似乎是您获得了HQL语法异常,但无法将其序列化到客户端应用程序,因为它没有JPA的jar。

编辑:与Achille的评论一样,&#34;从文章e&#34;中选择e;也会有效。