我正在使用 GWT 和 Spring 集成为控制台编写代码。我已经按照 GWT 教程阅读了一些关于如何使用 spring qith GWT 的论坛。
我现在 RPC 调用返回 null,我似乎不明白为什么。由于英语不是我的母语,而且我对此很陌生,所以我只是将我的代码放在这里,看看是否有人可以帮助我。
服务:
@RemoteServiceRelativePath("GestionUserService")
public interface GestionUserService extends RemoteService {
Collection<Usuario> dameTablaUsuarios(String entidad);
}
异步:
public interface GestionUserServiceAsync {
void dameTablaUsuarios(String entidad,AsyncCallback<Collection<Usuario>> callback);
}
实施:
@SuppressWarnings("serial")
@Service("GestionUserService")
public class GestionUsersConsultImpl extends RemoteServiceServlet implements GestionUserService {
@Autowired
UserConsoleDBUtil utilDB;
Logger logger = Logger.getLogger(GestionUsersConsultImpl.class);
@SuppressWarnings("unchecked")
public Collection<Usuario> dameTablaUsuarios(String entidad) {
GWT.log("Log");
logger.info("He llegado al IMPL dameTablaUsuarios.======================="+entidad);
logger.info("UtilDB "+utilDB.toString());
return utilDB.getDao().getUsuarios(entidad);
}
}
*gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='userConsole'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />
<!-- Compilar solamente para Firefox -->
<!--<set-property name="user.agent" value="gecko1_8"></set-property> -->
<inherits name='com.google.gwt.user.theme.standard.Standard' />
<inherits name="com.google.gwt.i18n.I18N" />
<!-- Specify the app entry point class. -->
<entry-point class='com.santander.bam.comun.userconsole.client.GestionUsers' />
<!-- English language, independent of country -->
<extend-property name="locale" values="es_ES" />
<extend-property name="locale" values="en_US" />
<extend-property name="locale" values="de_DE" />
<!-- Specify the application specific style sheet. -->
<stylesheet src='UserConsole.css' />
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='client/services' />
<source path='db/bean' />
</module>
应用程序上下文.xml:
<beans>
<!-- Activates scanning of @Autowired -->
<context:annotation-config />
<context:component-scan base-package="com.santander.bam.comun.userconsole" />
<!-- FIN Agregado de la consola gwt-spring -->
<import resource="config.xml" />
<util:constant id="VARCHAR" static-field="java.sql.Types.VARCHAR" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>
<bean id="GestionUserService" class="com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl"></bean>
<bean id="utilDB" class="com.santander.bam.comun.userconsole.db.UserConsoleDBUtil">
<property name="dao" ref="UserConsoleDAO" />
<property name="transactionManager" ref="transactionManager"/>
</bean>
</beans>
配置文件
<beans >
<bean id="UserConsoleDAO" class="com.santander.bam.comun.userconsole.db.UserConsoleDAO">
<property name="dataSource" ref="myDataSource" />
<!-- Definicion de consultas -->
<property name="sqlUsuarios"
value=" SELECT DISTINCT (IDUSER) IDUser,
NOMBRE Nombre,
IDPerfil IDPerfil,
FECHAALTA FechaAlta,
FECHABAM FechaBAM,
FECHACON FechaConsola
FROM
A_APAMA.USERS
WHERE
EMPRESA=?" />
<property name="sqlUsuarios2"
value=" SELECT DISTINCT (IDUSER) IDUser
FROM
A_APAMA.USERS
WHERE
EMPRESA=?" />
</bean>
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" />
<property name="url"
value="jdbc:db2://udisapma.isban.dev.corp:60090/udisapma" />
<property name="username" value="a_apama" />
<property name="password" value="********" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource" />
</bean>
</beans>
最后是我的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- Loads and makes available the context defined in springconfig-service.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springGwtRemoteServiceServlet</servlet-name>
<servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>gestionUsersConsultImpl</servlet-name>
<servlet-class>com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springGwtRemoteServiceServlet</servlet-name>
<url-pattern>/springGwtServices/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>gestionUsersConsultImpl</servlet-name>
<url-pattern>/userConsole/GestionUserService</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>GestionUsers.html</welcome-file>
</welcome-file-list>
<!-- Paginas de error -->
<error-page>
<error-code>401</error-code>
<location>/accessDeny.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/serverError.html</location>
</error-page>
</web-app>
在我的主要课程中,我有这个:
AsyncCallback<Collection<Usuario>> getUserID2 = new AsyncCallback<Collection<Usuario>>() {
// Failure: muestra error
public void onFailure(Throwable caught) {
whatever;
}
// Succes: obtener usuario
public void onSuccess(Collection<Usuario> Users) {
Whatever;
}
};
gestionUservc.dameTablaUsuarios("3293", getUserID2);
编辑:如果它在这里有用的是错误:
com.google.gwt.user.server.rpc.UnexpectedException:服务方法 'public abstract java.util.Collection com.santander.bam.comun.userconsole.client.GestionUserService.dameTablaUsuarios(java.lang.String)' 引发了意外异常:com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java) com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:378) 的 java.lang.NullPointerException :581) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:207) 在com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet。org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 服务(HttpServlet.java:717) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) org.mortbay .jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java :729) org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) org.mortbay.jetty.handler。 RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay .jetty.HttpConnection。handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty .HttpParser.parseAvailable(HttpParser.java:211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org. mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 引起:java.lang.NullPointerException: null at com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl.dameTablaUsuarios(GestionUsersConsultImpl.java:31) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 处 sun.reflect.nativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 处的 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)。com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562) 的 java.lang.reflect.Method.invoke(Method.java:597) 的 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:207) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:243) 在 com.google .gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java :717) org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) org.mortbay.jetty.security。SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org .mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler .java:49) 在 org.mortbay.jetty.HttpConnection 的 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 的 org.mortbay.jetty.Server.handle(Server.java:324)。 handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty .HttpParser。org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 上 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 上的 parseAvailable(HttpParser.java:211) org.mortbay.thread .QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
编辑 2:这里我的日志是这样说的:
2013-02-25 16:20:02,424 信息 [org.springframework.web.context.ContextLoader] - 根 WebApplicationContext:初始化开始于 2013-02-25 16:20:02,453 信息 [org.springframework.web.context.support。 XmlWebApplicationContext] - 刷新根 WebApplicationContext:启动日期 [Mon Feb 25 16:20:02 CET 2013];上下文层次结构的根 2013-02-25 16:20:02,496 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - 从 ServletContext 资源加载 XML bean 定义 [/WEB-INF/applicationContext.xml] 2013-02- 25 16:20:02,696 信息 [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - 从 ServletContext 资源 [/WEB-INF/config.xml] 加载 XML bean 定义 2013-02-25 16:20:02,724 信息 [ org.springframework.beans.factory.support.DefaultListableBeanFactory] - 覆盖 bean 的 bean 定义' transactionManager':替换[通用bean:类[org.springframework.jdbc.datasource.DataSourceTransactionManager];范围=; 摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0;自动接线候选=真;主要=假;工厂BeanName=空;工厂方法名=空;初始化方法名=空;销毁方法名=空;在 ServletContext 资源 [/WEB-INF/config.xml]] 中使用 [Generic bean: class [org.springframework.jdbc.datasource.DataSourceTransactionManager] 定义;范围=; 摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0;自动接线候选=真;主要=假;工厂BeanName=空;工厂方法名=空;初始化方法名=空;销毁方法名=空;在 ServletContext 资源 [/WEB-INF/applicationContext.xml]] 2013-02-25 16:20:02,724 INFO [org.springframework.beans.factory.support. DefaultListableBeanFactory] - 覆盖 bean 'GestionUserService' 的 bean 定义:替换 [Generic bean: class [com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl]; 范围=单例;摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0;自动接线候选=真;主要=假;工厂BeanName=空;工厂方法名=空;初始化方法名=空;销毁方法名=空;在文件 [D:\Workspace\USER_CONSOLE\target\UserConsole\WEB-INF\classes\com\santander\bam\comun\userconsole\server\GestionUsersConsultImpl.class]] 中使用 [Generic bean: class [com.santander.bam] 定义.comun.userconsole.server.GestionUsersConsultImpl]; 范围=; 摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0;自动接线候选=真;主要=假;工厂BeanName=空;工厂方法名=空;初始化方法名=空;销毁方法名=空;在 ServletContext 资源 [/WEB-INF/applicationContext.xml]] 中定义 2013-02-25 16:20:02,803 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - 在 org.springframework.beans 中预实例化单例.factory.support.DefaultListableBeanFactory@3f96ee:定义bean [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation。 internalCommonAnnotationProcessor,GestionUserService,UserConsoleDAO,myDataSource,transactionManager,VARCHAR,utilDB]; 工厂层次结构的根 2013-02-25 16:20:02,890 信息 [org.springframework.web.context.ContextLoader] - 根 WebApplicationContext: