Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.此内容没有您所选择的语言版本。
Chapter 54. Introduction to the API Component Framework
Abstract
The API component framework helps you with the challenge of implementing complex Camel components based on a large Java API.
54.1. What is the API Component Framework? 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Motivation 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
For components with a small number of options, the standard approach to implementing components (Chapter 47, Implementing a Component) is quite effective. Where it starts to become problematic, however, is when you need to implement a component with a large number of options. This problem becomes dramatic when it comes to enterprise-level components, which can require you to wrap an API consisting of hundreds of operations. Such components require a large effort to create and maintain.
The API component framework was developed precisely to deal with the challenge of implementing such components.
Turning APIs into components 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Experience of implementing Camel components based on Java APIs has shown that a lot of the work is routine and mechanical. It consists of taking a particular Java method, mapping it to a particular URI syntax, and enabling the user to set the method parameters through URI options. This type of work is an obvious candidate for automation and code generation.
Generic URI format 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
The first step in automating the implementation of a Java API is to design a standard way of mapping an API method to a URI. For this we need to define a generic URI format, which can be used to wrap any Java API. Hence, the API component framework defines the following syntax for endpoint URIs:
scheme://endpoint-prefix/endpoint?Option1=Value1&...&OptionN=ValueN
scheme://endpoint-prefix/endpoint?Option1=Value1&...&OptionN=ValueN
Where
scheme
is the default URI scheme defined by the component; endpoint-prefix
is a short API name, which maps to one of the classes or interfaces from the wrapped Java API; endpoint
maps to a method name; and the URI options map to method argument names.
URI format for a single API class 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
In the case where an API consists of just a single Java class, the
endpoint-prefix
part of the URI becomes redundant, and you can specify the URI in the following, shorter format:
scheme://endpoint?Option1=Value1&...&OptionN=ValueN
scheme://endpoint?Option1=Value1&...&OptionN=ValueN
Note
To enable this URI format, it is also necessary for the component implementor to leave the
apiName
element blank in the configuration of the API component Maven plug-in.
Reflection and metadata 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
In order to map Java method invocations to a URI syntax, it is obvious that some form of reflection mechanism is needed. But the standard Java reflection API suffers from a notable limitation: it does not preserve method argument names. This is a problem, because we need the method argument names in order to generate meaningful URI option names. The solution is to provide metadata in alternative format: either as Javadoc or in method signature files.
Javadoc 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Javadoc is an ideal form of metadata for the API component framework, because it preserves the complete method signature, including method argument names. It is also easy to generate (particularly, using
maven-javadoc-plugin
) and, in many cases, is already provided in a third-party library.
Method signature files 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
If Javadoc is unavailable or unsuitable for some reason, the API component framework also supports an alternative source of metadata: the method signature files. A signature file is a simple text file which consists of a list of Java method signatures. It is relatively easy to create these files manually by copying and pasting from Java code (and lightly editing the resulting files).
What does the framework consist of? 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
From the perspective of a component developer, the API component framework consists of a number of different elements, as follows:
- A Maven archetype
- The
camel-archetype-api-component
Maven archetype is used to generate skeleton code for the component implementation. - A Maven plug-in
- The
camel-api-component-maven-plugin
Maven plug-in is responsible for generating the code that implements the mapping between the Java API and the endpoint URI syntax. - Specialized base classes
- To support the programming model of the API component framework, the Apache Camel core provides a specialized API in the
org.apache.camel.util.component
package. Amongst other things, this API provides specialized base classes for the component, endpoint, consumer, and producer classes.