xsl: результат-документ отключен, когда отключены функции расширения - PullRequest
0 голосов
/ 10 января 2020

Я хочу иметь вывод нескольких файлов с xsl, поэтому я использую xsl: result-document и у меня появляется эта ошибка

xsl: result-document отключен, когда отключены функции расширения

Кажется, мне нужно включить внешние функции, чтобы он работал. Но проблема в том, что я не использую командную строку, я не могу просто поставить -ext: on . Здесь я звоню xslt с верблюдом и весной XML. Если я правильно понял, мне нужно изменить свойства конфигурации xslt так, чтобы для allow-external-functions было установлено значение true.

Вот что я пытался исправить:

<bean id="xslt-saxon" class="org.apache.camel.component.xslt.saxon.XsltSaxonComponent">
        <property name="saxonConfiguration">
          <bean class="net.sf.saxon.Configuration"/>
        </property>
        <property name="saxonConfigurationProperties">
          <map>
            <entry key="http://saxon.sf.net/feature/allow-external-functions" value="true" value-type="java.lang.Boolean"/>
          </map>
        </property>
    </bean>

И затем, когда я вызываю xslt-saxon:

<to uri="xslt-saxon:file://{{format.transformer.file}}"/>

Но это не работает, ошибка:

No component found with scheme: xslt-saxon

Даже если я добавлю зависимость к саксону в моем pom. xml это не работает. Я не знаю, что делать дальше, у вас есть идеи?

EDIT :

Теперь больше нет ошибки при использовании xslt-saxon, но Первая ошибка все еще там. Так как карта для allow-external-functions не работала.

1 Ответ

1 голос
/ 13 января 2020

Я могу запустить XSL-преобразование с Saxon через Camel , просто отправив сообщение с телом XML на

.to("xslt:transformation.xsl?saxon=true")

Нет необходимости в Spring XML или включив из внешних функций, он просто работает, когда я добавляю зависимость

<artifactId>camel-saxon</artifactId>

Кстати, я на верблюде 2.17.


Мой пример ввода XML

<?xml version="1.0" encoding="UTF-8"?>
<Camel>
    <Component>
        <XSL>The XSL component</XSL>
        <File>The file component</File>
    </Component>
</Camel>

Мои преобразования. Xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="/">
        <Camel-Components>
            <xsl:for-each select="Camel/Component/*">
                <xsl:result-document href="test-{position()}.txt">
                    <xsl:value-of select="."/>
                </xsl:result-document>
            </xsl:for-each>
        </Camel-Components>
    </xsl:template>
</xsl:stylesheet>

Это дает мне два новых файла, обратите внимание на динамику c имя файла определяется как test-{position()}.txt

  • test-1.txt => содержит The XSL component
  • test-2.txt => содержит The file component

Оба файла создаются по одному и тому же пути, где сохраняется моя таблица стилей преобразования, так как я просто предоставляю имя файла и никакой путь.

...