Http/Socket发报&返回报文解析

  • 将Map对象拼接成报文,格式可以自定义
public static String convertObjetc2XMl(Map<String, Object> map) {
		StringBuffer sb = new StringBuffer();
		sb.append("<?xml version=\"1.0\" encoding=\"GBK\"?>");
		sb.append("<MAPS>" + "<PUBLIC>");
		sb.append("<TRXCODE>" + map.get("TRXCODE") + "</TRXCODE>");
		sb.append("<APP_CODE>10056</APP_CODE>");
		sb.append("<TRX_ORIGIN>01</TRX_ORIGIN>");
		sb.append("</PUBLIC>");
		sb.append("<PRIVATE>");
		map.remove("TRXCODE");
		//遍历Map对象,将key-value拼到报文中
		for (Map.Entry<String, Object> entry : map.entrySet()) {
			sb.append("<" + entry.getKey() + ">").append(entry.getValue()).append("</" + entry.getKey() + ">");
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		sb.append("</PRIVATE>" + "</MAPS>");
		return sb.toString();
	}
  • 将报文解析为Map对象:
引入jar包:
<dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
</dependency>

//实现方法
public static Map<String, String> convertRoadRespXMLToMap(String respXML) {
		Map<String, String> map = new HashMap<>();
		String xml = dealXML(respXML);
		Document document = null;
		try {
			document = DocumentHelper.parseText(xml);
			Element rootElement = document.getRootElement();
			Iterator iterator = rootElement.elementIterator();
			while (iterator.hasNext()) {
					//这里根据实际返回报文情况,结合实际决定是否需要再次添加遍历根节点的代码
					Element element = (Element) iterator.next();
					map.put(element.getName(), element.getTextTrim());
					System.out.println(element.getName() + ":" + element.getTextTrim());
			}
		} catch (DocumentException e) {
			logger.info("convertRoadRespXMLToMap返回报文转换成Map对象异常:"+e.getMessage());
		}
		return map;
	}
	// 将xml头部信息去掉
	public static String dealXML(String xml) {
		if (xml.lastIndexOf("?") != -1) {
			xml = xml.substring(xml.lastIndexOf("?") + 2);
		}
		return xml;
	}
  • Socket发报方法:
/*
	 * url:请求地址
	 * port:请求端口号
	 * reqXML:请求报文
	 */
	public static String getRespXML(String url,int port,String reqXML) {
		String result = null;
		byte[] res =null;
		Socket socket = null;
		InputStream is = null;;
		OutputStream os = null;
		
		try {
			socket = new Socket(url,port);
			socket.setSoTimeout(10000);
			is  = socket.getInputStream();
			os = socket.getOutputStream();
			os.write(reqXML.getBytes("GBK"));//这里注意编码,是以什么编码类型发送过去
			os.flush();
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			byte[] buffer =new byte[8192];
			int count;
			while((count = is.read(buffer)) != -1) {
				bos.write(buffer,0,count);
			}
			res = bos.toByteArray();
			
		}catch(Exception e) {
			logger.error("socket请求异常...");
		}finally {
			try {
				if(os != null) {
					os.close();
				}
				if(is != null) {
					is.close();
				}
				if(socket != null) {
					socket.close();
				}
			}catch(Exception e) {
				logger.error("输入输出流关闭异常...");
			}
		}
		try {
			result = new String(res,"GBK");
		} catch (UnsupportedEncodingException e) {
			logger.error("字符串编码转化异常...");
		}
		return result;
	}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值