47.5. 参数名称替换


概述

API 组件框架要求 URI 选项名称 在每个代理类中唯一(Java API 类)。但是,这并非始终是方法参数名称的情况。例如,考虑 API 类中的以下 Java 方法:

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);

但是,如果 id 参数出现多次作为不同类型,则发生了什么情况,如下例所示:

public void doSomething(int id, String name);
public void doSomethingElse(int id, String name);
public String lookupByID(String id);

在这种情况下,代码生成会失败,因为您无法定义返回 intgetId 方法,以及在同一范围内返回 StringgetId 方法。这个问题的解决方案是使用 参数名替换来自定义参数名称到 URI 选项名称 的映射。

语法

可以使用一个或多个 替换 子元素定义 替换 元素,如下所示:

<substitutions>
  <substitution>
    <method>MethodPattern</method>
    <argName>ArgumentNamePattern</argName>
    <argType>TypeNamePattern</argType>
    <replacement>SubstituteArgName</replacement>
    <replaceWithType>[true|false]</replaceWithType>
  </substitution>
  ...
</substitutions>

其中 argType 元素和 replaceWithType 元素是可选的,可以省略。

影响范围

如以下提取所示,替换 元素可以选择性地显示为 apis 元素的子级和/或作为 api 元素的子级:

<configuration>
  <apis>
    <api>
      <apiName>...</apiName>
      ...
      <substitutions>...</substitutions>
    </api>
    <substitutions>...</substitutions>
    ...
  </apis>
</configuration>

您可以在以下范围中定义 替换 元素:

  • 作为 api 元素的子级 ,则 替换 仅应用到 api 元素指定的 API 类。
  • 作为 apis 元素的子级 ,它默认应用于所有 API 类,但可以在 api 级别上覆盖。

子元素

每个 替换 元素可使用以下子元素定义:

方法
指定正则表达式(java.util.regex 语法),以匹配 Java API 中的方法名称。
argName
指定正则表达式(java.util.regex 语法)以匹配匹配方法中的参数名称,其中模式通常包含捕获组。
argType
(可选) 指定一个正则表达式(java.util.regex 语法)以匹配参数的类型。如果将 replaceWithType 选项设置为 true,则通常在此正则表达式中使用捕获组。
替换
根据 方法 模式、argName 模式和(可选) argType 模式的特定匹配,替换 元素定义替换参数名称(用于在 URI 中使用)。可以使用从 argName 正则表达式模式捕获的字符串(使用语法 $1、$2、$2$3 分别插入第一个、第二个或第三个捕获组)来构建替换文本。或者,如果将 replaceWithType 选项设置为 true,则可以使用从 argType 正则表达式模式捕获的字符串来构建替换文本。
replaceWithType
true 时,使用从 argType 正则表达式捕获的字符串组成替换文本。默认值为 false

Example

以下替换示例通过将 suffix, Param 添加到参数名称来修改 java.lang.String 类型的每个参数:

<substitutions>
  <substitution>
    <method>^.+$</method>
    <argName>^.+$</argName>
    <argType>java.lang.String</argType>
    <replacement>$1Param</replacement>
    <replaceWithType>false</replaceWithType>
  </substitution>
</substitutions>

例如,给定以下方法签名:

public String greetUs(String name1, String name2);

此方法的参数将通过端点 URI 中的选项 name1Paramname2Param 来指定。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.