调用SOAP WS时java.lang.reflect.InvocationTargetException的原因是什么?

问题描述:

我只是尝试了解Soap WS。所以我只写了一些简单的类如下。但是当我在GlassFish中部署此应用程序并对其进行测试时,服务器将返回java.lang.reflect.InvocationTargetException。有人可以说出什么问题吗?调用SOAP WS时java.lang.reflect.InvocationTargetException的原因是什么?

@WebService 
public class AuthorWS { 
AuthorService authorService = new AuthorService(); 

@WebMethod 
public Author getAuthorById(int authorId) { 
    return authorService.getAuthorById(authorId); 
} 

@WebMethod 
public ArrayList<Author> getAllAuthors() { 
    return authorService.getAllAuthors(); 
} 
} 

服务类:

public class AuthorService { 
AuthorDAO authorDAO = new AuthorDAO(); 
public Author getAuthorById(int authorId){ 

    return authorDAO.getAuthorById(authorId); 
} 
public ArrayList<Author> getAllAuthors(){ 
    return authorDAO.getAllAuthors(); 
} 
} 

DAO类:

public class AuthorDAO { 

public Author getAuthorById(int authorId){ 
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
    Criteria criteria = sessionFactory.openSession().createCriteria(Author.class); 
    criteria.add(Restrictions.eq("authorId", authorId)); 
    return (Author) criteria.uniqueResult(); 

} 
public ArrayList<Author> getAllAuthors(){ 
    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
    Criteria criteria = sessionFactory.openSession().createCriteria(Author.class); 
    return (ArrayList<Author>) criteria.list(); 
} 

例外:在java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl:

“致.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl .java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:483)at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost( WebServiceTesterServlet.java:313)... 32更多原因:com.sun.xml.ws.fault.ServerSOAPFaultException:客户端从服务器收到SOAP错误:com.sun.enterprise.container.common.spi.util.InjectionException:错误为类创建托管对象:class com.hojat.LibrarySoapWS.ws.AuthorWS请参阅服务器日志以查找有关失败原因的更多详细信息。 com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193)at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:131)at com.sun.xml.ws .client.sei.StubHandler.readResponse(StubHandler.java:253)at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:203)at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse (DatabindingImpl.java:290)at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java :92)at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)at com.sun.proxy。$ Proxy312.getAllAuthors(Unknown Source)'

+0

再往下看堆栈跟踪,原因会在'Causesed'的某处 – artbristol 2015-04-01 15:22:55

+0

我已经添加了堆栈跟踪。但我无法弄清楚。你可以看看它,给我一个提示吗? – Nisman 2015-04-01 15:40:36

+0

堆栈跟踪不可读,请格式化以便每行都可见 – artbristol 2015-04-01 16:10:51

问题是服务器端,如您从堆栈跟踪中看到的那样

: Client received SOAP Fault from server: 
com.sun.enterprise.container.common.spi.util.InjectionException: 
Error creating managed object for class: 
class com.hojat.LibrarySoapWS.ws.AuthorWS 
Please see the server log to find more detail regarding exact cause of the failure. 

因此检查服务器日志。