package com.gzzn.omms.msgexchangeapi.msghandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.msg.MSG; import com.gzzn.omms.msgexchangeapi.service.exchange.IExchangeService; @Service("msgHandlerDispatcher") public class MsgHandlerDispatcher { private Logger logger = LoggerFactory.getLogger(MsgHandlerDispatcher.class); @Autowired IExchangeService exchangeService; public HandlerResult dispatch(Cminmsg cminmsg) { try { MSG msg = exchangeService.xmlstrToObject(cminmsg.getCminmsgsClobMsg(), MSG.class); String type = msg.getMETA().getTYPE().name(); String subType = msg.getMETA().getSTYP().name(); Class clazzHandler = Class.forName(getHandlerClassName(type,subType)); Object classObject = clazzHandler.newInstance(); Method runMethod = clazzHandler.getMethod("run", Cminmsg.class); HandlerResult result = (HandlerResult) runMethod.invoke(classObject, cminmsg); return result; } catch (Exception e) { //throw new RuntimeException(e); logger.error("消息处理失败msg:{},err:{}",cminmsg.getCminmsgsClobMsg(),e.getMessage()); return HandlerResult.failure(); } }//end function /** * 获取handler 类的名称 * @param type * @param subType * @return */ private String getHandlerClassName(String type , String subType) { StringBuffer buffer = new StringBuffer(); buffer.append("com.gzzn.omms.msgexchangeapi.msghandler" ); buffer.append("."); buffer.append(type.toLowerCase()); buffer.append("."); buffer.append(subType); buffer.append("Handler"); return buffer.toString(); } //end function }