...
This component does not act as a HTTP client, it delegates that to another component mentioned above. The lookup mechanism searches for a single component that implements the RestProducerFactory interface and uses that. If the CLASSPATH contains more than one, then the property componentName should be set to indicate which component to delegate to.
Most of the configuration is taken from the Swagger specification but the option exists to override those by specifying them on the component or on the endpoint. Typically you would just need to override the host or basePath if those differ from the specification.
NOTE: The host parameter should contain the absolute URI containing scheme, hostname and port number, for instance https://api.example.com.
With componentName you specify what component is used to perform the requests, this named component needs to be present in the Camel context and implement the required RestProducerFactory interface - as do the components listed at the top.
If you do not specify the componentName at either component or endpoint level, CLASSPATH is searched for a suitable delegate. There should be only one component present on the CLASSPATH that implements the RestProducerFactory interface for this to work.
Div | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||
|
Example: PetStore
Checkout the example in the camel-example-rest-swagger
project in the examples
directory.
For example if you wanted to use the PetStore provided REST API simply reference the specification URI and desired operation id from the Swagger specification or download the specification and store it as swagger.json
(in the root) of CLASSPATH that way it will be automaticaly used. Let’s use the Undertow component to perform all the requests and Camels excelent support for Spring Boot.
Here are our dependencies defined in Maven POM file:
Code Block | ||
---|---|---|
| ||
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-undertow-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-rest-swagger-starter</artifactId>
</dependency> |
Start by defining the Undertow component and the RestSwaggerComponent:
...
Code Block | ||
---|---|---|
| ||
@Bean
public Component petstore(CamelContext camelContext, UndertowComponent undertow) {
RestSwaggerComponent petstore = new RestSwaggerComponent(camelContext);
petstore.setSpecificationUri("http://petstore.swagger.io/v2/swagger.json");
petstore.setDelegate(undertow);
return petstore;
} |
NOTE: Support in Camel for Spring Boot will auto create the UndertowComponent
Spring bean, and you can configure it using application.properties
(or application.yml
) using prefix camel.component.undertow.
. We are defining the petstore
component here in order to have a named component in the Camel context that we can use to interact with the PetStore REST API, if this is the only rest-swagger
component used we might configure it in the same manner (using application.properties
).
Now in our application we can simply use the ProducerTemplate
to invoke PetStore REST methods:
Code Block | ||
---|---|---|
| ||
@Autowired
ProducerTemplate template;
String getPetJsonById(int petId) {
return template.requestBodyAndHeaders("petstore:getPetById", null, "petId", petId);
} |