From ece32c7dda6dd70539aae9d562ca61eaf7ecb32a Mon Sep 17 00:00:00 2001 From: mrz <17966059@qq.com> Date: Thu, 23 Sep 2021 16:06:20 +0800 Subject: [PATCH] 发送报文时采用报文中的messageid生成报文名称, 将回执发到队列时,进行xml格式的判定 --- src/main/java/com/tianbo/analysis/handle/SendXml2MqThread.java | 65 ++++++++++++++++++++++++++++++++++++++++++++--------------------- src/main/java/com/tianbo/analysis/rabbitmq/GetResponse.java | 15 ++++++++------- src/main/java/com/tianbo/analysis/task/CustomMqGetTask.java | 2 +- src/main/java/com/tianbo/analysis/task/TCSMqGetTask.java | 2 +- src/main/java/com/tianbo/analysis/task/TCSMqSendTask.java | 2 +- 5 files changed, 55 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/tianbo/analysis/handle/SendXml2MqThread.java b/src/main/java/com/tianbo/analysis/handle/SendXml2MqThread.java index 9993495..1a3cb84 100644 --- a/src/main/java/com/tianbo/analysis/handle/SendXml2MqThread.java +++ b/src/main/java/com/tianbo/analysis/handle/SendXml2MqThread.java @@ -17,13 +17,13 @@ import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.xml.sax.InputSource; import org.xml.sax.SAXParseException; import javax.annotation.PostConstruct; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.UnsupportedEncodingException; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.*; import java.util.concurrent.CountDownLatch; /** @@ -99,25 +99,48 @@ public class SendXml2MqThread implements Runnable{ int i = 0; String content = FileUtils.readFileToString(xmlfile,"UTF-8"); - /** - * 发送消息到交换上 - */ - boolean success = ExSendMsg.sendMsg( - exchangeName, - exchangeType, - routingName, - queueName, - content, - mqIp, - mqPort, - mqVhost, - mqUsername, - mqPassword - ); - - return success ? 1 : 0; + //校验报文格式是否是XML + if (isXmlDocument(content)){ + /** + * 发送消息到交换上 + */ + boolean success = ExSendMsg.sendMsg( + exchangeName, + exchangeType, + routingName, + queueName, + content, + mqIp, + mqPort, + mqVhost, + mqUsername, + mqPassword + ); + + return success ? 1 : 0; + }else { + log.info("[{}]报文格式未通过XML校验,报文删除",content); + return 1; + } } + /** + * 校验字符窜是否是XML格式 + * @param rtnMsg + * @return + */ + private static boolean isXmlDocument(String rtnMsg){ + + boolean flag = true; + try { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); + builder.parse( new InputSource( new StringReader( rtnMsg ))); + } catch (Exception e) { + flag = false; + } + return flag; + } } diff --git a/src/main/java/com/tianbo/analysis/rabbitmq/GetResponse.java b/src/main/java/com/tianbo/analysis/rabbitmq/GetResponse.java index 17e7173..060d3a6 100644 --- a/src/main/java/com/tianbo/analysis/rabbitmq/GetResponse.java +++ b/src/main/java/com/tianbo/analysis/rabbitmq/GetResponse.java @@ -62,8 +62,8 @@ public class GetResponse extends DefaultConsumer { this.mqResponse = new MqResponse(consumerTag,envelope,properties,new String(body, StandardCharsets.UTF_8)); log.info("-----------获取到报文----------\n{}",mqResponse.getContent()); - handleMessage(mqResponse.getContent()); -// writeToReadDir(mqResponse.getContent()); +// handleMessage(mqResponse.getContent()); + writeToReadDir(mqResponse.getContent()); //写入回执目录 } @@ -71,19 +71,20 @@ public class GetResponse extends DefaultConsumer { public void writeToReadDir(String content)throws IOException{ if(content !=null && !content.isEmpty()){ //todo:下边过去xml文件报头代码在TCS服务器上部署的时候最好去掉.这段过滤代码是为了能转发到IMF - content = content.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>",""); +// content = content.replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>",""); //查找报文中的messageid作为文件名 String pattern = "<MessageID>(\\w+)</MessageID>"; Pattern r = Pattern.compile(pattern); Matcher matcher = r.matcher(content); String fileName = this.receptDir + UUID.randomUUID().toString()+".xml"; // 新舱单部署要去掉下面更改名称代码 -// if (matcher.find()){ -// fileName = this.receptDir+ matcher.group(1)+".xml"; -// } - log.info("-----------{}报文保存成功----------",fileName); + if (matcher.find()){ + fileName = this.receptDir+ matcher.group(1)+".xml"; + } + File fileToDirectory = new File(fileName); FileUtils.writeStringToFile(fileToDirectory,content,"UTF-8"); + log.info("-----------{}报文保存成功----------",fileName); } } diff --git a/src/main/java/com/tianbo/analysis/task/CustomMqGetTask.java b/src/main/java/com/tianbo/analysis/task/CustomMqGetTask.java index 02ec7c1..c904cd2 100644 --- a/src/main/java/com/tianbo/analysis/task/CustomMqGetTask.java +++ b/src/main/java/com/tianbo/analysis/task/CustomMqGetTask.java @@ -50,7 +50,7 @@ public class CustomMqGetTask { @Value("${mq.exchange.routing-key}") private String routingKey; - @Scheduled(fixedRate = 5000) +// @Scheduled(fixedRate = 5000) public void startTask(){ try { diff --git a/src/main/java/com/tianbo/analysis/task/TCSMqGetTask.java b/src/main/java/com/tianbo/analysis/task/TCSMqGetTask.java index 5dcf73c..49d4d72 100644 --- a/src/main/java/com/tianbo/analysis/task/TCSMqGetTask.java +++ b/src/main/java/com/tianbo/analysis/task/TCSMqGetTask.java @@ -40,7 +40,7 @@ public class TCSMqGetTask { @Value("${mq.queue.read-from-mq}") private String queueName; -// @Scheduled(fixedRate = 5000) + @Scheduled(fixedRate = 5000) public void startTask(){ diff --git a/src/main/java/com/tianbo/analysis/task/TCSMqSendTask.java b/src/main/java/com/tianbo/analysis/task/TCSMqSendTask.java index a1eeaaf..f35509a 100644 --- a/src/main/java/com/tianbo/analysis/task/TCSMqSendTask.java +++ b/src/main/java/com/tianbo/analysis/task/TCSMqSendTask.java @@ -57,7 +57,7 @@ public class TCSMqSendTask { */ private final static int theadamount = 10; -// @Scheduled(fixedRate = 5000) + @Scheduled(fixedRate = 5000) public void startTask(){ final SimpleDateFormat sdf = new SimpleDateFormat( -- libgit2 0.24.0