JSLT
JVM since1.1.0 Native since1.4.0
Query or transform JSON payloads using an JSLT.
What’s inside
-
JSLT component, URI syntax:
jslt:resourceUri
Please refer to the above link for usage and configuration details.
Maven coordinates
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jslt</artifactId>
</dependency>
Check the User guide for more information about writing Camel Quarkus applications.
allowContextMapAll option in native mode
The allowContextMapAll
option is not supported in native mode as it requires reflective access to security sensitive camel core classes such as
CamelContext
& Exchange
. This is considered a security risk and thus access to the feature is not provided by default.
Additional Camel Quarkus configuration
Using JSLT templates from classpath resource in native mode
A trick is needed when using JSLT templates from classpath resources in native mode. In such a situation, one needs to explicitly embed the resources in the native executable by specifying the include-patterns
option.
For instance, the route below would load the JSLT schema from a classpath resource named transformation.json:
from("direct:start").to("jslt:transformation.json");
In order to work in native mode the include-patterns
configuration should be set. For instance, in the application.properties
file as below :
quarkus.camel.native.resources.include-patterns = *.json
More information about selecting resources for inclusion in the native executable could be found at Embedding resource in native executable.
Using JSLT functions in native mode
When using JSLT functions from camel-quarkus in native mode, the classes hosting the functions would need to be registered for reflection. When registering the target function is not possible, one may end up writing a stub as below.
@RegisterForReflection public class MathFunctionStub { public static double pow(double a, double b) { return java.lang.Math.pow(a, b); } }
The target function Math.pow(…)
is now accessible through the MathFunctionStub
class that could be registered in the component as below:
@Named JsltComponent jsltWithFunction() throws ClassNotFoundException { JsltComponent component = new JsltComponent(); component.setFunctions(singleton(wrapStaticMethod("power", "org.apache.cq.example.MathFunctionStub", "pow"))); return component; }