首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

重写gwt的RemoteServiceServlet,将GWT全部RPC的请求拦截下来交给SPRING来处理

2012-07-18 
重写gwt的RemoteServiceServlet,将GWT所有RPC的请求拦截下来交给SPRING来处理package com.jme.help.gwtim

重写gwt的RemoteServiceServlet,将GWT所有RPC的请求拦截下来交给SPRING来处理

package com.jme.help.gwt;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;import com.google.gwt.user.client.rpc.RemoteService;import com.google.gwt.user.client.rpc.SerializationException;import com.google.gwt.user.server.rpc.RPC;import com.google.gwt.user.server.rpc.RPCRequest;import com.google.gwt.user.server.rpc.RemoteServiceServlet;import com.google.gwt.user.server.rpc.UnexpectedException;import com.jme.exception.HOMSException;/** * 重写gwt的RemoteServiceServlet,将GWT所有RPC的请求拦截下来交给SPRING来处理 * @author zhangguangyu * */public class SpringGwtRemoteServiceServlet extends RemoteServiceServlet {/** *  */private static final long serialVersionUID = 1L;private static final Logger LOG = Logger.getLogger(SpringGwtRemoteServiceServlet.class);public void init() {if (LOG.isDebugEnabled())LOG.debug("Spring GWT service exporter deployed");}public String processCall(String payload) throws SerializationException {try {Object handler = getBean(getThreadLocalRequest());RPCRequest rpcRequest = RPC.decodeRequest(payload,handler.getClass(), this);onAfterRequestDeserialized(rpcRequest);if (LOG.isDebugEnabled()) {LOG.debug("Invoking " + handler.getClass().getName() + "."+ rpcRequest.getMethod().getName());}return RPC.invokeAndEncodeResponse(handler, rpcRequest.getMethod(),rpcRequest.getParameters(),rpcRequest.getSerializationPolicy());}catch(HOMSException e){return RPC.encodeResponseForFailure(null, e);} catch (IncompatibleRemoteServiceException ex) {log("An IncompatibleRemoteServiceException was thrown while processing this call.",ex);return RPC.encodeResponseForFailure(null, ex);}}protected Object getBean(HttpServletRequest request) {String service = getService(request);Object bean = getBean(service);BaseRemoteService base=(BaseRemoteService)bean;base.setThreadLocalRequest(this.getThreadLocalRequest());base.setThreadLocalResponse(this.getThreadLocalResponse());base.setServletContext(this.getServletContext());if (!(bean instanceof RemoteService)) {throw new IllegalArgumentException("Spring bean is not a GWT RemoteService: " + service + " ("+ bean + ")");}if (LOG.isDebugEnabled()) {LOG.debug("Bean for service " + service + " is " + bean);}return bean;}protected String getService(HttpServletRequest request) {String url = request.getRequestURI();String service = url.substring(url.lastIndexOf("/") + 1);if (LOG.isDebugEnabled()) {LOG.debug("Service for URL " + url + " is " + service);}return service;}protected Object getBean(String name) {WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());if (applicationContext == null) {throw new IllegalStateException("No Spring web application context found");}if (!applicationContext.containsBean(name)) {throw new IllegalArgumentException("Spring bean not found: " + name);}return applicationContext.getBean(name);}}
?

?

热点排行