Мне нужно установить XmlEncoding (UTF-8) в объект Dom Document без использования Transformer с его методом setOutputProperty (OutputKeys.ENCODING, "UTF-8").Установить XmlEncoding для документа Dom в Java
Я не хочу получать XML-строку, используя объект Transform, потому что я использую библиотеку Xades XMLSignature, которая использует объект Document для подписывания.
Проблема заключается в том, что для документа Dom, созданного следующим образом, его метод getXmlEncoding() возвращает значение null.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
document.getXmlEncoding(); //Returns null
Но после того, как применить следующий код, то XmlEncoding methoth нового документа DOM возвращает UTF-8 (requeriment для моей библиотеки XAdES). Это потому, что процесс преобразования каким-то образом добавил кодировку. По соображениям производительности я хочу избежать выполнения этого кода.
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
DOMSource source = new DOMSource(document);
Writer writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
String xml = writer.toString();
InputStream stream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document newDocument = dbf.newDocumentBuilder().parse(inputStream);
newDocument.getXmlEncoding(); //returns "UTF-8"
Как я могу создать документ Dom с информацией о прологе?