Xml-трансформатор выдает ошибку при попытке преобразовать StaxSource в StreamResult

#xml #wildfly #stax

Вопрос:

Попытка преобразовать Staxsource в StreamResult выдает ошибку (при запуске Wildfly 24 с использованием Adoptopenjdk 11-hotspot)

Но тот же код, выполненный из модульного теста, проходит без ошибок и правильно выполняет работу (с использованием Adoptopenjdk 11-hotspot).

Здесь я получаю ошибку :

 14:50:15,455 ERROR [com.x.x.x.x.x.DeliveryParser] (default task-1) javax.xml.transform.TransformerException: Source object passed to ''{0}'' has no contents.
ERROR:  'Source object passed to ''{0}'' has no contents.'
 

Вот исходный код :

 private static String readElementString(final XMLStreamReader streamReader)  {
    try {
        StringWriter stringWriter = new StringWriter();

        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, StandardCharsets.UTF_8.toString());

        StAXSource stAXSource = new StAXSource(streamReader);
        StreamResult streamResult = new StreamResult(stringWriter);

        transformer.transform(stAXSource, streamResult);  <-- error is thrown here

        return stringWriter.toString();
        ...
 

Не могу найти ничего, что я мог бы использовать в сети.

У кого-нибудь есть подсказка для меня ?

Тх — Фабьен

Ответ №1:

Вот решение, которое я нашел :

При модульном тестировании «Фабрика преобразований» выдает мне экземпляр «com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl», которые исходят из JDK.

На Wildlfy фабрика выдает мне экземпляр «org.apache.xalan.xsltc.trax.ТрансформерИмпл».

Это последнее вызывает у меня ошибку, когда я пытаюсь преобразовать StaxSource. Я не знаю, почему.

Итак, теперь я использую этот код ниже, чтобы создать экземпляр TransformerFactory из JDK :

 TransformerFactory.newDefaultInstance();
 

на месте

 TransformerFactory.newInstance();