package com.gzzn.omms.msgexchangeapi.msghandler; import java.lang.reflect.Method; import java.util.Arrays; 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.CminmsgWapper; import com.gzzn.omms.msgexchangeapi.entity.msg.MSG; import com.gzzn.omms.msgexchangeapi.service.ICminmsgService; import com.gzzn.omms.msgexchangeapi.service.exchange.IExchangeService; @Service("msgHandlerDispatcher") public class MsgHandlerDispatcher { private Logger logger = LoggerFactory.getLogger(MsgHandlerDispatcher.class); @Autowired IExchangeService exchangeService; @Autowired ICminmsgService cminmsgService; public HandlerResult dispatch(Cminmsg cminmsg) { try { // MSG msg = exchangeService.xmlToMsg(cminmsg.getCminmsgsClobMsg()); CminmsgWapper cminmsgWapper = new CminmsgWapper(cminmsg); cminmsgWapper.setMsg(msg); 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", CminmsgWapper.class); HandlerResult result = (HandlerResult) runMethod.invoke(classObject, cminmsgWapper); return result; } catch (Exception e) { //throw new RuntimeException(e); try { cminmsgService.updateBatchProcessed(Arrays.asList(cminmsg));//更新为已处理 logger.error("消息处理失败msg:{},err:{}",cminmsg.getCminmsgsClobMsg(),e.getMessage()); } catch (Exception e1) { logger.error("消err:{}",e1.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 }