Ошибка сегментации при преобразовании документа с помощью Xalan

Я использую Xalan-C ++ для выполнения XSLT-преобразования и получаю ошибку сегментации в этом коде:

XalanTransformer evalTransformer;
evalTransformer.setUseValidation(false);
evalTransformer.transform(*(xmlDoc.getDocumentBuilder()), rule_, resultStream);

Ранее я использовал этот код для инициализации XalanDocumentBuilder:

// Create a XalanTransformer.
XalanTransformer        theXalanTransformer;

// Get a document builder from the transformer...
docBuilder_ = theXalanTransformer.createDocumentBuilder();

а затем создать документ XML с docBuilder_, так xmlDoc.getDocumentBuilder() (который просто возвращает docBuilder_) должен вернуть действительный указатель.

Если я присоединяю gdb к запущенному процессу, это первые несколько строк трассировки стека:

#0  0x0a2de894 in ?? ()
#1  0x0514f8d9 in amxalanc_1_6::XalanTransformer::doTransform () from /usr/lib/libamxalanc1_6.so

transform() Метод работал с простым потоком вывода, но когда я изменил 1-й параметр, он теперь не работает. Я использовал объект построителя документов для успешного создания XML-документа. Любые идеи, почему я получаю ошибку сегментации в коде Xalan?

0

Решение

Я готовлюсь к официальному выпуску Xalan-C 1.11.

Можете ли вы опубликовать свою проблему в Apache Jira для XALANC, чтобы эту проблему можно было отследить?

https://issues.apache.org/jira/browse/XALANC

У меня также есть сайт коммитера Apache

http://www.apache.org/~shathaway

Спасибо за размещение в списке рассылки

[email protected]

С уважением,
Стивен Дж. Хэтэуэй
Проект документации Xalan

2

Другие решения

Версия 1.6 Xalan-C старая. Последняя стабильная версия — 1.10.
При обновлении было исправлено множество указателей на ошибки сегмента.
Готовится к выпуску новая версия 1.11
Исправлены указатели.

Если это новый код, вы должны убедиться, что ваши Xerces и Xalan
библиотеки инициализируются перед выполнением любой полезной работы.

http://xalan.apache.org/xalan-c/usagepatterns.html#xalan

С уважением,
Стивен Дж. Хэтэуэй
Проект документации Xalan

1

Проблема в том, что theXalanTransformer инициализируется в другой функции. Он создан по единственной причине создания XML-документа в памяти с использованием docBuilder_, theXalanTransformerдеструктор будет вызван в конце этой функции, и он разрушает *docBuilder_ неявно в это время также, так как *docBuilder_ создан с использованием theXalanTransformer, Потом evalTransformer используется для преобразования, но *docBuilder_ уже был уничтожен.

Я не поняла *docBuilder_ будет уничтожен, когда theXalanTransformer уничтожен Когда я держал theXalanTransformer в памяти достаточно долго, чтобы сделать преобразование, результат был успешным. Я полагаю, было бы еще лучше использовать один XalanTransformer создать документ XML и выполнить преобразование.

0
По вопросам рекламы [email protected]