Hi,

I am trying to use a GWT service with Spring.
I am using DispatcherServlet from Spring, GWTHandler and my service is
defined as a bean in a mywebapp-servlet.xml file.
I have also beans intialized at startup with ContextLoadListener.
My service works fine except if I try to call getServletContext from
it. In that case I have a NullPointerException. As a consequence I can
not make reference o my other beans from my service.

java.lang.NullPointerException: null
        at
com.google.gwt.user.server.rpc.RPCServletUtils.writeResponseForUnexpectedFailure
(RPCServletUtils.java:248)
        at
com.google.gwt.user.server.rpc.RemoteServiceServlet.doUnexpectedFailure
(RemoteServiceServlet.java:285)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost
(RemoteServiceServlet.java:99)
        at com.mycompany.admin.admintool.server.GWTController.handleRequest
(GWTController.java:35)
        at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle

Details of my web.xml

<servlet>
        <servlet-name>mywebapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</
servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>

        <servlet-mapping>
                <servlet-name>mywebapp</servlet-name>
                <url-pattern>/geofamilyadmingwt/mywebapp.rpc</url-pattern>
        </servlet-mapping>

I have some other beans that are initialized with
ContextLoaderListener :

<listener>
        <listener-
class>org.springframework.web.context.ContextLoaderListener</listener-
class>
  </listener>

  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/main-context.xml /WEB-INF/dao-context.xml /WEB-
INF/business-context.xml /WEB-INF/drivers-context.xml /WEB-INF/map-
context.xml</param-value>
  </context-param>


Code of my GWTController  :


public class GWTController extends RemoteServiceServlet implements
Controller {
  // Instance fields
  private RemoteService remoteService;
  private Class remoteServiceClass;
  private ServletContext servletContext;


  // Public methods
  /**
   * Call GWT's RemoteService doPost() method and return null.
   *
   * @param request The current HTTP request
   * @param response The current HTTP response
   * @return A ModelAndView to render, or null if handled directly
   * @throws Exception In case of errors
   */
  public ModelAndView handleRequest(HttpServletRequest request,
      HttpServletResponse response) throws Exception {
    super.doPost(request, response);
    return null; // response handled by GWT RPC over XmlHttpRequest
  }

  /**
   * Process the RPC request encoded into the payload string and
return a
   * string that encodes either the method return or an exception
thrown by
   * it.
   * @param payload The RPC payload
   */
  public String processCall(String payload) throws
SerializationException {
    try {
      RPCRequest rpcRequest = RPC.decodeRequest(payload,
this.remoteServiceClass);

      // delegate work to the spring injected service
      return RPC.invokeAndEncodeResponse(this.remoteService,
rpcRequest
          .getMethod(), rpcRequest.getParameters());
    } catch (IncompatibleRemoteServiceException e) {
        getServletContext()
        .log(
                "An IncompatibleRemoteServiceException was thrown
while processing this call.",
                e);

      return RPC.encodeResponseForFailure(null, e);
    }
  }

  @Override
  public ServletContext getServletContext() {
      return servletContext;
  }

  public void setServletContext(ServletContext servletContext) {
      this.servletContext = servletContext;
  }


  /**
   * Setter for Spring injection of the GWT RemoteService object.
   *
   * @param RemoteService
   *            The GWT RemoteService implementation that will be
delegated to
   *            by the {...@code GWTController}.
   */
  public void setRemoteService(RemoteService remoteService) {
    this.remoteService = remoteService;
    this.remoteServiceClass = this.remoteService.getClass();
  }
}

Code of my service implementation:

@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet
implements
                GreetingService {

    private transient ApplicationContext ac;
        private ClientBusiness clientBusiness;

        public String greetServer(String clientLogin) {
                String result = "Hello";
                boolean res;
                String serverInfo = this.getServletContext().getServerInfo();   
<--
throws the NullPointerException
                return result;
        }

I tried to override getServletContext method with the code below but
no success.
@Override
    public ServletContext getServletContext() {

        return getThreadLocalRequest().getSession().getServletContext
();

    }

How can I solve this problem ?

Thanks,
C.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to Google-Web-Toolkit@googlegroups.com
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to