2.63. JSLT
使用 JSLT 查询或转换 JSON 有效负载。
2.63.1. 什么是内部
-
JSLT 组件, URI 语法:
jslt:resourceUri
有关用法和配置详情,请参阅上述链接。
2.63.2. Maven 协调
在 code.quarkus.redhat.com 上使用此扩展创建新项目
或者将协调添加到现有项目中:
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jslt</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jslt</artifactId>
</dependency>
2.63.3. 原生模式中的 allowContextMapAll 选项
原生模式不支持 allowContextMapAll
选项,因为它需要反映访问安全敏感的 camel 核心类,如 CamelContext
& Exchange
。这被视为安全风险,因此默认情况下不提供对该功能的访问。
2.63.4. 其他 Camel Quarkus 配置
2.63.4.1. 从原生模式的类路径加载 JSLT 模板
此组件通常从 classpath 加载模板。要使它以原生模式工作,您需要使用 quarkus.native.resources.includes
属性将模板文件显式嵌入到原生可执行文件中。
例如,以下路由会从名为 transformation.json
的类路径资源加载 JSLT 模式:
from("direct:start").to("jslt:transformation.json");
from("direct:start").to("jslt:transformation.json");
要在原生镜像中包含此(可能存储在 .json
文件中的其他模板),您必须将以下内容添加到 application.properties
文件中:
quarkus.native.resources.includes = *.json
quarkus.native.resources.includes = *.json
有关选择包含在原生可执行文件中的资源的更多信息,请参阅 原生可执行文件 中的 组合资源。
2.63.4.2. 在原生模式中使用 JSLT 功能
当在原生模式中使用 camel-quarkus 中的 JSLT 功能时,需要注册托管功能的类来反映。当无法注册目标功能时,可能会最终写一个 stub,如下所示。
@RegisterForReflection public class MathFunctionStub { public static double pow(double a, double b) { return java.lang.Math.pow(a, b); } }
@RegisterForReflection
public class MathFunctionStub {
public static double pow(double a, double b) {
return java.lang.Math.pow(a, b);
}
}
目标功能 Math.pow (…)
现在可以通过 MathFunctionStub
类访问,该类可以在组件中注册,如下所示:
@Named JsltComponent jsltWithFunction() throws ClassNotFoundException { JsltComponent component = new JsltComponent(); component.setFunctions(singleton(wrapStaticMethod("power", "org.apache.cq.example.MathFunctionStub", "pow"))); return component; }
@Named
JsltComponent jsltWithFunction() throws ClassNotFoundException {
JsltComponent component = new JsltComponent();
component.setFunctions(singleton(wrapStaticMethod("power", "org.apache.cq.example.MathFunctionStub", "pow")));
return component;
}