2013-02-25 5 views
1

Я пишу код консоли, используя интеграцию GWT и Spring. Я последовал за GWT-учебником и прочитал некоторые форумы о том, как использовать Spring Qith GWT.Spring GWT integration

Я нахожусь в точке, где вызов 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:

@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); 

Edit: В случае его полезным здесь ошибка:

com.google.gwt.user.server.rpc.UnexpectedException: Сервисный метод «общественный абстрактный java.util.Collection com.santander.bam.comun. userconsole.client.GestionUserService.dameTablaUsuarios (java.lang.String) 'выкинул неожиданное исключение: java.lang.NullPointerException в com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure (RPC.java:378) at 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.h ttp.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) в 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.handle (Server.java:324) на org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:505) на org.mortbay.jetty.HttpConnection $ RequestHandler.content (HttpConne ction.java:843) на org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:647) на 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 на com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl.dameTablaUsuarios (GestionUsersConsultImpl.java:31) на sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl .java: 39) at 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.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) в 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.handle (Server.java:324) в org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:505) в org.mortbay.jetty. HttpConnection $ RequestHandler.content (HttpConnection.java:843) в org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:647) в org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:211) в org.mortb ay.jetty.HttpConnection.handle (HttpConnection.java:380) в org.mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:395) в org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java: 488)

Edit 2: А вот то, что мой журнал говорит:

2013-02-25 16: 20: 02424 INFO [org.springframework.web.context.ContextLoader] - Root WebApplicationContext: инициализация началась 2013-02-25 16: 20: 02,453 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Обновление корневого WebApplicationContext: дата запуска [Mon Feb 25 16:20:02 CET 2013]; root из контекстной иерархии 2013-02-25 16: 20: 02,496 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Загрузка определений компонентов XML из ресурса ServletContext [/WEB-INF/applicationContext.xml] 2013- 02-25 16: 20: 02,696 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Загрузка определений компонентов XML из ресурса ServletContext [/WEB-INF/config.xml] 2013-02-25 16:20: 02,724 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - переопределение определения bean-компонента для bean-транзакцииManager: замена [Generic bean: class [org.springframework.jdbc.datasource.DataSourceTransactionManager]; Объем =; абстрактные = ложь; lazyInit = ложь; autowireMode = 0; dependencyCheck = 0; autowireCandidate = TRUE; первичные = ложь; factoryBeanName = NULL; factoryMethodName = NULL; initMethodName = NULL; destroyMethodName = NULL; определенный в ресурсе ServletContext [/WEB-INF/config.xml]] с помощью [Generic bean: class [org.springframework.jdbc.datasource.DataSourceTransactionManager]; Объем =; абстрактные = ложь; lazyInit = ложь; autowireMode = 0; dependencyCheck = 0; autowireCandidate = TRUE; первичные = ложь; factoryBeanName = NULL; factoryMethodName = NULL; initMethodName = NULL; destroyMethodName = NULL; определенный в ресурсе ServletContext [/WEB-INF/applicationContext.xml]] 2013-02-25 16: 20: 02,724 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - переопределение определения bean-компонента для bean-компонента GestionUserService: заменяя [Generic bean: class [com.santander.bam.comun.userconsole.server.GestionUsersConsultImpl]; Объем = одноэлементный; абстрактные = ложь; lazyInit = ложь; autowireMode = 0; dependencyCheck = 0; autowireCandidate = TRUE; первичные = ложь; factoryBeanName = NULL; factoryMethodName = NULL; initMethodName = NULL; destroyMethodName = NULL; определен в файле [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]; Объем =; абстрактные = ложь; lazyInit = ложь; autowireMode = 0; dependencyCheck = 0; autowireCandidate = TRUE; первичные = ложь; factoryBeanName = NULL; factoryMethodName = NULL; initMethodName = NULL; destroyMethodName = NULL; определенный в ресурсе ServletContext [/WEB-INF/applicationContext.xml]] 2013-02-25 16: 20: 02,803 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Предварительные экземпляры синглетов в org.springframework. [email protected]: определение beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation .internalCommonAnnotationProcessor, GestionUserService, UserConsoleDAO, myDataSource, TransactionManager, УАКСНАК, utilDB]; корень из заводской иерархии 2013-02-25 16: 20: 02,890 INFO [org.springframework.web.context.ContextLoader] - Корневой WebApplicationContext: инициализация завершена в 466 мс 2013-02-25 16: 20: 10,020 INFO [com .santander.bam.comun.userconsole.server.GestionUsersConsultImpl] - Он llegado al IMPL dameTablaUsuarios. ======================= 3293

ответ

0

Кажется, в способе dameTablaUsuarios(String entidad)

Линия logger.info("UtilDB "+utilDB.toString());, вызывающая nullpointer exception. utilDB - null. Проверьте.

+0

Спасибо за быстрый ответ. Я добавил эту строку, чтобы убедиться, что мой DAO был нулевым, если я выйду из этой строки, я все равно получаю ту же ошибку, поэтому я думаю, что мой объект utilDB имеет значение null в этот момент, но я не понимаю, почему. – Borja

+0

Можете ли вы поставить точку останова и посмотреть, что там происходит? –

+0

Я бы сделал это, если мог, но я не могу заставить работать режим отладки, возможно, я что-то делаю, но я запускаю приложение в режиме отладки с точкой останова, когда я собираюсь сделать асинхронный вызов, и он, похоже, не запускает отладку, это то, что я получаю на консоли: Прослушивание транспорта dt_socket по адресу: 8000, поэтому он остается там, ожидая, когда я что-то сделаю, но я не знаю, что. – Borja

Смежные вопросы