Apache Camel is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.

Overview

Apache Camel

Maven Central Javadocs Stack Overflow Chat Twitter

Apache Camel is a powerful, open-source integration framework based on prevalent Enterprise Integration Patterns with powerful bean integration.

Introduction

Camel enables the creation of the Enterprise Integration Patterns to implement routing and mediation rules in either a Java-based Domain Specific Language (or Fluent API), via Spring or Blueprint based Xml Configuration files, or via the Scala DSL. That means you get smart completion of routing rules in your IDE whether in your Java, Scala, or XML editor.

Apache Camel uses URIs to enable easier integration with all kinds of transport or messaging model including HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF together with working with pluggable Data Format options. Apache Camel is a small library that has minimal dependencies for easy embedding in any Java application. Apache Camel lets you work with the same API regardless of the transport type, making it possible to interact with all the components provided out-of-the-box, with a good understanding of the API.

Apache Camel has powerful Bean Binding and integrated seamlessly with popular frameworks such as Spring, CDI, and Blueprint.

Apache Camel has extensive testing support allowing you to easily unit test your routes.

Components

Apache Camel comes alongside several artifacts with components, data formats, languages, and kinds. The up to date list is available online at the Camel website:

Examples

Apache Camel comes with many examples. The up to date list is available online at GitHub:

Getting Started

To help you get started, try the following links:

Getting Started

http://camel.apache.org/getting-started.html

The beginner examples are another powerful alternative pathway for getting started with Apache Camel.

Building

http://camel.apache.org/building.html

Contributions

We welcome all kinds of contributions, the details of which are specified here:

https://github.com/apache/camel/blob/master/CONTRIBUTING.md

Please refer to the website for details of finding the issue tracker, email lists, GitHub, chat

Website: http://camel.apache.org/

Github (source): https://github.com/apache/camel

Issue tracker: https://issues.apache.org/jira/projects/CAMEL

Mailing-list: http://camel.apache.org/mailing-lists.html

Chat: https://camel.zulipchat.com/

StackOverflow: https://stackoverflow.com/questions/tagged/apache-camel

Twitter: https://twitter.com/ApacheCamel

Support

For additional help, support, we recommend referencing this page first:

http://camel.apache.org/support.html

Getting Help

If you get stuck somewhere, please feel free to reach out to us on either StackOverflow, Chat, or the email mailing list.

Please help us make Apache Camel better - we appreciate any feedback you may have.

Enjoy!


The Camel riders!

Licensing

The terms for software licensing are detailed in the LICENSE.txt file,
located in the working directory.

This distribution includes cryptographic software. The country in which you currently reside may levy restrictions on the import, possession, use, and re-export to foreign countries of encryption software. BEFORE using any encryption software, please check your country's laws, regulations, and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS) has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

The following provides more details on the included cryptographic software:

  • camel-ahc can be configured to use https.
  • camel-atmosphere-websocket can be used for secure communications.
  • camel-crypto can be used for secure communications.
  • camel-cxf can be configured for secure communications.
  • camel-ftp can be configured for secure communications.
  • camel-http can be configured to use https.
  • camel-infinispan can be configured for secure communications.
  • camel-jasypt can be used for secure communications.
  • camel-jetty can be configured to use https.
  • camel-mail can be configured for secure communications.
  • camel-nagios can be configured for secure communications.
  • camel-netty-http can be configured to use https.
  • camel-undertow can be configured to use https.
  • camel-xmlsecurity can be configured for secure communications.
Comments
  • CAMEL-18661: Make span current and clear scope properly for async processing

    CAMEL-18661: Make span current and clear scope properly for async processing

    Fixesr https://issues.apache.org/jira/browse/CAMEL-18661

    ~~!Looking for input on the overall approach!~~

    This change enables current span propagation to underlying libraries and end-user-code (for OpenTelemetry): for all spans created by Camel, it calls into span.makeCurrent()

    However, OpenTelemetry (and other tracing tools) rely on ThreadLocal to propagate context. They do it carefully for Executors, Reactor, etc, so it works in async scenarios too.

    Instrumentations have to close scope returned by span.makeCurrent() on the same thread where it was created to avoid leaking context (by leaving current span on current thread).

    This is easy to guarantee with sync operations in Camel - ExchangeStarted/Sending and ExchangeCompleted/Sent events (where spans start and end) are called on the same thread.

    However, for async operations, they are called on different threads.

    This change also adds a new event - ExchangeAsyncStarted (naming needs more work), that notifies that Processor.process call has ended, i.e. async operation has started. Tracers would end the scope (but not span) when this event is sent.

    Alternative approach:

    add a dependency on camel-tracing to camel-base-engine and call into ActiveSpanManager directly:

    try(AutoCloseable scope = ActiveSpanManager.makeSpanCurrent(exchange)) {
        sync = processor.process(exchange, async);
    }
    

    This would be easier to maintain and would more or less guarantee that scope is disposed on the same thread, however, dependency on tracing might not be desirable.

    Traces with this change

    (tick/testme spans come from Camel and were previously not correlated with ServiceBus spans coming from Azure SDK)

    image components core 
    opened by lmolkova 39
  • CAMEL-11261 Revise Camel context destruction in Spring (Boot) applications

    CAMEL-11261 Revise Camel context destruction in Spring (Boot) applications

    Submitted for review, thanks 👍

    See the discussion on the user forum.

    This makes CamelSpringBootApplicationController lifecycle bean with top priority during ApplicationContext close.

    opened by zregvart 37
  • CAMEL-13807: Add Component DSL fluent builders

    CAMEL-13807: Add Component DSL fluent builders

    This PR implements components DSL according to CAMEL-13807. Few notes:

    1. To use it to create a component, it can be used like this ComponentsBuilderFactory.kafka().setBrokers("{{host:port}}").build()
    2. Since I needed to maintain the POM file and ComponentsBuilderFactory interface, I used a metadata json file to keep track on the generated DSL classes and update whatever needed.
    3. To set the properties, I used component property configurer since it generates what is needed and I made use of that.
    4. Since I used the metadata file approach, the build speed wasn't impacted much which is good.
    5. If the placeholder needs to be resolved, the component needs to be built with the context being passed as parameter: ComponentsBuilderFactory.kafka().setBrokers("{{host:port}}").build(camelContext)
    6. There are a lot of shared functionality between endpoinsDslMojo and componentsDslMojo, hence I have created an abstract class for both and helpers that can be shared in both. However, I left EndpointDslMojo untouched for now. Will remove some shared core once I am done from this PR.

    Topics need to be done:

    • [x] Fix checkstyle.
    • [x] Add unit tests for the maven plugin generators.
    • [x] Add more unit tests for camel-componentDsl.
    • [x] Optimize some classes on the go.
    opened by omarsmak 34
  • CAMEL-10178: Added Google PubSub Component

    CAMEL-10178: Added Google PubSub Component

    Google PubSub component with producer and consumer endpoints, unit and integration tests. Speed optimisation (mini batching, async processing) will be done in subsequent releases - dependent on the new client library from Google. For now it is synchronous, message by message processing.

    opened by evmin 33
  • CAMEL-11879: Upgraded lucene version to 7.0.0

    CAMEL-11879: Upgraded lucene version to 7.0.0

    https://issues.apache.org/jira/browse/CAMEL-11879 Upgraded Lucene to latest version 7.0.0.

    Passed the iTests for Karaf and OSGi without issues, including the camel-lucene component tests.

    opened by vrlgohel 32
  • CAMEL-14910: Bundling of the heavily distributed components

    CAMEL-14910: Bundling of the heavily distributed components

    • Particular queries were raised in this issue.
    1. Should there be summary pages for groups of related components? There already existed summary pages for groups including Ignite, Spring, and a few others. However, as this brings in clarification to understand the documentation, I also added a summary for other groups including AWS, AWS 2, Google.

    2. What should their structure and appearance be? In the nav panel, I believe that the highly distributed related components should be bundled and grouped together within the parent component.

    3. Should the nav pane indent the components in a group? As for user manual documentation under camel Kafka and others, the nav pane is well indented with subgroups and parent groups. Thus, it has been done in the same manner for this PR.

    opened by AemieJ 30
  • [CAMEL-9145] update hbase version to 1.1.1 and hadoop2 to 2.7.1

    [CAMEL-9145] update hbase version to 1.1.1 and hadoop2 to 2.7.1

    Before the upgrade I was not able to run tests properly, because of an error during setup of HadoopMinicluster. In that case all tests pass, but are not started. I have a linux environment.

    After the update I was able to run tests. There are 18 positive results and 2 negative in my environment. I cannot check how many negative tests were on the previous versions, because of the error mentioned at the beginning.

    opened by woj-i 30
  • Camel 13742 Extend Camel-cmis with new operations

    Camel 13742 Extend Camel-cmis with new operations

    Operations :

    • Delete folder
    • Delete document
    • Move folder
    • Move document
    • Rename folder
    • Rename document
    • Copy folder
    • Copy document
    • CheckIn
    • CheckOut
    • CancelCheckOut

    I have to mention that I am not able to build the original apache camel project. That means I cant run the test written by the author of Camel-cmis. I was working only on Camel-cmis module in a separate project. I was testing all new operations with alfresco repository.

    opened by cherepnalkovski 29
  • ✨ camel-whatsapp component

    ✨ camel-whatsapp component

    • [ ] Make sure there is a JIRA issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a JIRA issue. Your pull request should address just this issue, without pulling in other changes.
    • [ ] Each commit in the pull request should have a meaningful subject line and body.
    • [ ] If you're unsure, you can format the pull request title like [CAMEL-XXX] Fixes bug in camel-file component, where you replace CAMEL-XXX with the appropriate JIRA issue.
    • [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
    • [ ] Run mvn clean install -Psourcecheck in your module with source check enabled to make sure basic checks pass and there are no checkstyle violations. A more thorough check will be performed on your pull request automatically. Below are the contribution guidelines: https://github.com/apache/camel/blob/main/CONTRIBUTING.md

    Hello, since WhatsApp business released new public API, https://developers.facebook.com/docs/whatsapp/cloud-api/, I created a new component camel-whatsapp which integrate camel with those API (pretty much like telegram).

    As you can see from the integration test, the producer is working as expected, but before adding more features, documentation and so on I'd like to have your feedback if it is worth to have this component.

    Moreover I have some question:

    • I'm using async-http-client as HTTP client, but seems like that the project is not maintained anymore, should I use another library?
    • As you can see from cloud-api documentation, webhook can be used, I was wondering if camel-webhook can be used and if I could receive some help

    The output of the test right now is:

    image

    components catalog 
    opened by Croway 28
  • CAMEL-10671: Adding Camel example project for the Ceylon JVM language

    CAMEL-10671: Adding Camel example project for the Ceylon JVM language

    Adding Camel example for Ceylon 1.3.3.

    Followed the path of the Kotlin example as instructed on the ticket.

    Compile/Runs without errors and I'm able to access Jetty's localhost:8080 for the welcome message.

    Things I couldn't get around:

    1. The module.ceylon file cannot refer to Maven POM versions/properties unfortunately needing a hardcoded version of the used libs (double-checked on the Ceylon Gitter channel too)
    2. I had to hardcode the version of camel-http-common since the 2.22.0-SNAPSHOT does not exist
    opened by dimitrisli 28
  • Camel Firebase Component

    Camel Firebase Component

    This component should allow to use Google Firebase (see https://firebase.google.com/docs/admin/setup ) from Camel. It contains an end point with a Producer and a Consumer. The producer can create and update values in Firebase. The consumer listens to child events and can consume add, change, remove, move and cancel operations.

    You will find some integration unit tests in this first commit. But these tests will need to have a JSON file ('firebase-admin-connection.json') with the Firebase keys so that the tests can run. For security reasons I have removed these. Not quite sure how to solve that.

    I am a newbie on this project, so it might well be that I am not complying to your standards. Please guide me where needed.

    opened by gilfernandes 27
  • CAMEL-18863: camel-pulsar - Support chunking to enable sending a large message

    CAMEL-18863: camel-pulsar - Support chunking to enable sending a large message

    Currently, Pulsar producer can't send a message larger than maxMessageSize. This PR enables the producer to chunk such a message for overcoming this limitation.

    • [x] Make sure there is a JIRA issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a JIRA issue. Your pull request should address just this issue, without pulling in other changes.
    • [x] Each commit in the pull request should have a meaningful subject line and body.
    • [x] If you're unsure, you can format the pull request title like [CAMEL-XXX] Fixes bug in camel-file component, where you replace CAMEL-XXX with the appropriate JIRA issue.
    • [x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
    • [x] Run mvn clean install -Psourcecheck in your module with source check enabled to make sure basic checks pass and there are no checkstyle violations. A more thorough check will be performed on your pull request automatically. Below are the contribution guidelines: https://github.com/apache/camel/blob/main/CONTRIBUTING.md
    components 
    opened by sekikn 2
  • CAMEL-18860: java-joor-dsl - Adapt the code for native compilation

    CAMEL-18860: java-joor-dsl - Adapt the code for native compilation

    Fixes https://issues.apache.org/jira/browse/CAMEL-18860

    Motivation

    To ease the native compilation of routes written using the Java DSL, we need to adapt the code to be able to reuse some parts of the existing code.

    Modifications

    • Move the reusable methods asClassName and determineName to a helper class
    • Allow providing compilation options when compiling to give the ability to set the classpath
    • Fix some violations
    dsl 
    opened by essobedo 2
  • Problem when parameter type of bean method is String.

    Problem when parameter type of bean method is String.

    [camel-bean] Problem when parameter type of bean method is String. Problems with more than 2 parameters.

    Expression to evaluate the bean parameter parameters and provide the correct values when the method is invoked.

    There are several problems:

    1. There is a problem with quotes being removed in the splitSafeQuote method used inside the evaluate method. splitSafeQuote("'Camel', 'Test'", ",", true) -> ["Camel","Test"]
    2. The quote is removed and false is returned from the isValidParameterValue method. isValidParameterValue("Camel") -> return false
    3. When “ClassLoader” is working which make thread blocked it caused by Disk I/O. So it behavior make that performance deteriorates.

    This PR also adds TestCase.

    components core 
    opened by Luke-hbk 11
  • Adding HTTPs support to AS2 component

    Adding HTTPs support to AS2 component

    Trying to add SSLContext option to AS2Configuration.

    I added a new SSLContext field to AS2Configuration class and got "Unable to create mojo: Empty doc for option: sslContext, parent options: " error while compiling. Following the contribution page, I have already added javadoc comment before the setter method (didn't see it before any getter method of other fields so skipped it for getter) and @UriParam for the field declaration.

    (I had written code for adding the SSLContext configuration at component and endpoint level, but keeping the code minimal here. Also changed SSLContext to a String. Getting the same error though)

    components 
    opened by shikhar97gupta 10
Owner
The Apache Software Foundation
The Apache Software Foundation
Schema modelling framework for decentralised domain-driven ownership of data.

Schemata Schemata is a schema modeling framework for decentralized domain-driven ownership of data. Schemata combine a set of standard metadata defini

Ananth Packkildurai 145 Dec 23, 2022
Apache Camel is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.

Apache Camel Apache Camel is a powerful, open-source integration framework based on prevalent Enterprise Integration Patterns with powerful bean integ

The Apache Software Foundation 4.7k Jan 8, 2023
To quickly integrate your applications into the EdgeGallery platform, we provide the toolchain project to help developers quickly modify code and migrate applications to the platform.

Toolchain 工具链 工具链是MEC Developer开发者平台中的一个重要特性,当x86平台的App想要上车ARM平台时,底层的代码不可避免的需要进行修改或重写。 App提供者可以通过MEC Developer开发者平台中集成的工具链进行源代码分析,定位需要修改的源代码并根据指导意见进行修

EdgeGallery 19 Jan 7, 2022
A distributed data integration framework that simplifies common aspects of big data integration such as data ingestion, replication, organization and lifecycle management for both streaming and batch data ecosystems.

Apache Gobblin Apache Gobblin is a highly scalable data management solution for structured and byte-oriented data in heterogeneous data ecosystems. Ca

The Apache Software Foundation 2.1k Jan 4, 2023
This open source project allows you to easily integrate Camunda's External Task Clients into Micronaut projects: simply add a dependency in your Micronaut project

micronaut-camunda-external-client This open source project allows you to easily integrate Camunda 's External Task Clients into Micronaut projects. Mi

Novatec Consulting GmbH 19 Dec 18, 2022
Operating Systems - Concepts of computer operating systems including concurrency, memory management, file systems, multitasking, performance analysis, and security. Offered spring only.

Nachos for Java README Welcome to Nachos for Java. We believe that working in Java rather than C++ will greatly simplify the development process by p

Sabir Kirpal 1 Nov 28, 2021
OpenMap is an Open Source JavaBeans-based programmer's toolkit. Using OpenMap, you can quickly build applications and applets that access data from legacy databases and applications.

$Source: /cvs/distapps/openmap/README,v $ $RCSfile: README,v $ $Revision: 1.11 $ $Date: 2002/11/06 19:11:02 $ $Author: bmackiew $ OpenMap(tm) What

OpenMap 65 Nov 12, 2022
A Spring Boot Camel boilerplate that aims to consume events from Apache Kafka, process it and send to a PostgreSQL database.

SPRING-BOOT CAMEL BOILERPLATE This is a Spring-Boot Camel Application model that you can use as a reference to study or even to use in your company. I

Bruno Delgado 45 Apr 4, 2022
Netflix, Inc. 23.1k Jan 5, 2023
Kameleon - project scaffolding for Apache Camel

Kameleon - project scaffolding for Apache Camel This is a project generator for Apache Camel. It generates maven-based Java project with preconfigured

The Apache Software Foundation 31 Dec 14, 2022
Firehose is an extensible, no-code, and cloud-native service to load real-time streaming data from Kafka to data stores, data lakes, and analytical storage systems.

Firehose - Firehose is an extensible, no-code, and cloud-native service to load real-time streaming data from Kafka to data stores, data lakes, and analytical storage systems.

Open DataOps Foundation 279 Dec 22, 2022
Toloka has a powerful open API, it allows you to integrate an on-demand workforce directly into your processes, and to build scalable and fully automated human-in-the-loop ML pipelines.

Toloka Java SDK Documentation Website | API Documentation | Platform Designed by engineers for engineers, Toloka lets you integrate an on-demand workf

Toloka 10 Apr 27, 2022
Framework for automated integration tests with focus on messaging integration

Citrus Integration Testing Welcome to Citrus Citrus is a test framework written in Java that is able to create fully automated end-to-end use case tes

Citrus Framework 373 Dec 27, 2022
JAP is an open source authentication middleware, it is highly decoupled from business code and has good modularity and flexiblity. Developers could integrate JAP into web applications effortlessly.

?? JAP 是什么? JAP 是一款开源的登录中间件,基于模块化设计,并且与业务高度解耦,使用起来非常灵活,开发者可以毫不费力地将 JAP 集

Fujie 140 Dec 1, 2022
Jalgorithm is an open-source Java library which has implemented various algorithms and data structure

We loved Java and algorithms, so We made Jalgorithm ❤ Jalgorithm is an open-source Java library which has implemented various algorithms and data stru

Muhammad Karbalaee 35 Dec 15, 2022
Apache Cayenne is an open source persistence framework licensed under the Apache License

Apache Cayenne is an open source persistence framework licensed under the Apache License, providing object-relational mapping (ORM) and remoting services.

The Apache Software Foundation 284 Dec 31, 2022
Open data platform based on flink. Now scaleph is supporting data integration with seatunnel on flink

scaleph The Scaleph project features data integration, develop, job schedule and orchestration and trys to provide one-stop data platform for develope

null 151 Jan 3, 2023