目录
1.错误信息
2.错误原因
3.bug复现
4.解决方案
1.错误信息
org.dom4j.DocumentException: Error on line 1 of document : 前言中不允许有内容。 Nested exception: 前言中不允许有内容。
或
org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog. at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.dom4j.DocumentHelper.parseText(DocumentHelper.java:278)
2.错误原因
string转document的时候没有报文头,就是下面这玩意。
<?xmlversion="1.0"encoding="UTF-8"?>
3.bug复现
有一个对象需要转成document格式,我就这样直接转了,但这样直接转没有报文头,然后就有了上面的报错信息。
String xml = JSONUtil.toJsonStr(Object)Document document =DocumentHelper.parseText(xml);
4.解决方案
网上找了一个工具类,这个工具类可以将object转成string并加上请求头,然后就解决了。
String xml = Java2XmlUtil.javaBeanToXml(object);Document document =DocumentHelper.parseText(xml);
Java2XmlUtil
import com.fasterxml.jackson.dataformat.xml.XmlMapper;import lombok.extern.slf4j.Slf4j;import java.util.Objects;@Slf4jpublic class Java2XmlUtil {//XML文件头private static final String XML_HEAD = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";public static String javaBeanToXml(Object obj) {String xml = "";if (Objects.isNull(obj)) {return xml;}try {XmlMapper xmlMapper = new XmlMapper();xml = xmlMapper.writeValueAsString(obj);} catch (Exception e) {log.error("javaBeanToXml error, obj={}, xml={}", obj, xml, e);return "";}// 添加xml文件头return XML_HEAD + xml;}}