【问题标题】:Spring GWT integrationSpring GWT 集成
【发布时间】:2013-02-10 19:49:08
【问题描述】:

我正在使用 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>

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:服务方法“公共抽象 java.util.Collection com.santander.bam.comun.userconsole.client.GestionUserService.dameTablaUsuarios(java.lang.String)”在 com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse( RPC.java:581) 在 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.h andle(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) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) org.mortbay.jetty.Server。 org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) org.mortbay.jetty 的 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 的句柄(Server.java:324) .HttpParser.parseNext(HttpParser.java:647) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 在 org.mortbay.jetty.HttpConnection.handle(HttpCo nnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 原因:java.lang .NullPointerException: 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.google.gwt.user.server.rpc.RPC .invokeAndEncodeResponse(RPC.java:562) 在 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.AbstractRemoteServiceServle t.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at 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 ) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) org.mortbay.jetty.webapp.WebAppContext。 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 的句柄(WebAppContext.java:405) org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 的 org.mortbay .jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java:324) 在 org.mortbay.jetty.HttpConnection.handl eRequest(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)

编辑 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:启动日期 [2013 年 2 月 25 日星期一 16:20:02 CET];上下文层次的根 2013-02-25 16:20:02,496 信息 [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - 从 ServletContext 资源 [/WEB-INF/applicationContext.xml] 加载 XML bean 定义 2013-02-25 16:20:02,696 INFO [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'transactionManager' 的 bean 定义:替换 [Generic bean: class [org.springframework.jdbc.datasource.DataSourceTransactionManager ];范围=;摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0;自动接线候选=真;主要=假;工厂BeanName=空;工厂方法名=空;初始化方法名=空;销毁方法名=空;用 [Generic bean: class [org.springframework.jdbc.datasource.DataSourceTransactionManager] 在 ServletContext 资源 [/WEB-INF/config.xml]] 中定义;范围=;摘要=假;懒惰初始化=假;自动线模式=0;依赖检查=0;自动接线候选=真;主要=假;工厂BeanName=空;工厂方法名=空;初始化方法名=空;销毁方法名=空;在 ServletContext 资源 [/WEB-INF/applicationContext.xml]] 中定义 2013-02-25 16:20:02,724 信息 [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 信息 [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:初始化在 466 毫秒内完成 2013-02-25 16:20:10,020 信息 [com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl] - He llegado al IMPL dameTablaUsuarios.================= ======3293

【问题讨论】:

    标签: spring gwt servlets service rpc


    【解决方案1】:

    似乎在方法dameTablaUsuarios(String entidad)

    导致nullpointer exception.utilDB 的行logger.info("UtilDB "+utilDB.toString());null。检查一下。

    【讨论】:

    • 感谢您的快速回复。我添加了该行以确保我的 DAO 为空,如果我删除该行,我仍然会遇到相同的错误,所以我认为我的 utilDB 对象此时为空,但我不明白为什么。
    • 如果可以的话,我会这样做,但我似乎无法让调试模式正常工作,也许我做错了,但我在调试模式下运行应用程序时会出现断点我要进行异步调用,但它似乎没有开始调试,这就是我在控制台上得到的:在地址监听传输 dt_socket:8000,所以它一直在那里等待我做某事,但我没有不知道是什么。
    • 好的,所以我终于设法让它工作了。这是我的解决方案: springGwtRemoteServiceServletuserConsole/springGwtServices/* @RemoteServiceRelativePath("springGwtServices/ GestionUserService") 非常感谢大家花时间帮助我,对缺乏知识深表歉意。这也帮助我找到了答案:code.google.com/p/gwt-uml-designer/source/browse/trunk/…
    • 干杯 :) 非常适合您自己找到解决方案,很抱歉由于时间限制没有进一步推动您。
    猜你喜欢
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2013-02-17
    • 2010-12-09
    • 2013-05-29
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多