...
Camel grpc component doesn't transfer the Message headers
Headers that are added to the Message in the camel Exchange before making a call to the camel-grpc component are not received at the grpc consumer. The expectation is that these headers would be added to the grpcStub before sending over the wire (like other components like http4 etc).
Our team has come up with a workaround for this but it is extremely cumbersome. We had to extend the GrpcProducer to introduce a custom GrpcExchangeForwarder that would copy header from exchange to the stub before invoking the sync/async method.
At the consumer side we had to extend the GrpcConsumer to use a custom ServerInterceptor to capture the grpc headers and custom MethodHandler to transfer the grpc headers to the Camel exchange headers.
camel-snmp - Support for multiple security mechanisms in SNMP v3
Allow to add multiple users for SNMP v3 i.e. the SnmpTrapConsumer should support multiple combinations of authentication and privacy protocols and different passphrases. We cannot have a route per security mechanism.
Consider the below scenario.
I have multiple SNMP devices which have multiple authentication protocols and privacy protocols with different passphrases. Moreover, they can send any version of SNMP traps from v1 to v3. I must be able to configure those in a properties file or a DSL (i.e. the snmp version, the USM users etc).
Example:
snmp.getUSM().addUser( new OctetString("MD5DES"), new UsmUser(new OctetString("MD5DES"), AuthMD5.ID, new OctetString("UserName"), PrivDES.ID, new OctetString("PasswordUser"))); snmp.getUSM().addUser( new OctetString("MD5DES"), new UsmUser(new OctetString("MD5DES"), null, null, null, null));
.. other users with different auth, priv mechanisms (i.e. different security mechanisms). I must be able to receive traps from all of them.
java-dsl - Add support for method references bean::methodName
Hi
This is not related only to spring integration.
I like to be able to use a spring service annotated class or bean directly from route but without using the method name as string, i.e. .bean(instance, "<method name") and instead use a method reference: .bean(instance::method)
But why?:
1. not being able to navigate quickly(open) that method from the IDE. Need to do some intermediary steps to reach that method.
2. using of reflection internally by Camel to call that method.
3. not being able to rename the method without breaking the route.
4. not being able to see quickly (Alt+F7) who calls a methods in the IDE.
5. using strings to reference a method when we have method references seems not right.
As a workaround I had to add a helper class to simulate passing of method references and then internally to translate to method.
In case it helps explaining I am attaching the helper Bean.java class (you can use it for free or to do better).
You can use the class in any route like this:
from (X)
.bean(call(cancelSubscriptionService::buildSalesforceCase))
.to(Y)
.routeId(Z);
As you see I am forced to use the intermediary helper 'call' in order to translate to an Expression.
I would like to not have to use my helper and have the support built directly into Camel if possible. Let me know if there is a better solution to my problem.
Thanks
camel-restdsl-swagger-plugin - create camel routes for generated rest DSL
camel-restdsl-swagger-plugin can generate CamelRoutes.java from a Swagger / OpenAPI spec, which includes the REST DSL with to("direct:restN") stubs. Would be nice if it also autogenerated the equivalent from("direct:restN").log() placeholders to help jump start coding.
Expose OData4 based service as consumer endpoint
Right now, only polling consumer is available for olingo4 component. It's better to have a real listening consumer for this.
The method may have name like 'listen' to be able to create a listening consumer.
Ability to load an SSLContextParameter with a Keystore containing multiple keys (aliases)
Hello,
I wish I could initialize a single SSLContextParameters at camel startup containing my truststore.jks (> 1 alias) and my keystore.jks (> 1 alias) in order to call it (refer to) in Routes (FTPs, HTTPs) without have to redefine a new SSLContextParameter for each EndPoint.
<camel:sslContextParameters id="sslIContextParameters">
<camel:trustManagers>
<camel:keyStore password="${truststore.jks.file.password}"
resource="${truststore.jks.file.location}" />
</camel:trustManagers>
<camel:keyManagers >
<camel:keyStore password="${keystore.jks.file.password}"
resource="${keystore.jks.file.location}" />
</camel:keyManagers>
</camel:sslContextParameters>
When my Keystore contains more than 1 alias, I have the following error when creating the Route at startup :
Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: https4://<host>:<port>/<address>?authPassword=RAW(password)&authUsername=login&authenticationPreemptive=true&bridgeEndpoint=true&sslContextParameters=sslContextParameters&throwExceptionOnFailure=true due to: Cannot recover key
due to
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
When my keystore contains only one key, it works very well.
<camel:sslContextParameters id="sslIContextParameters">
<camel:trustManagers>
<camel:keyStore password="${truststore.jks.file.password}"
resource="${truststore.jks.file.location}" />
</camel:trustManagers>
<camel:keyManagers keyPassword="keyPassword">
<camel:keyStore password="${keystore.jks.file.password}"
resource="${keystore.jks.file.location}" />
</camel:keyManagers>
</camel:sslContextParameters>
So I would like to be able to call my SSLContextParameter for different EndPoint by specifying (if necessary) the alias of the Keystore needed (by specifying the alias and / or password of the key)
Objectif in my project :
- 1 TrustStore.jks
- 1 Keystore.jsk
- 1 unique SSLContextParameter
- > 200 camelRoutes FTPs/HTTPs (ssl one way ou two way)
Thank a lot
Add tool to generate swagger doc at build time
We do not have at this moment a tool that can generate the swagger doc at build time. However I think it would be possible to develop such tool. We have existing tooling that parses the Java or XML source code (Camel routes) which we use for validating endpoints, or do route-coverage reports etc.
https://github.com/apache/camel/blob/master/tooling/maven/camel-maven-plugin/src/main/docs/camel-maven-plugin.adoc
We could then make that tool parse the rest-dsl and build up that model behind the scene and feed that into the swagger-java library for it to spit out the generated swagger doc.
We could make it as a goal on the existing camel-maven-plugin, or build a new maven plugin: camel-maven-swagger or something. Then people could use it during build time to generate the swagger doc etc.
We maybe should allow to override/configure things as well from the tooling, so you can maybe set/mask hostname or set descriptions or other things that may not all be detailed in the rest-dsl.
Add call options to the camel-grpc component
Add advanced call options related to the one operation and not overriding channel option:
- deadline
- compression
- etc.
Upgrade to JUnit 5
Note: it provides a junit-vintage module so we should be able to migrate stuffs easily
Most users should now be able to write JUnit 5 tests using the modules created in CAMEL-13342.
Concerning the migration of camel own tests to JUnit5, the last blocker is that migrating flaky tests to JUnit 5 is not handled until mavensurefire 3 has been released or until open discussions in the junit team has converged.
Camel website
This is an issue to track the work on the new Camel website.
If you wish to contribute to building the new Camel website please look in the website component issues labelled with help-wanted.
Create a component for Kafka-Stream
Create a camel component for etcd v3
Beam
BeamSQL aggregation analytics functions
BeamSQL has a long list of of aggregation/aggregation analytics functionalities to support.
To begin with, you will need to support this syntax:
analytic_function_name ( [ argument_list ] )
OVER (
[ PARTITION BY partition_expression_list ]
[ ORDER BY expression [
] [, ...] ]
[ window_frame_clause ]
)
This will requires touch core components of BeamSQL:
1. SQL parser to support the syntax above.
2. SQL core to implement physical relational operator.
3. Distributed algorithms to implement a list of functions in a distributed manner.
4. Build benchmarks to measure performance of your implementation.
...