package com.jiuqi.lbsinterface.ws.publish; import java.lang.reflect.Proxy; import com.jiuqi.lbsinterface.bean.UserBean; import com.jiuqi.lbsinterface.exception.LoginException; import com.jiuqi.lbsinterface.manager.IPositionManager; import com.jiuqi.lbsinterface.ws.client.ClientInvocationHandler; /** * 远程端与服务端交互的上下文,负责连接、数据传输等操作 * * @author anjoulee */ public class WSContext { /** * [MMC]webservice的服务相对地址 */ public final static String WS_URI_NJT = "/lbs"; private String serverURL = null; private String serviceURI = null; private String sessionID = null; private UserBean user; /** * 获得MMC当前交互上下文的实例 * * @param serverURL * 服务端的地址 * @return */ public static WSContext getClientContext(String serverURL, String sessionId) throws LoginException { WSContext context = new WSContext(serverURL, WS_URI_NJT); if (null != sessionId) { context.sessionID = sessionId; context.user = context.getManager(IPositionManager.class).getUser( sessionId); } return context; } /** * 获得MMC当前交互上下文的实例 * * @param serverURL * 服务端的地址 * @return */ public static WSContext getClientContext(String serverURL) throws LoginException { WSContext context = new WSContext(serverURL, WS_URI_NJT); context.sessionID = context.getManager(IPositionManager.class).login( "anonymous", "anonymous"); return getClientContext(serverURL, context.sessionID); } /** * 根据对应的接口名获取响应的服务(返回的object为传入接口)</br> * * android端实现时异常处理问题,所有返回异常可能会被UndeclaredThrowableException包装。</br> * 请这样使用</br> } catch (Throwable e) {</br> if(e instanceof * UndeclaredThrowableException){</br> e.getCause();</br> }</br> * e.printStackTrace();</br> }</br> </br> * * @param intf * 服务代理接口 * @return 返回的object为传入接口 */ @SuppressWarnings("unchecked") public <T> T getManager(Class<T> intf) { return (T) Proxy.newProxyInstance(getClass().getClassLoader(), new Class<?>[] { intf }, new ClientInvocationHandler(serverURL, serviceURI, sessionID, intf)); } private WSContext(String serverURL, String serviceURI) { this.serverURL = serverURL; this.serviceURI = serviceURI; } public UserBean getUser() { return user; } public String getSessionID() { return sessionID; } }