Chapter 46. Endpoint Interface
Abstract
This chapter describes how to implement the
Endpoint
interface, which is an essential step in the implementation of a Apache Camel component.
46.1. The Endpoint Interface
Overview
An instance of
org.apache.camel.Endpoint
type encapsulates an endpoint URI, and it also serves as a factory for Consumer
, Producer
, and Exchange
objects. There are three different approaches to implementing an endpoint:
- Event-driven
- scheduled poll
- polling
These endpoint implementation patterns complement the corresponding patterns for implementing a consumer—see Section 47.2, “Implementing the Consumer Interface”.
Figure 46.1, “Endpoint Inheritance Hierarchy” shows the relevant Java interfaces and classes that make up the
Endpoint
inheritance hierarchy.
Figure 46.1. Endpoint Inheritance Hierarchy
The Endpoint interface
Example 46.1, “Endpoint Interface” shows the definition of the
org.apache.camel.Endpoint
interface.
Example 46.1. Endpoint Interface
package org.apache.camel; public interface Endpoint { boolean isSingleton(); String getEndpointUri(); String getEndpointKey(); CamelContext getCamelContext(); void setCamelContext(CamelContext context); void configureProperties(Map options); boolean isLenientProperties(); Exchange createExchange(); Exchange createExchange(ExchangePattern pattern); Exchange createExchange(Exchange exchange); Producer createProducer() throws Exception; Consumer createConsumer(Processor processor) throws Exception; PollingConsumer createPollingConsumer() throws Exception; }
Endpoint methods
The
Endpoint
interface defines the following methods:
isSingleton()
—Returnstrue
, if you want to ensure that each URI maps to a single endpoint within a CamelContext. When this property istrue
, multiple references to the identical URI within your routes always refer to a single endpoint instance. When this property isfalse
, on the other hand, multiple references to the same URI within your routes refer to distinct endpoint instances. Each time you refer to the URI in a route, a new endpoint instance is created.getEndpointUri()
—Returns the endpoint URI of this endpoint.getEndpointKey()
—Used byorg.apache.camel.spi.LifecycleStrategy
when registering the endpoint.getCamelContext()
—return a reference to theCamelContext
instance to which this endpoint belongs.setCamelContext()
—Sets theCamelContext
instance to which this endpoint belongs.configureProperties()
—Stores a copy of the parameter map that is used to inject parameters when creating a newConsumer
instance.isLenientProperties()
—Returnstrue
to indicate that the URI is allowed to contain unknown parameters (that is, parameters that cannot be injected on theEndpoint
or theConsumer
class). Normally, this method should be implemented to returnfalse
.createExchange()
—An overloaded method with the following variants:Exchange createExchange()
—Creates a new exchange instance with a default exchange pattern setting.Exchange createExchange(ExchangePattern pattern)
—Creates a new exchange instance with the specified exchange pattern.Exchange createExchange(Exchange exchange)
—Converts the givenexchange
argument to the type of exchange needed for this endpoint. If the given exchange is not already of the correct type, this method copies it into a new instance of the correct type. A default implementation of this method is provided in theDefaultEndpoint
class.
createProducer()
—Factory method used to create newProducer
instances.createConsumer()
—Factory method to create new event-driven consumer instances. Theprocessor
argument is a reference to the first processor in the route.createPollingConsumer()
—Factory method to create new polling consumer instances.
Endpoint singletons
In order to avoid unnecessary overhead, it is a good idea to create a single endpoint instance for all endpoints that have the same URI (within a CamelContext). You can enforce this condition by implementing
isSingleton()
to return true
.
Note
In this context, same URI means that two URIs are the same when compared using string equality. In principle, it is possible to have two URIs that are equivalent, though represented by different strings. In that case, the URIs would not be treated as the same.