Luca Burgazzoli created CAMEL-9591:
--------------------------------------
Summary: Support Saxon integrated extension functions
Key: CAMEL-9591
URL: https://issues.apache.org/jira/browse/CAMEL-9591
Project: Camel
Issue Type: New Feature
Components: camel-xslt
Reporter: Luca Burgazzoli
Assignee: Luca Burgazzoli
Priority: Minor
Since Saxon 9.2, writing extension functions has been supplemented by a new
mechanism, referred to as [integrated extension
functions|http://www.saxonica.com/html/documentation/extensibility/integratedfunctions].
To use such an extension function, user writes a custom class which extends
net.sf.saxon.lib.ExtensionFunctionDefinition an registers it in the Saxon
transformer factory. It works fine. Only problem is that there's no convenient
support in Camel to pass such an extension function reference to camel-xslt.
Current way:
{code:java}
// Define my extension functions (note: Saxon requires a class for each
function)
List<ExtensionFunctionDefinition> extensionFunctions = new
ArrayList<ExtensionFunctionDefinition>();
extensionFunctions.add(new MyExtensionFunction1());
extensionFunctions.add(new MyExtensionFunction2());
// Register extension functions
TransformerFactoryImpl extendedSaxonTransformerFactory = new
TransformerFactoryImpl();
Configuration configuration =
extendedSaxonTransformerFactory.getConfiguration();
for ( ExtensionFunctionDefinition func : extensionFunctions ) {
configuration.registerExtensionFunction(func);
}
// Enable secure processing (note: secure processing allows use of Saxon
integrated extension functions as opposed to reflective extension functions)
extendedSaxonTransformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,
true);
// Register transformer factory on Camel
SimpleRegistry registry = new SimpleRegistry();
registry.put("extendedSaxonTransformerFactory",
extendedSaxonTransformerFactory);
CamelContext context = new DefaultCamelContext(registry);
// Define Route
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.to("xslt:transformation/myStyleSheet.xslt?transformerFactory=#extendedSaxonTransformerFactory");
}
});
{code}
Proposed way:
{code:java}
// Define my extension functions (note: Saxon requires a class for each
function)
List<ExtensionFunctionDefinition> extensionFunctions = new
ArrayList<ExtensionFunctionDefinition>();
extensionFunctions.add(new MyExtensionFunction1());
extensionFunctions.add(new MyExtensionFunction2());
// Register extension functions with Camel
SimpleRegistry registry = new SimpleRegistry();
registry.put("extensionFunctions", extensionFunctions);
CamelContext context = new DefaultCamelContext(registry);
// Define Route
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.to("xslt:transformation/myStyleSheet.xslt?saxon=true&saxonExtensionFunctions=#extensionFunctions&secureProcessing=true");
}
});
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)