Hi,
Try following approach - works for me. Rather then extends your service
implementation with RemoteServiceServlet make sure your service is context
aware - implement ServletContextAware. So you'll have:
@SuppressWarnings("serial")
public class GreetingServiceImpl implements
GreetingService,ServletContextAware {
private transient ApplicationContext ac;
private ClientBusiness clientBusiness;
private ServletContext servletContext;
public String greetServer(String clientLogin) {
String result = "Hello";
boolean res;
String serverInfo = servletContext.getServerInfo(); <--
injected by spring from your mywebapp-servlet.xml file
>
> return result;
> }
public void setServletContext(ServletContext arg0) {
// TODO Auto-generated method stub
this.servletContext = arg0;
}
> }
>
Thanks,
Marcin
On Tue, Apr 21, 2009 at 6:51 PM, colt54 <[email protected]>wrote:
>
> 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.
>
> >
>
--
Greetings,
Marcin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---