forum.bitel.ru
http://forum.bitel.ru/

xml в String
http://forum.bitel.ru/viewtopic.php?f=19&t=10942
Страница 1 из 1

Автор:  Jimson [ 29 сен 2015, 19:06 ]
Заголовок сообщения:  xml в String

Требуется в коде активатора сервиса преобразовать xml в строку. Погуглил.
Самый распространенный вариант типа такого:
Код:
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;

Transformer docTransformer = TransformerFactory.newInstance().newTransformer();
StreamResult actionSR = new StreamResult(new StringWriter());
DOMSource actionDOM = new DOMSource(action);
docTransformer.transform(actionDOM, actionSR);
String actionData = actionSR.getWriter().toString();


в результате получаем такую беду:
Код:
mq 09-29/14:58:03 ERROR [inet-reload] InetDeviceRuntime - org/apache/xml/serializer/TreeWalker
java.lang.NoClassDefFoundError: org/apache/xml/serializer/TreeWalker
        at org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:823)
        at ru.steccom.bgbilling.modules.inet.dyn.device.nbi.NBIServiceActivator.init(NBIServiceActivator.java:51)
        at ru.bitel.bgbilling.modules.inet.runtime.device.InetDeviceRuntime.reloadScripts(InetDeviceRuntime.java:349)
        at ru.bitel.bgbilling.modules.inet.runtime.device.InetDeviceRuntime.<init>(InetDeviceRuntime.java:232)
        ...


Это javax.xml.transform.* требует апачевый serializer? Это как то связанно с тем что mq работает под java 1.7?
Если тащить дополнительные библиотеки не хочется, то как конвертировать dom document в строку, через DOMImplementationLS или есть еще варианты?

Автор:  Amir [ 29 сен 2015, 20:09 ]
Заголовок сообщения:  Re: xml в String

action - это объект какого класса?

Попробуйте
Код:
import java.io.StringWriter;
import ru.bitel.common.XMLUtils;

StringWriter sw = new StringWriter();
XMLUtils.serialize( doc, sw, "UTF-8" );
log.debug( sw.toString() );

Автор:  Amir [ 29 сен 2015, 20:13 ]
Заголовок сообщения:  Re: xml в String

А, скорее всего будет тоже самое. Похоже т.к. там есть библиотека xalan - она прописывает себя обработчиком xml, но этой библиотеке для сериализации не хватает еще одной jar.
Попробуйте скопировать serializer.jar из BGBillingServer/lib/ext в InetAccess/lib/ext и перезапустить InetAccess.

Автор:  Jimson [ 29 сен 2015, 23:05 ]
Заголовок сообщения:  Re: xml в String

action это org.w3c.dom.Element

Переписал конвертацию через DOMImplementationLS, ругаться при загрузке класса (?) перестало, но вылезли проблемы в другом месте: SOAPMessage.saveChanges() дает исключение "не возможно сохранить multipart message" и потом примерно такое же исключение про org.apache.xml.serializer.TreeWalker. Я так понимаю в недрах SOAP* тааже TransformerFactory используется.

Положил serializer.jar (скопировал из client.lib/) и все заработало, теперь думаю возвращать обратно конвертацию через TransformerFactory или оставить DOMImplementationLS ;)

P.S. интересно, конечно, узнать почему код из стандартных библиотек jdk вдруг требует апачевую библиотеку, если это последствия xalan, то может добавите тогда этот serializer.jar в Access?

up. Переехал на jdk 1.8.0.60 и mq 5.12, mq тоже на java 1.8 запустил, пока проблем не видно.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/