47.5. 参数名称替换
概述 复制链接链接已复制到粘贴板!
API 组件框架要求 URI 选项名称 在每个代理类(Java API 类)中是唯一的。然而,方法参数名称并非始终如此。例如,在 API 类中考虑以下 Java 方法:
public void doSomething(int id, String name); public void doSomethingElse(int id, String name);
public void doSomething(int id, String name);
public void doSomethingElse(int id, String name);
当您构建 Maven 项目时,camel-api-component-maven-plugin 生成配置类, ProxyClassEndpointConfiguration,其中包含 ProxyClass 类中 所有参数 的 getter 和 setter 方法。例如,根据前面的方法,插件会在配置类中生成以下 getter 和 setter 方法:
public int getId(); public void setId(int id); public String getName(); public void setName(String name);
public int getId();
public void setId(int id);
public String getName();
public void setName(String name);
但是,如果 id 参数以不同的类型出现多次,如下例所示:
public void doSomething(int id, String name); public void doSomethingElse(int id, String name); public String lookupByID(String id);
public void doSomething(int id, String name);
public void doSomethingElse(int id, String name);
public String lookupByID(String id);
在这种情况下,代码生成会失败,因为您无法定义返回 int 的 方法以及返回相同范围内的 getId String 方法。此问题的解决方案是使用参数名称替换 来定制参数名称 到 URI 选项名称的映射。
语法 复制链接链接已复制到粘贴板!
替换 元素可以定义为一个或多个 替换 子元素,如下所示:
其中 argType 元素和 replaceWithType 元素是可选的,可以省略。
影响范围 复制链接链接已复制到粘贴板!
如以下提取所示,替换 项可以选择性地显示为 apis 元素的子项,/或作为 api 元素的子项:
您可以在以下范围中定义 替换 元素:
-
作为
api元素的子项 the thesubstitutions只适用于api元素指定的 API 类。 -
作为
apis元素的子项 thesubstitutions默认应用于所有 API 类,但可以在api级别上覆盖。
子元素 复制链接链接已复制到粘贴板!
每个 替换 元素均可通过以下子元素定义:
method-
指定正则表达式(
java.util.regex语法),以匹配 Java API 中的方法名称。 argName-
指定正则表达式(
java.util.regex语法),以匹配匹配匹配方法的参数名称,其中模式通常包含捕获组。 argType-
(可选) 指定正则表达式(
java.util.regex语法)以匹配参数的类型。如果将replaceWithType选项设置为true,则通常会在这个正则表达式中使用捕获组。 替换-
根据
方法模式、argName模式和(可选)argType模式的特定匹配项,替换元素定义了替换参数名称(用于 URI 中使用)。可使用从argName正则表达式模式捕获的字符串来构建替换文本(使用语法$1、$2、$3来分别插入第一个、第二个或第三个捕获组)。或者,如果使用从argType正则表达式模式捕获的字符串来构建替换文本,如果您将replaceWithType选项设置为true。 replaceWithType-
为
true时,指定使用从argType正则表达式捕获的字符串来构建替换文本。默认值为false。
示例 复制链接链接已复制到粘贴板!
以下替换示例通过在参数名称中添加后缀 Param 来修改 java.lang.String 类型的每个参数:
例如,给出以下方法签名:
public String greetUs(String name1, String name2);
public String greetUs(String name1, String name2);
此方法的参数将通过端点 URI 中的选项、name1Param 和 name2Param 来指定。