传统项目升级jdk1.7,问题汇总(二)报org.jdom.JDOMException

    报org.jdom.JDOMException: The element type "message" must be terminated by the matching 
end-tag "</message>".: Error on line 8: The element type "message" must be terminated by the matching end-tag "</message>".

此问题是表明xml中标签识别不到结束标签。

    查看代码发现程序没有问题,那么怀疑中文乱码,找测试同事要到报文之后,发现message标签中的信息为中文。

OK!编码乱码问题,weblogic可以设置容器的编码格式,原来weblogic默认UTF-8,而项目编码GBK。OK!!

    少数解析还是报错,继续查看问题原因。由于本次项目是做的jdk从1.5升级到1.7,所以可能是jar保版本太低导致,

    读代码发现该问题出现在String转document中,之前采用jdom做转换,


现在将jdom升级为jdom2,由于项目代码巨大,不能全文替换jdom应用,所以我在改功能下用jdom2重写的String转document方法。


提交git,测试,问题解决。好多标签问题都是因为jar包太老导致的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JDK1.7及之前的版本中,使用Process process = Runtime.getRuntime().exec("ls -l");方法执行外部命令时,可能会导致内存泄漏。这是因为JDK1.7及之前版本中的Process实现中,子进程的输出流和错误流的缓存区大小有限,如果子进程的输出或错误信息超出了缓存区的大小,就会导致阻塞,从而可能导致内存泄漏。 为了解决这个问题,你可以使用ProcessBuilder类代替Runtime.exec()方法。ProcessBuilder提供了更好的流控制和错误处理机制,可以避免内存泄漏问题。 以下是使用ProcessBuilder执行外部命令的示例代码: ``` public static void main(String[] args) throws Exception { ProcessBuilder pb = new ProcessBuilder("ls", "-l"); Process process = pb.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } ``` 这个例子与前面的示例代码类似,使用ProcessBuilder构建一个进程,并执行命令"ls -l"。通过ProcessBuilder.start()方法启动进程,并获取进程的输出流进行读取。最后,关闭流并结束程序。 需要注意的是,在使用ProcessBuilder时,你需要手动将子进程的输出流和错误流合并起来,并处理异常和错误信息。同时,为了避免命令注入和其他安全问题,你需要仔细处理命令参数,确保程序的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值