Spring GWT集成

Spring GWT集成,spring,gwt,servlets,service,rpc,Spring,Gwt,Servlets,Service,Rpc,我正在使用GWT和Spring集成为控制台编写代码。我学习了GWT教程,并阅读了一些关于如何使用SpringQithGWT的论坛 我的RPC调用正在返回null,我似乎不明白为什么。由于英语不是我的母语,而且我对这方面还很陌生,所以我将把我的代码放在这里,看看是否有人能帮我 服务: @RemoteServiceRelativePath("GestionUserService") public interface GestionUserService extends RemoteService {

我正在使用GWT和Spring集成为控制台编写代码。我学习了GWT教程,并阅读了一些关于如何使用SpringQithGWT的论坛

我的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);

}
Impl:

}

*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>
applicationContext.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>
config.xml

<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:Service方法“public abstract java.util.Collection com.santander.bam.comun.userconsole.client.GestionUserService.dameTablaUsuariosjava.lang.String”在com.google.gwt.user.server.rpc.encodeResponseForFailureRPC.java:378处引发意外异常com.google.gwt.user.server.rpc.rpc.invokeAndEncodeResponseRPC.java:581位于com.google.gwt.user.server.rpc.rpc.com.google.gwt.user.server.rpc.RemoteServiceServlet.processPostRemoteServiceServlet.java:243位于com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPostAbstractRemoteServiceServlet.java:62在javax.servlet.http.HttpServlet.serviceHttpServlet.java:637在javax.servlet.http.HttpServlet.serviceHttpServlet.java:717在org.mortbay.jetty.servlet.ServletHolder.handleServletHolder.java:487在org.mortbay.jetty.servlet.ServletHandler.handleServletHandler.java:362位于org.mortbay.jetty.security.SecurityHandler.handleSecurityHandler.java:216位于org.mortbay.jetty.servlet.SessionHandler.handleSessionHandler.java:181位于org.mortbay.jetty.handler.ContextHandleContextHandler.handleContextHandler.java:729位于java:405位于org.mortbay.jetty.HandlerWrapper.HandlerWrapper.HandlerWrapper.java:152位于org.mortbay.jetty.handler.RequestLogHandler.handleRequestLogHandler.java:49位于org.mortbay.jetty.HandlerWrapper.HandlerWrapper.java:152位于org.mortbay.jetty.Server.handleServer.java:324在org.mortbay.jetty.HttpConnection.handleRequestHttpConnection.java:505在org.mortbay.jetty.HttpConnection$RequestHandler.contentHttpConnection.java:843在org.mortbay.jetty.HttpParser.parsenexttpparser.java:647在org.mortbay.jetty.HttpParser.HttpParser.parseavailablehtpparser.java:211在org.mortbay.jetty.HttpConnection.handleHttpConnection.java:380位于org.mortbay.io.nio.SelectChannelEndPoint.runSelectChannelEndPoint.java:395位于org.mortbay.thread.QueuedThreadPool$PoolThread.runQueuedThreadPool.java:488由以下原因引起:java.lang.NullPointerException:null位于com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl.dametablausuarisgestionUsersConsultImpl.java:31在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法在sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:39在sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:25java:597在com.google.gwt.user.server.rpc.rpc.invokeAndEncodeResponseRPC.java:562在com.google.gwt.user.server.rpc.RemoteServiceServlet.processCallRemoteServiceServlet.java:207在com.google.gwt.user.server.rpc.RemoteServiceServlet.processPostRemoteServiceServlet.java:243在com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPostAbstractRemoteServiceServlet.java:62在javax.servlet.http.HttpServlet.serviceHttpServlet.java:637在javax.servlet.http.HttpServlet.serviceHttpServlet.java:717在org.mortbay.jetty.servlet.ServletHolder.handleServletHolder.java:487在org.mortbay.jetty.servlet.ServletHandler.handleServletHandler.java:362位于org.mortbay.jetty.security.SecurityHandler.handleSecurityHandler.java:216位于org.mortbay.jetty.servlet.SessionHandler.handleSessionHandler.java:181位于org.mortbay.jetty.handler.ContextHandleContextHandler.handleContextHandler.java:729位于java:405位于org.mortbay.jetty.HandlerWrapper.HandlerWrapper.HandlerWrapper.java:152位于org.mortbay.jetty.handler.RequestLogHandler.handleRequestLogHandler.java:49位于org.mortbay.jetty.HandlerWrapper.HandlerWrapper.java:152位于org.mortbay.jetty.Server.handleServer.java:324在org.mortbay.jetty.HttpConnection.handleRequestHttpConnection.java:505在org.mortbay.jetty.HttpConnection$RequestHandler.contentHttpConnection.java:843在org.mortbay.jetty.HttpParser.parsenexttpparser.java:647在org.mortbay.jetty.HttpParser.HttpParser.parseavailablehtpparser.java:211在org.mortbay.jetty.HttpConnection.handleHttpConnection.java:380位于org.mortbay.io.nio.SelectChannelEndPoint.runSelectChannelEndPoint.java:395位于org.mortbay.thread.QueuedThreadPool$Poo lThread.runQueuedThreadPool.java:488

编辑2:下面是我的日志:

2013-02-25 16:20:02424信息[org.springframework.web.context.ContextLoader]-根WebApplicationContext:初始化已开始 2013-02-25 16:20:02453信息[org.springframework.web.context.support.XmlWebApplicationContext]-刷新根WebApplicationContext:启动日期[Mon-Feb 25 16:20:02 CET 2013];上下文层次结构的根 2013-02-25 16:20:02496信息[org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-从ServletContext资源[/WEB-INF/applicationContext.xml]加载xml bean定义 2013-02-25 16:20:02696信息[org.springframework.beans.factory.xml.XmlBeanDefinitionReader]-从ServletContext资源[/WEB-INF/config.xml]加载xml bean定义 2013-02-25 16:20:02724信息[org.springframework.beans.factory.support.DefaultListableBeanFactory]-覆盖bean“transactionManager”的bean定义:替换[Generic bean:class[org.springframework.jdbc.datasource.DataSourceTransactionManager];scope=;abstract=false;lazyInit=false;autowireMode=0;dependencyCheck=0;autowireCandidate=true;primary=false;factoryBeanName=null;factoryMethodName=null;initMethodName=null;在ServletContext资源[/WEB-INF/config.xml]中使用[Generic bean:class]定义[org.springframework.jdbc.datasource.DataSourceTransactionManager];作用域=;抽象=false;lazyInit=false;autowireMode=0;dependencyCheck=0;autowireCandidate=true;primary=false;factoryBeanName=null;factoryMethodName=null;initMethodName=null;destroyMethodName=null;在ServletContext资源[/WEB-INF/applicationContext.xml]中定义 2013-02-25 16:20:02724信息[org.springframework.beans.factory.support.DefaultListableBeanFactory]-覆盖bean“GestionUserService”的bean定义:替换[Generic bean:class[com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl];scope=singleton;abstract=false;lazyInit=false;autowireMode=0;dependencyCheck=0;autowireCandidate=true;primary=false;factoryBeanName=null;factoryMethodName=null;initMethodName=null;在文件中定义[D:\Workspace\USER\u CONSOLE\target\UserConsole\WEB-INF\classes\com\santander\bam\comun\UserConsole\server\GestionUsersConsultImpl.class]]和[Generic bean:class[com.santander.bam.comun.UserConsole.server.GestionUsersConsultImpl];scope=;abstract=false;lazyInit=false;autowireMode=0;dependencyCheck=0;autowireCandidate=true;primary=false;factoryBeanName=null;factoryMethodName=null;initMethodName=null;在ServletContext资源[/WEB-INF/applicationContext.xml]中定义 2013-02-25 16:20:02803信息[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.internalCommonAnnotationProcessor,GestionUserService,UserConsoleDAO,myDataSource,transactionManager,VARCHAR,utilDB];工厂层次结构的根 2013-02-25 16:20:02890信息[org.springframework.web.context.ContextLoader]-根WebApplicationContext:初始化在466毫秒内完成 2013-02-25 16:20:10020信息[com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl]-他在dameTablaUsuarios的方法中似乎使用了dameTablaUsuarios


行logger.infoUtilDB+utilDB.toString;导致nullpointer异常。utilDB为null。请检查。

感谢您的快速回复。我添加该行是为了确保我的DAO为null,如果我删除该行,我仍然会得到相同的错误,因此我认为我的utilDB对象在该点为null,但我不明白原因。如果我可以,但我似乎无法让调试模式工作,也许我正在做一些事情,但我在调试模式下运行应用程序,在我要进行异步调用时有一个断点,但它似乎没有开始调试,这是我在控制台上得到的:监听地址为8000的传输dt_套接字,所以它在那里等待我做一些事情g、 但我不知道是什么。好的,所以我终于设法让它工作起来了。这是我的解决方案:springGwtRemoteServiceServlet用户控制台/springGwtServices/*@RemoteServiceRelativePath springGwtServices/GestionUserService非常感谢大家花时间帮助我,很抱歉缺乏知识。这也帮助我找到了答案:干杯:这对你自己找到解决方案很好,很抱歉由于时间限制没有进一步推动你。
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);