packagecom.integration.http;importcom.alibaba.fastjson.JSONObject;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.context.ConfigurableApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.messaging.Message;importorg.springframework.messaging.MessageHandler;importorg.springframework.messaging.MessagingException;importorg.springframework.messaging.support.GenericMessage;importjava.io.UnsupportedEncodingException;importjava.text.SimpleDateFormat;importjava.util.Date;public class ServiceActivator implementsMessageHandler {private final static Log logger = LogFactory.getLog(ServiceActivator.class);private final static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");privateJSONObject formatNotificationMsg(JSONObject payload) {
String subject= payload.getString("subject");
String content= payload.getString("message");long sendTime = Long.parseLong(payload.getString("timestamp"));
JSONObject params= newJSONObject();
params.put("msgtype", "markdown");
JSONObject message= newJSONObject();
message.put("title", subject);
message.put("text", "# 通知-" + subject + " \n**" + content + "** \n*" + SDF.format(new Date(sendTime)) + "*");
params.put("markdown", message);returnparams;
}privateJSONObject formatSubscriptionConfirmationMsg(JSONObject payload) {
String type= payload.getString("type");
String subject;
String content;if ("SubscriptionConfirmation".equals(type)) {
subject= "确认订阅";
content= "确认订阅请点击此处";
}else{
subject= "取消订阅成功";
content= "再次订阅请点击此处";
}
String subscribeUrl= payload.getString("subscribe_url");long sendTime = Long.parseLong(payload.getString("timestamp"));
JSONObject params= newJSONObject();
params.put("msgtype", "markdown");
JSONObject message= newJSONObject();
message.put("title", subject);
message.put("text", "# 通知-" + subject + "\n**[" + content + "](" + subscribeUrl + ")**\n*" + SDF.format(new Date(sendTime)) + "*");
params.put("markdown", message);returnparams;
}
@Overridepublic void handleMessage(Message> message) throwsMessagingException {try{
JSONObject payload= JSONObject.parseObject(new String((byte[]) message.getPayload(), "UTF-8"), JSONObject.class);
logger.info("接收参数:" +payload.toJSONString());
String type= payload.getString("type");if ("Notification".equals(type)) {
payload=formatNotificationMsg(payload);
logger.info("发送参数:" +payload.toJSONString());
Message> toSend = new GenericMessage<>(payload.toJSONString(), message.getHeaders());
activator(toSend);
}else if ("SubscriptionConfirmation".equals(type) || "UnsubscribeConfirmation".equals(type)) {
payload=formatSubscriptionConfirmationMsg(payload);
logger.info("发送参数:" +payload.toJSONString());
Message> toSend = new GenericMessage<>(payload.toJSONString(), message.getHeaders());
activator(toSend);
}else{
logger.info("不支持的消息类型:" +type);
}
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
}private void activator(Message>message) {
ConfigurableApplicationContext context= new ClassPathXmlApplicationContext("http-outbound-config.xml");
RequestGateway requestGateway= context.getBean("requestGateway", RequestGateway.class);
String reply=requestGateway.echo(message);
logger.info("发送回执:" +reply);
context.close();
}
}