目录
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的时候没有报文头,就是下面这玩意。
<?xml version="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;
@Slf4j
public 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;
}
}