cn.zkdcloud.core.MessageComponent Maven / Gradle / Ivy
package cn.zkdcloud.core;
import cn.zkdcloud.annotation.MessageProcess;
import cn.zkdcloud.component.message.AbstractAcceptMessage;
import cn.zkdcloud.component.message.AbstractResponseMessage;
import cn.zkdcloud.util.FileUtil;
import cn.zkdcloud.util.StreamUtil;
import org.apache.log4j.Logger;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 消息组件
*/
public class MessageComponent implements Component {
private static Logger logger = Logger.getLogger(MessageComponent.class);
/**
* message实例
*/
public static MessageComponent messageComponent;
/**
* message适配方法
*/
private Map adapterMap = new HashMap();
@Override
public void init() {
try {
List classes = FileUtil.getClassByAnnotion(MessageProcess.class.getName());
init(classes);
logger.info("message component init finish");
} catch (Exception e) {
logger.error("message component init fail!");
e.printStackTrace();
}
}
private MessageComponent() {
}
/**
* init classes
*
* @param classes classes include(@MessageProcess)
*/
public void init(List classes) {
for (Class clazz : classes) {
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
Class[] paraClazzs = method.getParameterTypes();
if (paraClazzs != null && 1 == paraClazzs.length) {
if (AbstractAcceptMessage.class.isAssignableFrom(paraClazzs[0])) {//is parent from AbstractAcceptMessage
adapterMap.put(method, clazz); // add access method
}
}
}
}
}
/**
* 适配方法
*
* @param acceptMessage acceptMessage
* @return response ret
*/
public String doAdapter(AbstractAcceptMessage acceptMessage) {
Class exceptClass = acceptMessage.getClass();
AbstractResponseMessage ret = null;
for (Map.Entry entry : adapterMap.entrySet()) {
Method tar = entry.getKey();
try {
if (exceptClass == tar.getParameterTypes()[0]) {
ret = (AbstractResponseMessage) tar.invoke(entry.getValue().newInstance(), acceptMessage);
ret.setFromUserName(acceptMessage.getToUserName());// addFromUsername
ret.setToUserName(acceptMessage.getFromUserName());// addToUsername
if (ret == null) {
return "success";
}
return StreamUtil.ObjToXml(ret);
}
} catch (Exception e) {
continue;
}
}
logger.info("no fit method for this request, please check it");
return "success";
}
/**
* 适配方法
*
* @param request httpServletRequest
* @return response ret
*/
public String doAdapter(HttpServletRequest request) {
AbstractAcceptMessage acceptMessage;
try {
acceptMessage = AbstractAcceptMessage.prepareMessage(request);
} catch (Exception e) {
logger.error(e.getMessage() + "---初始化消息失败");
return "success";
}
return doAdapter(acceptMessage);
}
/**
* getInstance 获取实例
*
* @return 唯一实例
*/
public static MessageComponent getInstance() {
if (null == messageComponent) {
messageComponent = new MessageComponent();
}
return messageComponent;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy