Вы можете использовать процессор, чтобы установить тело в качестве XML-файла, а затем передать его в xslt.Вам не нужно иметь содержимое файла в теле сообщения, достаточно просто дескриптора файла для "xslt:".Что-то вроде
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.process(exchange -> exchange.getIn().setBody(new File("/conf.xml")))
.to("xslt:/transformers/booksByAuthor.xsl");
Автор уже будет в заголовке сообщения, поэтому вам не нужно его устанавливать, и вы сможете получить к нему доступ в xslt с помощью
<xsl:param name="author"/>
<xsl:value-of select="$author"/>
Я только что написал процессор как лямбда-код Java 8, но вы всегда можете использовать отдельный класс, если хотите.
Если вы хотите получить в сообщении источник вашего файла XML, а неиспользуйте дескриптор файла, вы можете использовать pollEnrich для чтения файла.Затем вам нужно будет использовать стратегию агрегации, чтобы гарантировать, что вы сохраните заголовки от исходного сообщения.Самый простой способ - просто скопировать текст сообщения с XML в оригинал.Вот пример того, как это сделать.
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.pollEnrich("file:/?fileName=conf.xml&noop=true", (original, xml) -> {
original.getIn().setBody(xml.getIn().getBody());
return original;})
.to("xslt:/transformers/booksByAuthor.xsl");