最近接手老项目,在系统通过接口推送信息时,经常会有部分失败部分推送的情况发生,导致经常需要下游进行数据清理并重新推送。
客户要求保证整体数据的完整性,所以将业务内部逻辑和推送逻辑进行了剥离,但是在分离后发现出现提示编码格式不正确,经确认是系统生成的xml的编码格式为ANSI,但是xml头上定义的编码格式是UTF-8。最后发现是dom4j的XMLWriter的默认编码导致的问题,编写文件使用了系统默认编码格式。
具体代码如下:
使用XMLWriter(Writer writer, OutputFormat format) 的构造函数创建XMLWriter时,虽然可以在OutPutFormat上设置编码格式为UTF-8,但是实际并不会将writer的编码格式设置为对应的编码格式,具体的构造函数如下图
在XMLWriter中有public XMLWriter(OutputStream out, OutputFormat format)throws UnsupportedEncodingException,会使用OutputFormat指定编码格式,具体如下:
调整代码中的构造方法
最后附上XMLWriter的类结构图