47.5. 인수 이름 하위
47.5.1. 개요
API 구성 요소 프레임워크를 사용하려면 각 프록시 클래스(Java API 클래스) 내에서 URI 옵션 이름이 고유 해야 합니다. 그러나 메서드 인수 이름에 항상 해당하는 것은 아닙니다. 예를 들어 API 클래스에서 다음 Java 메서드를 고려하십시오.
public void doSomething(int id, String name); public void doSomethingElse(int id, String name);
Maven 프로젝트를 빌드할 때 camel-api-component-maven-plugin
은 ProxyClass
클래스의 모든 인수에 대한 getter 및 setter 메서드를 포함하는 구성 클래스인 ProxyClass EndpointConfiguration
을 생성합니다. 예를 들어 이전 메서드에서 플러그인에서 구성 클래스에서 다음 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);
이 경우 int
를 반환하는 getId
메서드와 동일한 범위에서 문자열
을 반환하는 getId
메서드를 정의할 수 없기 때문에 코드 생성이 실패합니다. 이 문제에 대한 해결 방법은 인수 이름 대체를 사용하여 인수 이름 매핑을 URI 옵션 이름에 사용자 지정하는 것입니다.
47.5.2. 구문
substitutions
요소는 다음과 같이 하나 이상의 대체
하위 요소로 정의할 수 있습니다.
<substitutions> <substitution> <method>MethodPattern</method> <argName>ArgumentNamePattern</argName> <argType>TypeNamePattern</argType> <replacement>SubstituteArgName</replacement> <replaceWithType>[true|false]</replaceWithType> </substitution> ... </substitutions>
여기서 argType
요소와 replaceWithType
요소는 선택 사항이며 생략할 수 있습니다.
47.5.3. 범위
다음 추출에 표시된 것처럼 대체
요소는 선택적으로 apis
요소의 자식으로 및/또는 api
요소의 자식으로 표시될 수 있습니다.
<configuration> <apis> <api> <apiName>...</apiName> ... <substitutions>...</substitutions> </api> <substitutions>...</substitutions> ... </apis> </configuration>
다음 범위에서 substitutions
요소를 정의할 수 있습니다.
-
api
요소의 자식으로,대체
는api
요소에서 지정한 API 클래스에만 적용됩니다. -
apis
요소의 자식으로,대체
는 기본적으로 모든 API 클래스에 적용되지만api
수준에서 재정의할 수 있습니다.
47.5.4. 하위 요소
각 대체
요소는 다음 하위 요소로 정의할 수 있습니다.
method
-
Java API의 메서드 이름과 일치하도록 정규식(
java.util.regex
구문)을 지정합니다. argName
-
일치된 메서드의 인수 이름과 일치하도록 정규식(
java.util.regex
구문)을 지정합니다. 여기서 패턴은 일반적으로 캡처 그룹을 포함합니다. argType
-
(선택 사항) 인수 유형과 일치하도록 정규식(
java.util.regex
구문)을 지정합니다.replaceWithType
옵션을true
로 설정하면 일반적으로 이 정규식에서 캡처 그룹을 사용합니다. 교체
-
메서드
패턴의 특정 일치 항목인argName
패턴 및 (선택 옵션으로)argType
패턴의 경우replacement
요소는 대체 인수 이름(URI에서 사용)을 정의합니다. 대체 텍스트는argName
정규식 패턴에서 캡처된 문자열을 사용하여 (구문, $ 1,2
달러
,$3
구문을 사용하여 각각 첫 번째, 두 번째 또는 세 번째 캡처 그룹을 삽입함)을 사용하여 구성할 수 있습니다. 또는replaceWithType
옵션을true
로 설정하면argType
정규식 패턴에서 캡처된 문자열을 사용하여 대체 텍스트를 구성할 수 있습니다. replaceWithType
-
true
에서는argType
정규식에서 캡처된 문자열을 사용하여 대체 텍스트가 구성되도록 지정합니다. 기본값은false
입니다.
47.5.5. 예
다음 대체 예제에서는 접미사 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에 있는 options, name1Param
및 name2Param
을 통해 지정됩니다.