This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch feature/CAMEL-23789-docs-multi-dsl-cleanup in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2aea290bc45e6d26c234534902e2199738e3cdd7 Author: Claus Ibsen <[email protected]> AuthorDate: Fri Jun 19 08:59:35 2026 +0200 CAMEL-23789: Clean up component docs - remove boilerplate, use lambdas and string headers Co-Authored-By: Claude <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../src/main/docs/langchain4j-agent-component.adoc | 80 +++----- .../src/main/docs/aws2-ddb-component.adoc | 38 ++-- .../src/main/docs/aws2-ec2-component.adoc | 49 ++--- .../main/docs/aws2-kinesis-firehose-component.adoc | 25 +-- .../src/main/docs/aws2-lambda-component.adoc | 46 ++--- .../src/main/docs/aws2-mq-component.adoc | 34 ++-- .../src/main/docs/aws2-msk-component.adoc | 42 ++-- .../src/main/docs/bindy-dataformat.adoc | 10 +- .../src/main/docs/crypto-dataformat.adoc | 8 +- .../src/main/docs/cxfrs-component.adoc | 58 ++---- .../src/main/docs/cxf-component.adoc | 220 +++++++-------------- .../src/main/docs/dhis2-component.adoc | 218 +++++--------------- .../camel-file/src/main/docs/file-component.adoc | 4 +- .../src/main/docs/keycloak-component.adoc | 87 +++----- .../docs/kubernetes-deployments-component.adoc | 13 +- .../src/main/docs/kubernetes-hpa-component.adoc | 13 +- .../src/main/docs/kubernetes-job-component.adoc | 187 ++++++++---------- .../main/docs/kubernetes-namespaces-component.adoc | 13 +- .../src/main/docs/kubernetes-nodes-component.adoc | 13 +- ...rnetes-persistent-volumes-claims-component.adoc | 13 +- .../kubernetes-persistent-volumes-component.adoc | 13 +- .../src/main/docs/kubernetes-pods-component.adoc | 13 +- ...bernetes-replication-controllers-component.adoc | 13 +- .../docs/kubernetes-resources-quota-component.adoc | 13 +- .../kubernetes-service-accounts-component.adoc | 13 +- .../main/docs/kubernetes-services-component.adoc | 13 +- .../docs/openshift-build-configs-component.adoc | 13 +- .../src/main/docs/openshift-builds-component.adoc | 13 +- .../openshift-deploymentconfigs-component.adoc | 13 +- .../src/main/docs/metrics-component.adoc | 56 ------ .../src/main/docs/micrometer-observability.adoc | 9 +- .../src/main/docs/opentelemetry2.adoc | 9 +- .../camel-stax/src/main/docs/stax-component.adoc | 9 +- 33 files changed, 441 insertions(+), 930 deletions(-) diff --git a/components/camel-ai/camel-langchain4j-agent/src/main/docs/langchain4j-agent-component.adoc b/components/camel-ai/camel-langchain4j-agent/src/main/docs/langchain4j-agent-component.adoc index a8b368632ebb..3d7392424c3f 100644 --- a/components/camel-ai/camel-langchain4j-agent/src/main/docs/langchain4j-agent-component.adoc +++ b/components/camel-ai/camel-langchain4j-agent/src/main/docs/langchain4j-agent-component.adoc @@ -126,24 +126,17 @@ The langchain4j-agent component accepts a pre-built `Agent` or `ChatModel` bean ._Java-only: programmatic `ChatModel` bean registration with `OAuthHelper`_ [source,java] ---- -import org.apache.camel.support.OAuthHelper; +String token = OAuthHelper.resolveOAuthToken(getContext(), "azure"); -public class MyRouteBuilder extends RouteBuilder { - @Override - public void configure() throws Exception { - String token = OAuthHelper.resolveOAuthToken(getContext(), "azure"); - - ChatModel chatModel = OpenAiChatModel.builder() - .apiKey(token) - .modelName("gpt-4") - .build(); +ChatModel chatModel = OpenAiChatModel.builder() + .apiKey(token) + .modelName("gpt-4") + .build(); - getContext().getRegistry().bind("myChatModel", chatModel); +getContext().getRegistry().bind("myChatModel", chatModel); - from("direct:agent") - .to("langchain4j-agent:myAgent"); - } -} +from("direct:agent") + .to("langchain4j-agent:myAgent"); ---- NOTE: In Quarkus or Spring Boot, configure the ChatModel via the framework's own properties and dependency injection instead of programmatic bean registration. @@ -1785,46 +1778,31 @@ WordCountGuardrail custom = WordCountGuardrail.builder() ._Java-only: `RouteBuilder` class with `AgentConfiguration`, guardrails, memory, and `doTry`/`doCatch`_ [source,java] ---- -import org.apache.camel.component.langchain4j.agent.api.*; -import org.apache.camel.component.langchain4j.agent.api.guardrails.*; -import dev.langchain4j.model.openai.OpenAiChatModel; -import dev.langchain4j.memory.chat.MessageWindowChatMemory; - -public class SecureAgentRoute extends RouteBuilder { +ChatModel chatModel = OpenAiChatModel.builder() + .apiKey("{{openai.api.key}}") + .modelName("gpt-4o") + .build(); - @Override - public void configure() throws Exception { - // Create chat model - ChatModel chatModel = OpenAiChatModel.builder() - .apiKey("{{openai.api.key}}") - .modelName("gpt-4o") - .build(); +ChatMemoryProvider memoryProvider = memoryId -> + MessageWindowChatMemory.withMaxMessages(20); - // Create memory provider - ChatMemoryProvider memoryProvider = memoryId -> - MessageWindowChatMemory.withMaxMessages(20); +AgentConfiguration configuration = new AgentConfiguration() + .withChatModel(chatModel) + .withChatMemoryProvider(memoryProvider) + .withInputGuardrailClasses(Guardrails.defaultInputGuardrails()) + .withOutputGuardrailClasses(Guardrails.defaultOutputGuardrails()); - // Create secure agent configuration - AgentConfiguration configuration = new AgentConfiguration() - .withChatModel(chatModel) - .withChatMemoryProvider(memoryProvider) - .withInputGuardrailClasses(Guardrails.defaultInputGuardrails()) - .withOutputGuardrailClasses(Guardrails.defaultOutputGuardrails()); +Agent secureAgent = new AgentWithMemory(configuration); +getContext().getRegistry().bind("secureAgent", secureAgent); - Agent secureAgent = new AgentWithMemory(configuration); - getContext().getRegistry().bind("secureAgent", secureAgent); - - // Secure chat route with error handling - from("direct:chat") - .setHeader("CamelLangChain4jAgentMemoryId", simple("${header.userId}")) - .doTry() - .to("langchain4j-agent:chat?agent=#secureAgent") - .doCatch(dev.langchain4j.service.guardrail.GuardrailException.class) - .log("Guardrail blocked request: ${exception.message}") - .setBody(constant("Your message was blocked due to security policies.")) - .end(); - } -} +from("direct:chat") + .setHeader("CamelLangChain4jAgentMemoryId", simple("${header.userId}")) + .doTry() + .to("langchain4j-agent:chat?agent=#secureAgent") + .doCatch(dev.langchain4j.service.guardrail.GuardrailException.class) + .log("Guardrail blocked request: ${exception.message}") + .setBody(constant("Your message was blocked due to security policies.")) + .end(); ---- ==== Spring Boot Configuration Example diff --git a/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc b/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc index 873563420a16..4bdc1f4d89a9 100644 --- a/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc +++ b/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc @@ -78,25 +78,15 @@ URI: ._Java-only: programmatic `DynamoDbClient` configuration and registry binding_ [source,java] ---- -public class MyRouteBuilder extends RouteBuilder { +DynamoDbClient client = DynamoDbClient.builder() + .region(Region.AP_SOUTHEAST_2) + .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey))) + .build(); - private String accessKey = "myaccessKey"; - private String secretKey = "secretKey"; +getCamelContext().getRegistry().bind("client", client); - @Override - public void configure() throws Exception { - - DynamoDbClient client = DynamoDbClient.builder() - .region(Region.AP_SOUTHEAST_2) - .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey))) - .build(); - - getCamelContext().getRegistry().bind("client", client); - - from("direct:start") - .to("aws2-ddb://domainName?amazonDDBClient=#client"); - } -} +from("direct:start") + .to("aws2-ddb://domainName?amazonDDBClient=#client"); ---- The `#client` refers to a `DynamoDbClient` in the @@ -195,7 +185,7 @@ from("direct:get") exchange.getIn().setHeader("CamelAwsDdbAttributeNames", constant(List.of("table-key", "message"))); exchange.getIn().setHeader("CamelAwsDdbKey", keyMap); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client&consistentRead=true", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client&consistentRead=true"); ---- - DeleteItem: this operation will delete an entry from DynamoDB @@ -211,7 +201,7 @@ from("direct:delete") exchange.getIn().setHeader("CamelAwsDdbOperation", "DeleteItem"); exchange.getIn().setHeader("CamelAwsDdbKey", keyMap); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client&consistentRead=true", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client&consistentRead=true"); ---- @@ -229,7 +219,7 @@ from("direct:partiql") List.of(AttributeValue.builder().s("myKeyValue").build())); exchange.getIn().setHeader("CamelAwsDdbConsistentRead", true); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client"); ---- - BatchExecuteStatement (PartiQL batch): this operation runs multiple PartiQL statements in a batch @@ -248,7 +238,7 @@ from("direct:batchPartiql") .statement("INSERT INTO \"MyTable\" VALUE {'key': 'k2', 'data': 'v2'}") .build())); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client"); ---- - TransactWriteItems: this operation performs a transactional write across one or more tables @@ -268,7 +258,7 @@ from("direct:transactWrite") .put(Put.builder().tableName("MyTable").item(item).build()) .build())); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client"); ---- - TransactGetItems: this operation performs a transactional read across one or more tables @@ -287,7 +277,7 @@ from("direct:transactGet") .get(Get.builder().tableName("MyTable").key(key).build()) .build())); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client"); ---- - BatchWriteItems: this operation puts or deletes multiple items in one or more tables in a single batch @@ -310,7 +300,7 @@ from("direct:batchWrite") exchange.getIn().setHeader("CamelAwsDdbOperation", "BatchWriteItems"); exchange.getIn().setHeader("CamelAwsDdbBatchWriteItems", requestItems); }) - .toF("aws2-ddb://%s?amazonDDBClient=#client", tableName); + .to("aws2-ddb://" + tableName + "?amazonDDBClient=#client"); ---- diff --git a/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc b/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc index 063d41ee45ec..a4323cdb1b91 100644 --- a/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc +++ b/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc @@ -96,10 +96,10 @@ Java:: [source,java] ---- from("direct:createAndRun") - .setHeader(EC2Constants.IMAGE_ID, constant("ami-fd65ba94")) - .setHeader(EC2Constants.INSTANCE_TYPE, constant(InstanceType.T2_MICRO)) - .setHeader(EC2Constants.INSTANCE_MIN_COUNT, constant("1")) - .setHeader(EC2Constants.INSTANCE_MAX_COUNT, constant("1")) + .setHeader("CamelAwsEC2ImageId", constant("ami-fd65ba94")) + .setHeader("CamelAwsEC2InstanceType", constant(InstanceType.T2_MICRO)) + .setHeader("CamelAwsEC2InstanceMinCount", constant("1")) + .setHeader("CamelAwsEC2InstanceMaxCount", constant("1")) .to("aws2-ec2://TestDomain?accessKey=xxxx&secretKey=xxxx&operation=createAndRunInstances"); ---- @@ -156,52 +156,37 @@ YAML:: - startInstances: this operation will start a list of EC2 instances -._Java-only: using a Processor to set the instance IDs collection_ +._Java-only: sets a collection header for instance IDs_ [source,java] ---- from("direct:start") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Collection<String> l = new ArrayList<>(); - l.add("myinstance"); - exchange.getIn().setHeader(AWS2EC2Constants.INSTANCES_IDS, l); - } - }) + .process(exchange -> { + exchange.getIn().setHeader("CamelAwsEC2InstancesIds", List.of("myinstance")); + }) .to("aws2-ec2://TestDomain?accessKey=xxxx&secretKey=xxxx&operation=startInstances"); ---- - stopInstances: this operation will stop a list of EC2 instances -._Java-only: using a Processor to set the instance IDs collection_ +._Java-only: sets a collection header for instance IDs_ [source,java] ---- from("direct:stop") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Collection<String> l = new ArrayList<>(); - l.add("myinstance"); - exchange.getIn().setHeader(AWS2EC2Constants.INSTANCES_IDS, l); - } - }) + .process(exchange -> { + exchange.getIn().setHeader("CamelAwsEC2InstancesIds", List.of("myinstance")); + }) .to("aws2-ec2://TestDomain?accessKey=xxxx&secretKey=xxxx&operation=stopInstances"); ---- - terminateInstances: this operation will terminate a list of EC2 instances -._Java-only: using a Processor to set the instance IDs collection_ +._Java-only: sets a collection header for instance IDs_ [source,java] ---- -from("direct:stop") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Collection<String> l = new ArrayList<>(); - l.add("myinstance"); - exchange.getIn().setHeader(AWS2EC2Constants.INSTANCES_IDS, l); - } - }) +from("direct:terminate") + .process(exchange -> { + exchange.getIn().setHeader("CamelAwsEC2InstancesIds", List.of("myinstance")); + }) .to("aws2-ec2://TestDomain?accessKey=xxxx&secretKey=xxxx&operation=terminateInstances"); ---- diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc index 4a53db61ca97..1b4af071fb04 100644 --- a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc +++ b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc @@ -150,25 +150,16 @@ Camel-AWS s3 component provides the following operation on the producer side: You can send an iterable of Kinesis Record (as the following example shows), or you can send directly a PutRecordBatchRequest POJO instance in the body. -._Java-only: uses ProducerTemplate, inline Processor, and AWS SDK builders_ +._Java-only: uses AWS SDK `Record` builders_ [source,java] ---- - @Test - public void testFirehoseBatchRouting() throws Exception { - Exchange exchange = template.send("direct:start", ExchangePattern.InOnly, new Processor() { - public void process(Exchange exchange) throws Exception { - List<Record> recs = new ArrayList<Record>(); - Record rec = Record.builder().data(SdkBytes.fromString("Test1", Charset.defaultCharset())).build(); - Record rec1 = Record.builder().data(SdkBytes.fromString("Test2", Charset.defaultCharset())).build(); - recs.add(rec); - recs.add(rec1); - exchange.getIn().setBody(recs); - } - }); - assertNotNull(exchange.getIn().getBody()); - } - -from("direct:start").to("aws2-kinesis-firehose://cc?amazonKinesisFirehoseClient=#FirehoseClient&operation=sendBatchRecord"); +from("direct:start") + .process(exchange -> { + exchange.getIn().setBody(List.of( + Record.builder().data(SdkBytes.fromString("Test1", Charset.defaultCharset())).build(), + Record.builder().data(SdkBytes.fromString("Test2", Charset.defaultCharset())).build())); + }) + .to("aws2-kinesis-firehose://cc?amazonKinesisFirehoseClient=#FirehoseClient&operation=sendBatchRecord"); ---- In the deliveryStream you'll find "Test1Test2". diff --git a/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc b/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc index 026d897d5ebf..856c537b9908 100644 --- a/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc +++ b/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc @@ -159,24 +159,20 @@ and by sending [source,java] ---- - template.send("direct:createFunction", ExchangePattern.InOut, new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - exchange.getIn().setHeader(Lambda2Constants.RUNTIME, "nodejs6.10"); - exchange.getIn().setHeader(Lambda2Constants.HANDLER, "GetHelloWithName.handler"); - exchange.getIn().setHeader(Lambda2Constants.DESCRIPTION, "Hello with node.js on Lambda"); - exchange.getIn().setHeader(Lambda2Constants.ROLE, - "arn:aws:iam::643534317684:role/lambda-execution-role"); - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File( - classLoader - .getResource("org/apache/camel/component/aws2/lambda/function/node/GetHelloWithName.zip") - .getFile()); - FileInputStream inputStream = new FileInputStream(file); - exchange.getIn().setBody(inputStream); - } - }); +template.send("direct:createFunction", ExchangePattern.InOut, exchange -> { + exchange.getIn().setHeader("CamelAwsLambdaRuntime", "nodejs6.10"); + exchange.getIn().setHeader("CamelAwsLambdaHandler", "GetHelloWithName.handler"); + exchange.getIn().setHeader("CamelAwsLambdaDescription", "Hello with node.js on Lambda"); + exchange.getIn().setHeader("CamelAwsLambdaRole", + "arn:aws:iam::643534317684:role/lambda-execution-role"); + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File( + classLoader + .getResource("org/apache/camel/component/aws2/lambda/function/node/GetHelloWithName.zip") + .getFile()); + exchange.getIn().setBody(new FileInputStream(file)); +}); ---- === Function URL Operations @@ -816,13 +812,13 @@ You can also configure CORS settings for function URLs: from("direct:createFunctionUrlWithCors") .process(exchange -> { exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlAuthType", "NONE"); - exchange.getIn().setHeader(Lambda2Constants.FUNCTION_URL_CORS_ALLOW_ORIGINS, - Arrays.asList("https://example.com")); - exchange.getIn().setHeader(Lambda2Constants.FUNCTION_URL_CORS_ALLOW_METHODS, - Arrays.asList("GET", "POST")); - exchange.getIn().setHeader(Lambda2Constants.FUNCTION_URL_CORS_ALLOW_HEADERS, - Arrays.asList("Content-Type", "Authorization")); - exchange.getIn().setHeader(Lambda2Constants.FUNCTION_URL_CORS_MAX_AGE, 3600); + exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsAllowOrigins", + List.of("https://example.com")); + exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsAllowMethods", + List.of("GET", "POST")); + exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsAllowHeaders", + List.of("Content-Type", "Authorization")); + exchange.getIn().setHeader("CamelAwsLambdaFunctionUrlCorsMaxAge", 3600); }) .to("aws2-lambda://myFunction?operation=createFunctionUrlConfig") .to("mock:result"); diff --git a/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc b/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc index 705f44c56652..07a425744767 100644 --- a/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc +++ b/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc @@ -123,29 +123,21 @@ YAML:: - createBroker: this operation will create an MQ Broker in AWS -._Java-only: uses inline Processor, Java constants, and AWS SDK builders_ +._Java-only: uses AWS SDK enum types and `User` builder_ [source,java] ---- from("direct:createBroker") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - exchange.getIn().setHeader(MQ2Constants.BROKER_NAME, "test"); - exchange.getIn().setHeader(MQ2Constants.BROKER_DEPLOYMENT_MODE, DeploymentMode.SINGLE_INSTANCE); - exchange.getIn().setHeader(MQ2Constants.BROKER_INSTANCE_TYPE, "mq.t2.micro"); - exchange.getIn().setHeader(MQ2Constants.BROKER_ENGINE, EngineType.ACTIVEMQ.name()); - exchange.getIn().setHeader(MQ2Constants.BROKER_ENGINE_VERSION, "5.15.6"); - exchange.getIn().setHeader(MQ2Constants.BROKER_PUBLICLY_ACCESSIBLE, false); - List<User> users = new ArrayList<>(); - User.Builder user = User.builder(); - user.username("camel"); - user.password("camelpwd"); - users.add(user.build()); - exchange.getIn().setHeader(MQ2Constants.BROKER_USERS, users); - - } + .process(exchange -> { + exchange.getIn().setHeader("CamelAwsMQBrokerName", "test"); + exchange.getIn().setHeader("CamelAwsMQBrokerDeploymentMode", DeploymentMode.SINGLE_INSTANCE); + exchange.getIn().setHeader("CamelAwsMQBrokerInstanceType", "mq.t2.micro"); + exchange.getIn().setHeader("CamelAwsMQBrokerEngine", EngineType.ACTIVEMQ.name()); + exchange.getIn().setHeader("CamelAwsMQBrokerEngineVersion", "5.15.6"); + exchange.getIn().setHeader("CamelAwsMQBrokerPubliclyAccessible", false); + exchange.getIn().setHeader("CamelAwsMQBrokerUsers", + List.of(User.builder().username("camel").password("camelpwd").build())); }) - .to("aws2-mq://test?amazonMqClient=#amazonMqClient&operation=createBroker") + .to("aws2-mq://test?amazonMqClient=#amazonMqClient&operation=createBroker"); ---- - deleteBroker: this operation will delete an MQ Broker in AWS @@ -157,7 +149,7 @@ Java:: [source,java] ---- from("direct:deleteBroker") - .setHeader(MQ2Constants.BROKER_ID, constant("123")) + .setHeader("CamelAwsMQBrokerID", constant("123")) .to("aws2-mq://test?amazonMqClient=#amazonMqClient&operation=deleteBroker"); ---- @@ -202,7 +194,7 @@ Java:: [source,java] ---- from("direct:rebootBroker") - .setHeader(MQ2Constants.BROKER_ID, constant("123")) + .setHeader("CamelAwsMQBrokerID", constant("123")) .to("aws2-mq://test?amazonMqClient=#amazonMqClient&operation=rebootBroker"); ---- diff --git a/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc b/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc index a173de31a6cd..312d6f096e46 100644 --- a/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc +++ b/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc @@ -115,21 +115,18 @@ YAML:: - createCluster: this operation will create an MSK Cluster in AWS -._Java-only: creating an MSK Cluster with a Processor and MSK2Constants_ +._Java-only: uses AWS SDK `BrokerNodeGroupInfo` builder_ [source,java] ---- from("direct:createCluster") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - exchange.getIn().setHeader(MSK2Constants.CLUSTER_NAME, "test-kafka"); - exchange.getIn().setHeader(MSK2Constants.CLUSTER_KAFKA_VERSION, "2.1.1"); - exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_NUMBER, 2); - BrokerNodeGroupInfo groupInfo = BrokerNodeGroupInfo.builder().build(); - exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_GROUP_INFO, groupInfo); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelAwsMSKClusterName", "test-kafka"); + exchange.getIn().setHeader("CamelAwsMSKClusterKafkaVersion", "2.1.1"); + exchange.getIn().setHeader("CamelAwsMSKBrokerNodesNumber", 2); + exchange.getIn().setHeader("CamelAwsMSKBrokerNodesGroupInfo", + BrokerNodeGroupInfo.builder().build()); }) - .to("aws2-msk://test?mskClient=#amazonMskClient&operation=createCluster") + .to("aws2-msk://test?mskClient=#amazonMskClient&operation=createCluster"); ---- - deleteCluster: this operation will delete an MSK Cluster in AWS @@ -141,7 +138,7 @@ Java:: [source,java] ---- from("direct:deleteCluster") - .setHeader(MSK2Constants.CLUSTER_ARN, constant("test-kafka")) + .setHeader("CamelAwsMSKClusterArn", constant("test-kafka")) .to("aws2-msk://test?mskClient=#amazonMskClient&operation=deleteCluster"); ---- @@ -177,21 +174,18 @@ YAML:: ---- ==== -._Java-only: deleting an MSK Cluster with a Processor and MSK2Constants_ +._Java-only: uses AWS SDK `BrokerNodeGroupInfo` builder_ [source,java] ---- -from("direct:createCluster") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - exchange.getIn().setHeader(MSK2Constants.CLUSTER_NAME, "test-kafka"); - exchange.getIn().setHeader(MSK2Constants.CLUSTER_KAFKA_VERSION, "2.1.1"); - exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_NUMBER, 2); - BrokerNodeGroupInfo groupInfo = BrokerNodeGroupInfo.builder().build(); - exchange.getIn().setHeader(MSK2Constants.BROKER_NODES_GROUP_INFO, groupInfo); - } +from("direct:deleteCluster") + .process(exchange -> { + exchange.getIn().setHeader("CamelAwsMSKClusterName", "test-kafka"); + exchange.getIn().setHeader("CamelAwsMSKClusterKafkaVersion", "2.1.1"); + exchange.getIn().setHeader("CamelAwsMSKBrokerNodesNumber", 2); + exchange.getIn().setHeader("CamelAwsMSKBrokerNodesGroupInfo", + BrokerNodeGroupInfo.builder().build()); }) - .to("aws2-msk://test?mskClient=#amazonMskClient&operation=deleteCluster") + .to("aws2-msk://test?mskClient=#amazonMskClient&operation=deleteCluster"); ---- === Using a POJO as body diff --git a/components/camel-bindy/src/main/docs/bindy-dataformat.adoc b/components/camel-bindy/src/main/docs/bindy-dataformat.adoc index 6a67f8cd2d98..1451bfccee61 100644 --- a/components/camel-bindy/src/main/docs/bindy-dataformat.adoc +++ b/components/camel-bindy/src/main/docs/bindy-dataformat.adoc @@ -1937,12 +1937,10 @@ the following: from("file://inbox") .unmarshal(bindy) .split(body()) - .process(new Processor() { - public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); - Map<String, Object> modelMap = (Map<String, Object>) in.getBody(); - in.setBody(modelMap.get(Order.class.getCanonicalName())); - } + .process(exchange -> { + Message in = exchange.getIn(); + Map<String, Object> modelMap = (Map<String, Object>) in.getBody(); + in.setBody(modelMap.get(Order.class.getCanonicalName())); }) .to("direct:handleSingleOrder") .end(); diff --git a/components/camel-crypto/src/main/docs/crypto-dataformat.adoc b/components/camel-crypto/src/main/docs/crypto-dataformat.adoc index acb70b2250fa..eb40dc1e856e 100644 --- a/components/camel-crypto/src/main/docs/crypto-dataformat.adoc +++ b/components/camel-crypto/src/main/docs/crypto-dataformat.adoc @@ -254,11 +254,9 @@ from("direct:key-in-header-encrypt") .removeHeader(CryptoDataFormat.KEY) .to("mock:encrypted"); -from("direct:key-in-header-decrypt").unmarshal(cryptoFormat).process(new Processor() { - public void process(Exchange exchange) throws Exception { - exchange.getIn().getHeaders().remove(CryptoDataFormat.KEY); - exchange.getMessage().copyFrom(exchange.getIn()); - } +from("direct:key-in-header-decrypt").unmarshal(cryptoFormat).process(exchange -> { + exchange.getIn().getHeaders().remove(CryptoDataFormat.KEY); + exchange.getMessage().copyFrom(exchange.getIn()); }).to("mock:unencrypted"); ---- diff --git a/components/camel-cxf/camel-cxf-rest/src/main/docs/cxfrs-component.adoc b/components/camel-cxf/camel-cxf-rest/src/main/docs/cxfrs-component.adoc index 66f18fd290d4..43dcd4be2a53 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/docs/cxfrs-component.adoc +++ b/components/camel-cxf/camel-cxf-rest/src/main/docs/cxfrs-component.adoc @@ -394,22 +394,14 @@ Here is an example: ._Java-only: Java test API (ProducerTemplate with inline Processor)_ [source,java] ---- -Exchange exchange = template.send("direct://proxy", new Processor() { - public void process(Exchange exchange) throws Exception { - exchange.setPattern(ExchangePattern.InOut); - Message inMessage = exchange.getIn(); - // set the operation name - inMessage.setHeader(CxfConstants.OPERATION_NAME, "getCustomer"); - // using the proxy client API - inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.FALSE); - // set a customer header - inMessage.setHeader("key", "value"); - // set up the accepted content type - inMessage.setHeader(CxfConstants.ACCEPT_CONTENT_TYPE, "application/json"); - // set the parameters, if you just have one parameter, - // camel will put this object into an Object[] itself - inMessage.setBody("123"); - } +Exchange exchange = template.send("direct://proxy", ex -> { + ex.setPattern(ExchangePattern.InOut); + Message inMessage = ex.getIn(); + inMessage.setHeader("CamelCxfOperationName", "getCustomer"); + inMessage.setHeader("CamelCxfRsUsingHttpAPI", Boolean.FALSE); + inMessage.setHeader("key", "value"); + inMessage.setHeader("Accept", "application/json"); + inMessage.setBody("123"); }); // get the response message @@ -431,31 +423,23 @@ and the https://www.javadoc.io/doc/org.apache.camel/camel-api/current/org/apache/camel/Exchange.html#HTTP_METHOD[HTTP_METHOD] and let the producer use the http centric client API by using the URI option *httpClientAPI* or by setting the message header -https://www.javadoc.io/doc/org.apache.camel/camel-cxf-transport/current/org/apache/camel/component/cxf/common/message/CxfConstants.html#CAMEL_CXF_RS_USING_HTTP_API[CxfConstants.CAMEL_CXF_RS_USING_HTTP_API]. +`CamelCxfRsUsingHttpAPI`. You can turn the response object to the type class specified with the message -header https://www.javadoc.io/doc/org.apache.camel/camel-cxf-transport/current/org/apache/camel/component/cxf/common/message/CxfConstants.html#CAMEL_CXF_RS_RESPONSE_CLASS[CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS]. +header `CamelCxfRsResponseClass`. ._Java-only: Java test API (ProducerTemplate with inline Processor)_ [source,java] ---- -Exchange exchange = template.send("direct://http", new Processor() { - public void process(Exchange exchange) throws Exception { - exchange.setPattern(ExchangePattern.InOut) - Message inMessage = exchange.getIn(); - // using the http central client API - inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE); - // set the Http method - inMessage.setHeader(Exchange.HTTP_METHOD, "GET"); - // set the relative path - inMessage.setHeader(Exchange.HTTP_PATH, "/customerservice/customers/123"); - // Specify the response class, cxfrs will use InputStream as the response object type - inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, Customer.class); - // set a customer header - inMessage.setHeader("key", "value"); - // since we use the Get method, so we don't need to set the message body - inMessage.setBody(null); - } +Exchange exchange = template.send("direct://http", ex -> { + ex.setPattern(ExchangePattern.InOut); + Message inMessage = ex.getIn(); + inMessage.setHeader("CamelCxfRsUsingHttpAPI", Boolean.TRUE); + inMessage.setHeader(Exchange.HTTP_METHOD, "GET"); + inMessage.setHeader(Exchange.HTTP_PATH, "/customerservice/customers/123"); + inMessage.setHeader("CamelCxfRsResponseClass", Customer.class); + inMessage.setHeader("key", "value"); + inMessage.setBody(null); }); ---- We also support to specify the query parameters from @@ -467,7 +451,7 @@ cxfrs URI for the CXFRS http centric client. Exchange exchange = template.send("cxfrs://http://localhost:9003/testQuery?httpClientAPI=true&q1=12&q2=13" ---- To support the Dynamical routing, you can override the URI's query -parameters by using the https://www.javadoc.io/doc/org.apache.camel/camel-cxf-transport/current/org/apache/camel/component/cxf/common/message/CxfConstants.html#CAMEL_CXF_RS_QUERY_MAP[CxfConstants.CAMEL_CXF_RS_QUERY_MAP] +parameters by using the `CamelCxfRsQueryMap` header to set the parameter map for it. ._Java-only: Java collection API_ @@ -476,7 +460,7 @@ header to set the parameter map for it. Map<String, String> queryMap = new LinkedHashMap<>(); queryMap.put("q1", "new"); queryMap.put("q2", "world"); -inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_QUERY_MAP, queryMap); +inMessage.setHeader("CamelCxfRsQueryMap", queryMap); ---- diff --git a/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc b/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc index 2b5dec174b85..44f0d7ecf7f0 100644 --- a/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc +++ b/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc @@ -603,7 +603,7 @@ and setDefaultBus properties from spring configuration file. The Camel CXF endpoint consumer POJO data format is based on the http://cxf.apache.org/docs/invokers.html[CXF invoker], so the message header has a property with the name of -`CxfConstants.OPERATION_NAME` and the message body is a list of the SEI +`CamelCxfOperationName` and the message body is a list of the SEI operation parameters. Having simple java web service interface: @@ -631,7 +631,7 @@ We can then create the simplest CXF service (note we didn't specify the `POJO` m ---- from("cxf:textServiceResponseFromRoute?serviceClass=org.apache.camel.component.cxf.soap.server.TextService&address=/text-route") .process(exchange -> { - String operation = (String) exchange.getIn().getHeader(CxfConstants.OPERATION_NAME); + String operation = (String) exchange.getIn().getHeader("CamelCxfOperationName"); String inputArg = ((MessageContentsList) exchange.getIn().getBody()).get(0).toString(); String result = null; if (operation.equals("upperCase")) { @@ -669,7 +669,7 @@ final List<String> params = new ArrayList<>(); // Prepare the request message for the camel-cxf procedure params.add(TEST_MESSAGE); senderExchange.getIn().setBody(params); -senderExchange.getIn().setHeader(CxfConstants.OPERATION_NAME, ECHO_OPERATION); +senderExchange.getIn().setHeader("CamelCxfOperationName", ECHO_OPERATION); Exchange exchange = template.send("direct:EndpointA", senderExchange); @@ -698,42 +698,30 @@ See https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soa ._Java-only: consuming and processing CXF PAYLOAD with `CxfPayload` API_ [source,java] ---- -protected RouteBuilder createRouteBuilder() { - return new RouteBuilder() { - public void configure() { - from(simpleEndpointURI + "&dataFormat=PAYLOAD").to("log:info").process(new Processor() { - @SuppressWarnings("unchecked") - public void process(final Exchange exchange) throws Exception { - CxfPayload<SoapHeader> requestPayload = exchange.getIn().getBody(CxfPayload.class); - List<Source> inElements = requestPayload.getBodySources(); - List<Source> outElements = new ArrayList<>(); - // You can use a customer toStringConverter to turn a CxfPayLoad message into String as you want - String request = exchange.getIn().getBody(String.class); - XmlConverter converter = new XmlConverter(); - String documentString = ECHO_RESPONSE; - - Element in = new XmlConverter().toDOMElement(inElements.get(0)); - // Check the element namespace - if (!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) { - throw new IllegalArgumentException("Wrong element namespace"); - } - if (in.getLocalName().equals("echoBoolean")) { - documentString = ECHO_BOOLEAN_RESPONSE; - checkRequest("ECHO_BOOLEAN_REQUEST", request); - } else { - documentString = ECHO_RESPONSE; - checkRequest("ECHO_REQUEST", request); - } - Document outDocument = converter.toDOMDocument(documentString, exchange); - outElements.add(new DOMSource(outDocument.getDocumentElement())); - // set the payload header with null - CxfPayload<SoapHeader> responsePayload = new CxfPayload<>(null, outElements, null); - exchange.getMessage().setBody(responsePayload); - } - }); - } - }; -} +from(simpleEndpointURI + "&dataFormat=PAYLOAD").to("log:info").process(exchange -> { + CxfPayload<SoapHeader> requestPayload = exchange.getIn().getBody(CxfPayload.class); + List<Source> inElements = requestPayload.getBodySources(); + List<Source> outElements = new ArrayList<>(); + String request = exchange.getIn().getBody(String.class); + XmlConverter converter = new XmlConverter(); + String documentString = ECHO_RESPONSE; + + Element in = new XmlConverter().toDOMElement(inElements.get(0)); + if (!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) { + throw new IllegalArgumentException("Wrong element namespace"); + } + if (in.getLocalName().equals("echoBoolean")) { + documentString = ECHO_BOOLEAN_RESPONSE; + checkRequest("ECHO_BOOLEAN_REQUEST", request); + } else { + documentString = ECHO_RESPONSE; + checkRequest("ECHO_REQUEST", request); + } + Document outDocument = converter.toDOMDocument(documentString, exchange); + outElements.add(new DOMSource(outDocument.getDocumentElement())); + CxfPayload<SoapHeader> responsePayload = new CxfPayload<>(null, outElements, null); + exchange.getMessage().setBody(responsePayload); +}); ---- === How to get and set SOAP headers in POJO mode @@ -846,33 +834,27 @@ For example, see https://github.com/apache/camel/blob/main/components/camel-cxf/ ._Java-only: accessing SOAP headers from `CxfPayload` in PAYLOAD mode_ [source,java] ---- -from(getRouterEndpointURI()).process(new Processor() { - @SuppressWarnings("unchecked") - public void process(Exchange exchange) throws Exception { - CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class); - List<Source> elements = payload.getBodySources(); - assertNotNull(elements, "We should get the elements here"); - assertEquals(1, elements.size(), "Get the wrong elements size"); - - Element el = new XmlConverter().toDOMElement(elements.get(0)); - elements.set(0, new DOMSource(el)); - assertEquals("http://camel.apache.org/pizza/types", - el.getNamespaceURI(), "Get the wrong namespace URI"); - - List<SoapHeader> headers = payload.getHeaders(); - assertNotNull(headers, "We should get the headers here"); - assertEquals(1, headers.size(), "Get the wrong headers size"); - assertEquals("http://camel.apache.org/pizza/types", - ((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI"); - // alternatively, you can also get the SOAP header via the camel header: - headers = exchange.getIn().getHeader(Header.HEADER_LIST, List.class); - assertNotNull(headers, "We should get the headers here"); - assertEquals(1, headers.size(), "Get the wrong headers size"); - assertEquals("http://camel.apache.org/pizza/types", - ((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI"); - - } - +from(getRouterEndpointURI()).process(exchange -> { + CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class); + List<Source> elements = payload.getBodySources(); + assertNotNull(elements, "We should get the elements here"); + assertEquals(1, elements.size(), "Get the wrong elements size"); + + Element el = new XmlConverter().toDOMElement(elements.get(0)); + elements.set(0, new DOMSource(el)); + assertEquals("http://camel.apache.org/pizza/types", + el.getNamespaceURI(), "Get the wrong namespace URI"); + + List<SoapHeader> headers = payload.getHeaders(); + assertNotNull(headers, "We should get the headers here"); + assertEquals(1, headers.size(), "Get the wrong headers size"); + assertEquals("http://camel.apache.org/pizza/types", + ((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI"); + headers = exchange.getIn().getHeader(Header.HEADER_LIST, List.class); + assertNotNull(headers, "We should get the headers here"); + assertEquals(1, headers.size(), "Get the wrong headers size"); + assertEquals("http://camel.apache.org/pizza/types", + ((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI"); }) .to(getServiceEndpointURI()); ---- @@ -949,17 +931,14 @@ response context with the following code: ._Java-only: setting request context and reading response context via `ProducerTemplate`_ [source,java] ---- -CxfExchange exchange = (CxfExchange)template.send(getJaxwsEndpointUri(), new Processor() { - public void process(final Exchange exchange) { - final List<String> params = new ArrayList<String>(); - params.add(TEST_MESSAGE); - // Set the request context to the inMessage - Map<String, Object> requestContext = new HashMap<String, Object>(); - requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, JAXWS_SERVER_ADDRESS); - exchange.getIn().setBody(params); - exchange.getIn().setHeader(Client.REQUEST_CONTEXT , requestContext); - exchange.getIn().setHeader(CxfConstants.OPERATION_NAME, GREET_ME_OPERATION); - } +CxfExchange exchange = (CxfExchange)template.send(getJaxwsEndpointUri(), ex -> { + final List<String> params = new ArrayList<String>(); + params.add(TEST_MESSAGE); + Map<String, Object> requestContext = new HashMap<String, Object>(); + requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, JAXWS_SERVER_ADDRESS); + ex.getIn().setBody(params); + ex.getIn().setHeader(Client.REQUEST_CONTEXT, requestContext); + ex.getIn().setHeader("CamelCxfOperationName", GREET_ME_OPERATION); }); org.apache.camel.Message out = exchange.getMessage(); // The output is an object array, the first element of the array is the return value @@ -997,85 +976,22 @@ SwA is the default (same as setting the CXF endpoint property `mtomEnabled` to ` To enable MTOM, set the CXF endpoint property `mtomEnabled` to `true`. -[tabs] -==== -Java (Quarkus):: -+ -[source,java] ----- -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.cxf.common.DataFormat; -import org.apache.camel.component.cxf.jaxws.CxfEndpoint; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.context.SessionScoped; -import jakarta.enterprise.inject.Produces; -import jakarta.inject.Named; - -@ApplicationScoped -public class CxfSoapMtomRoutes extends RouteBuilder { - - @Override - public void configure() { - from("cxf:bean:mtomPayloadModeEndpoint") - .process( exchange -> { ... }); - } - - @Produces - @SessionScoped - @Named - CxfEndpoint mtomPayloadModeEndpoint() { - final CxfEndpoint result = new CxfEndpoint(); - result.setServiceClass(MyMtomService.class); - result.setDataFormat(DataFormat.PAYLOAD); - result.setMtomEnabled(true); - result.setAddress("/mtom/hello"); - return result; - } -} ----- - -XML (Spring):: -+ -[source,xml] ----- -<cxf:cxfEndpoint id="mtomPayloadModeEndpoint" address="http://localhost:${CXFTestSupport.port1}/CxfMtomRouterPayloadModeTest/mtom" - wsdlURL="mtom.wsdl" - serviceName="ns:MyMtomService" - endpointName="ns:MyMtomPort" - xmlns:ns="http://apache.org/camel/cxf/mtom_feature"> - - <cxf:properties> - <!-- enable mtom by setting this property to true --> - <entry key="mtom-enabled" value="true"/> - <!-- set the Camel CXF endpoint data format to PAYLOAD mode --> - <entry key="dataFormat" value="PAYLOAD"/> - </cxf:properties> -</cxf:cxfEndpoint> ----- -==== - You can produce a Camel message with attachment to send to a CXF endpoint in Payload mode. ._Java-only: sending and receiving MTOM attachments via `ProducerTemplate`_ [source,java] ---- -Exchange exchange = context.createProducerTemplate().send("direct:testEndpoint", new Processor() { - - public void process(Exchange exchange) throws Exception { - exchange.setPattern(ExchangePattern.InOut); - List<Source> elements = new ArrayList<Source>(); - elements.add(new DOMSource(DOMUtils.readXml(new StringReader(MtomTestHelper.REQ_MESSAGE)).getDocumentElement())); - CxfPayload<SoapHeader> body = new CxfPayload<SoapHeader>(new ArrayList<SoapHeader>(), - elements, null); - exchange.getIn().setBody(body); - exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_PHOTO_CID, - new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream"))); - - exchange.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_IMAGE_CID, - new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg"))); - - } - +Exchange exchange = context.createProducerTemplate().send("direct:testEndpoint", ex -> { + ex.setPattern(ExchangePattern.InOut); + List<Source> elements = new ArrayList<Source>(); + elements.add(new DOMSource(DOMUtils.readXml(new StringReader(MtomTestHelper.REQ_MESSAGE)).getDocumentElement())); + CxfPayload<SoapHeader> body = new CxfPayload<SoapHeader>(new ArrayList<SoapHeader>(), + elements, null); + ex.getIn().setBody(body); + ex.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_PHOTO_CID, + new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream"))); + ex.getIn(AttachmentMessage.class).addAttachment(MtomTestHelper.REQ_IMAGE_CID, + new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg"))); }); // process response @@ -1180,7 +1096,7 @@ Here is the code snippet: [source,java] ---- org.apache.cxf.message.Message cxfMessage = exchange.getIn().getHeader( - CxfConstants.CAMEL_CXF_MESSAGE, org.apache.cxf.message.Message.class); + "CamelCxfMessage", org.apache.cxf.message.Message.class); ServletRequest request = (ServletRequest) cxfMessage.get("HTTP.REQUEST"); String remoteAddress = request.getRemoteAddr(); ---- diff --git a/components/camel-dhis2/camel-dhis2-component/src/main/docs/dhis2-component.adoc b/components/camel-dhis2/camel-dhis2-component/src/main/docs/dhis2-component.adoc index 632b670cd3c2..6ef6f2729c67 100644 --- a/components/camel-dhis2/camel-dhis2-component/src/main/docs/dhis2-component.adoc +++ b/components/camel-dhis2/camel-dhis2-component/src/main/docs/dhis2-component.adoc @@ -59,19 +59,10 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:getResource") - .to("dhis2:get/resource?path=organisationUnits/O6uvpzGd5pu&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .unmarshal() - .json(org.hisp.dhis.api.model.v40_2_2.OrganisationUnit.class); - } -} +from("direct:getResource") + .to("dhis2:get/resource?path=organisationUnits/O6uvpzGd5pu&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .unmarshal() + .json(org.hisp.dhis.api.model.v40_2_2.OrganisationUnit.class); ---- YAML:: @@ -103,19 +94,10 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:getCollection") - .to("dhis2:get/collection?path=organisationUnits&arrayName=organisationUnits&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .split().body() - .convertBodyTo(org.hisp.dhis.api.model.v40_2_2.OrganisationUnit.class).log("${body}"); - } -} +from("direct:getCollection") + .to("dhis2:get/collection?path=organisationUnits&arrayName=organisationUnits&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .split().body() + .convertBodyTo(org.hisp.dhis.api.model.v40_2_2.OrganisationUnit.class).log("${body}"); ---- YAML:: @@ -154,19 +136,10 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:getCollection") - .to("dhis2:get/collection?path=organisationUnits&arrayName=organisationUnits&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .split().body() - .convertBodyTo(org.hisp.dhis.api.model.v40_2_2.OrganisationUnit.class).log("${body}"); - } -} +from("direct:getCollection") + .to("dhis2:get/collection?path=organisationUnits&arrayName=organisationUnits&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .split().body() + .convertBodyTo(org.hisp.dhis.api.model.v40_2_2.OrganisationUnit.class).log("${body}"); ---- YAML:: @@ -206,20 +179,11 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:getCollection") - .to("dhis2://get/collection?path=users&filter=phoneNumber:!null:&arrayName=users&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .split().body() - .convertBodyTo(org.hisp.dhis.api.model.v40_2_2.User.class) - .log("${body}"); - } -} +from("direct:getCollection") + .to("dhis2://get/collection?path=users&filter=phoneNumber:!null:&arrayName=users&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .split().body() + .convertBodyTo(org.hisp.dhis.api.model.v40_2_2.User.class) + .log("${body}"); ---- YAML:: @@ -259,38 +223,19 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.LoggingLevel; -import org.apache.camel.builder.RouteBuilder; -import org.hisp.dhis.api.model.v40_2_2.DataValueSet; -import org.hisp.dhis.api.model.v40_2_2.DataValue; -import org.hisp.dhis.integration.sdk.support.period.PeriodBuilder; - -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Date; -import java.util.List; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:postResource") - .setBody(exchange -> new DataValueSet().withCompleteDate( - ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_LOCAL_DATE)) - .withOrgUnit("O6uvpzGd5pu") - .withDataSet("lyLU2wR22tC").withPeriod(PeriodBuilder.monthOf(new Date(), -1)) - .withDataValues( - List.of(new DataValue().withDataElement("aIJZ2d2QgVV").withValue("20")))) - .to("dhis2://post/resource?path=dataValueSets&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .unmarshal().json() - .choice() - .when().groovy("body.status != 'OK'") - .log(LoggingLevel.ERROR, "Import error from DHIS2 while saving data value set => ${body}") - .end(); - } -} +from("direct:postResource") + .setBody(exchange -> new DataValueSet().withCompleteDate( + ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_LOCAL_DATE)) + .withOrgUnit("O6uvpzGd5pu") + .withDataSet("lyLU2wR22tC").withPeriod(PeriodBuilder.monthOf(new Date(), -1)) + .withDataValues( + List.of(new DataValue().withDataElement("aIJZ2d2QgVV").withValue("20")))) + .to("dhis2://post/resource?path=dataValueSets&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .unmarshal().json() + .choice() + .when().groovy("body.status != 'OK'") + .log(LoggingLevel.ERROR, "Import error from DHIS2 while saving data value set => ${body}") + .end(); ---- YAML:: @@ -336,27 +281,14 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.LoggingLevel; -import org.apache.camel.builder.RouteBuilder; -import org.hisp.dhis.api.model.v40_2_2.OrganisationUnit; - -import java.util.Date; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:putResource") - .setBody(exchange -> new OrganisationUnit().withName("Acme").withShortName("Acme").withOpeningDate(new Date())) - .to("dhis2://put/resource?path=organisationUnits/jUb8gELQApl&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .unmarshal().json() - .choice() - .when().groovy("body.status != 'OK'") - .log(LoggingLevel.ERROR, "Import error from DHIS2 while updating org unit => ${body}") - .end(); - } -} +from("direct:putResource") + .setBody(exchange -> new OrganisationUnit().withName("Acme").withShortName("Acme").withOpeningDate(new Date())) + .to("dhis2://put/resource?path=organisationUnits/jUb8gELQApl&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .unmarshal().json() + .choice() + .when().groovy("body.status != 'OK'") + .log(LoggingLevel.ERROR, "Import error from DHIS2 while updating org unit => ${body}") + .end(); ---- YAML:: @@ -400,24 +332,13 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.LoggingLevel; -import org.apache.camel.builder.RouteBuilder; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:deleteResource") - .to("dhis2://delete/resource?path=organisationUnits/jUb8gELQApl&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") - .unmarshal().json() - .choice() - .when().groovy("body.status != 'OK'") - .log(LoggingLevel.ERROR, "Import error from DHIS2 while deleting org unit => ${body}") - .end(); - } -} - +from("direct:deleteResource") + .to("dhis2://delete/resource?path=organisationUnits/jUb8gELQApl&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api") + .unmarshal().json() + .choice() + .when().groovy("body.status != 'OK'") + .log(LoggingLevel.ERROR, "Import error from DHIS2 while deleting org unit => ${body}") + .end(); ---- YAML:: + @@ -454,17 +375,8 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:resourceTablesAnalytics") - .to("dhis2://resourceTables/analytics?skipAggregate=false&skipEvents=true&lastYears=1&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api"); - } -} +from("direct:resourceTablesAnalytics") + .to("dhis2://resourceTables/analytics?skipAggregate=false&skipEvents=true&lastYears=1&username=admin&password=district&baseApiUrl=https://play.im.dhis2.org/stable-2-40-5/api"); ---- YAML:: @@ -495,22 +407,11 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; -import org.hisp.dhis.integration.sdk.Dhis2ClientBuilder; -import org.hisp.dhis.integration.sdk.api.Dhis2Client; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - Dhis2Client dhis2Client = Dhis2ClientBuilder.newClient("https://play.im.dhis2.org/stable-2-40-5/api", "admin", "district").build(); - getCamelContext().getRegistry().bind("dhis2Client", dhis2Client); +Dhis2Client dhis2Client = Dhis2ClientBuilder.newClient("https://play.im.dhis2.org/stable-2-40-5/api", "admin", "district").build(); +getCamelContext().getRegistry().bind("dhis2Client", dhis2Client); - from("direct:resourceTablesAnalytics") - .to("dhis2://resourceTables/analytics?skipAggregate=true&skipEvents=true&lastYears=1&client=#dhis2Client"); - } -} +from("direct:resourceTablesAnalytics") + .to("dhis2://resourceTables/analytics?skipAggregate=true&skipEvents=true&lastYears=1&client=#dhis2Client"); ---- YAML:: @@ -546,20 +447,9 @@ Java:: + [source,java] ---- -package org.camel.dhis2.example; - -import org.apache.camel.builder.RouteBuilder; - -import java.util.Map; - -public class MyRouteBuilder extends RouteBuilder { - - public void configure() { - from("direct:clearCache") - .setHeader("CamelDhis2.queryParams", constant(Map.of("cacheClear", "true"))) - .to("dhis2://post/resource?path=maintenance&client=#dhis2Client"); - } -} +from("direct:clearCache") + .setHeader("CamelDhis2.queryParams", constant(Map.of("cacheClear", "true"))) + .to("dhis2://post/resource?path=maintenance&client=#dhis2Client"); ---- YAML:: diff --git a/components/camel-file/src/main/docs/file-component.adoc b/components/camel-file/src/main/docs/file-component.adoc index 132bd947827a..c25d58330e51 100644 --- a/components/camel-file/src/main/docs/file-component.adoc +++ b/components/camel-file/src/main/docs/file-component.adoc @@ -1777,11 +1777,9 @@ outputdir/sub/bar.txt [source,java] ---- -from("file://inputdir/").process(new Processor() { - public void process(Exchange exchange) throws Exception { +from("file://inputdir/").process(exchange -> { Object body = exchange.getIn().getBody(); // do some business logic with the input body - } }); ---- diff --git a/components/camel-keycloak/src/main/docs/keycloak-component.adoc b/components/camel-keycloak/src/main/docs/keycloak-component.adoc index f427e71c30b2..2f70c82917a6 100644 --- a/components/camel-keycloak/src/main/docs/keycloak-component.adoc +++ b/components/camel-keycloak/src/main/docs/keycloak-component.adoc @@ -2488,11 +2488,8 @@ Java:: + [source,java] ---- -public class BulkUserProvisioningRoute extends RouteBuilder { - @Override - public void configure() throws Exception { - // Provision users from CSV file - from("file:data/incoming?noop=true") +// Provision users from CSV file +from("file:data/incoming?noop=true") .routeId("bulk-user-provisioning") .log("Processing user provisioning file: ${header.CamelFileName}") @@ -2574,7 +2571,6 @@ public class BulkUserProvisioningRoute extends RouteBuilder { .setHeader("CamelKeycloakContinueOnError", constant(true)) .to("keycloak:admin?operation=bulkDeleteUsers") .log("Deleted ${body[success]} inactive users"); - } private boolean isInactive(UserRepresentation user) { // Custom logic to determine if user is inactive @@ -2706,13 +2702,8 @@ Java:: + [source,java] ---- -public class KeycloakManagementRoutes extends RouteBuilder { - - @Override - public void configure() throws Exception { - - // Configure Keycloak component - KeycloakComponent keycloak = getContext().getComponent("keycloak", KeycloakComponent.class); +// Configure Keycloak component +KeycloakComponent keycloak = getContext().getComponent("keycloak", KeycloakComponent.class); KeycloakConfiguration config = new KeycloakConfiguration(); config.setServerUrl("http://localhost:8080"); config.setRealm("master"); @@ -2797,8 +2788,6 @@ public class KeycloakManagementRoutes extends RouteBuilder { .to("keycloak:admin?operation=deleteUser") .setHeader("Content-Type", constant("application/json")) .transform().constant("{\"status\": \"success\", \"message\": \"User deleted\"}"); - } -} ---- YAML:: @@ -3737,22 +3726,17 @@ Java:: + [source,java] ---- -public class KeycloakEventMonitoringRoutes extends RouteBuilder { - - @Override - public void configure() throws Exception { - - // Configure Keycloak component - KeycloakComponent keycloak = getContext().getComponent("keycloak", KeycloakComponent.class); - KeycloakConfiguration config = new KeycloakConfiguration(); - config.setServerUrl("http://localhost:8080"); - config.setRealm("master"); - config.setUsername("admin"); - config.setPassword("admin"); - keycloak.setConfiguration(config); +// Configure Keycloak component +KeycloakComponent keycloak = getContext().getComponent("keycloak", KeycloakComponent.class); +KeycloakConfiguration config = new KeycloakConfiguration(); +config.setServerUrl("http://localhost:8080"); +config.setRealm("master"); +config.setUsername("admin"); +config.setPassword("admin"); +keycloak.setConfiguration(config); - // Consume admin events and send to audit system - from("keycloak:adminEvents" +// Consume admin events and send to audit system +from("keycloak:adminEvents" + "?realm=production-realm" + "&eventType=admin-events" + "&operationTypes=CREATE,UPDATE,DELETE" @@ -3795,12 +3779,10 @@ public class KeycloakEventMonitoringRoutes extends RouteBuilder { .to("bean:analyticsService?method=processUserActivity") .to("log:analytics"); - // Process security alerts - from("direct:security-check") - .to("bean:securityService?method=checkFailedLogin") - .to("log:security"); - } -} +// Process security alerts +from("direct:security-check") + .to("bean:securityService?method=checkFailedLogin") + .to("log:security"); ---- YAML:: @@ -4297,12 +4279,8 @@ Java:: + [source,java] ---- -public class HybridSecurityRoutes extends RouteBuilder { - @Override - public void configure() throws Exception { - - // Introspection for admin operations - KeycloakSecurityPolicy adminIntrospection = new KeycloakSecurityPolicy( +// Introspection for admin operations +KeycloakSecurityPolicy adminIntrospection = new KeycloakSecurityPolicy( "{{keycloak.server-url}}", "{{keycloak.realm}}", "{{keycloak.client-id}}", "{{keycloak.client-secret}}"); adminIntrospection.setRequiredRoles("admin"); @@ -4331,11 +4309,9 @@ public class HybridSecurityRoutes extends RouteBuilder { .policy(readPolicy) .to("bean:userService?method=listUsers"); - from("rest:get:/profile") - .policy(readPolicy) - .to("bean:userService?method=getProfile"); - } -} +from("rest:get:/profile") + .policy(readPolicy) + .to("bean:userService?method=getProfile"); ---- YAML:: @@ -5301,13 +5277,8 @@ Java:: + [source,java] ---- -public class KeycloakSecurityRoutes extends RouteBuilder { - - @Override - public void configure() throws Exception { - - // Admin policy - requires admin role - KeycloakSecurityPolicy adminPolicy = new KeycloakSecurityPolicy( +// Admin policy - requires admin role +KeycloakSecurityPolicy adminPolicy = new KeycloakSecurityPolicy( "{{keycloak.server-url}}", "{{keycloak.realm}}", "{{keycloak.client-id}}", "{{keycloak.client-secret}}"); adminPolicy.setRequiredRoles("admin"); @@ -5330,11 +5301,9 @@ public class KeycloakSecurityRoutes extends RouteBuilder { .policy(adminPolicy) .to("bean:userService?method=getAllUsers"); - from("rest:get:/profile") - .policy(userPolicy) - .to("bean:userService?method=getCurrentUser"); - } -} +from("rest:get:/profile") + .policy(userPolicy) + .to("bean:userService?method=getCurrentUser"); ---- YAML:: diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc index 970c9298d844..98140357506b 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc @@ -86,18 +86,13 @@ This operation returns a List of Deployment from your cluster - `listDeploymentsByLabels`: this operation lists the deployments by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesDeploymentsLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesDeploymentsLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-deployments:///?kubernetesClient=#kubernetesClient&operation=listDeploymentsByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc index eca6c5e8dd07..b20bff973b52 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-hpa-component.adoc @@ -85,18 +85,13 @@ This operation returns a list of HPAs from your cluster - `listDeploymentsByLabels`: this operation lists the HPAs by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesHPALabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesHPALabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-hpa:///?kubernetesClient=#kubernetesClient&operation=listHPAByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc index cb9f79ab8f50..84233edb75c3 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-job-component.adoc @@ -42,134 +42,101 @@ include::partial$component-endpoint-headers.adoc[] - `listJob`: this operation lists the jobs on a kubernetes cluster -._Java-only: uses toF() for endpoint URI formatting_ +[tabs] +==== +Java:: ++ [source,java] ---- -from("direct:list"). - toF("kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJob"). - to("mock:result"); +from("direct:list") + .to("kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJob") + .to("mock:result"); ---- +XML:: ++ +[source,xml] +---- +<route> + <from uri="direct:list"/> + <to uri="kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJob"/> + <to uri="mock:result"/> +</route> +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: direct:list + steps: + - to: + uri: kubernetes-job:/// + parameters: + kubernetesClient: "#kubernetesClient" + operation: listJob + - to: + uri: mock:result +---- +==== + This operation returns a list of jobs from your cluster - `listJobByLabels`: this operation lists the jobs by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- -from("direct:listByLabels").process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesJobLabels", labels); - } - }); - toF("kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJobByLabels"). - to("mock:result"); +from("direct:listByLabels") + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesJobLabels", + Map.of("key1", "value1", "key2", "value2")); + }) + .to("kubernetes-job:///?kubernetesClient=#kubernetesClient&operation=listJobByLabels") + .to("mock:result"); ---- This operation returns a list of jobs from your cluster, using a label selector (with key1 and key2, with value value1 and value2) - `createJob`: This operation creates a job on a Kubernetes Cluster -We have a wonderful example of this operation thanks to https://github.com/Emmerson-Miranda[Emmerson Miranda] from this https://github.com/Emmerson-Miranda/camel/blob/master/camel3-cdi/cdi-k8s-pocs/src/main/java/edu/emmerson/camel/k8s/jobs/camel_k8s_jobs/KubernetesCreateJob.java[Java test] - -._Java-only: full RouteBuilder class with lambda Processors and programmatic JobSpec construction_ +._Java-only: programmatic JobSpec construction with Fabric8 Kubernetes client_ [source,java] ---- -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - -import org.apache.camel.Endpoint; -import org.apache.camel.EndpointInject; -import org.apache.camel.builder.RouteBuilder; - -import io.fabric8.kubernetes.api.model.Container; -import io.fabric8.kubernetes.api.model.ObjectMeta; -import io.fabric8.kubernetes.api.model.PodSpec; -import io.fabric8.kubernetes.api.model.PodTemplateSpec; -import io.fabric8.kubernetes.api.model.batch.JobSpec; - -public class KubernetesCreateJob extends RouteBuilder { - - @EndpointInject("timer:foo?delay=1000&repeatCount=1") - private Endpoint inputEndpoint; - - @EndpointInject("log:output") - private Endpoint resultEndpoint; - - @Override - public void configure() { - // you can configure the route rule with Java DSL here - - from(inputEndpoint) - .routeId("kubernetes-jobcreate-client") - .process(exchange -> { - exchange.getIn().setHeader("CamelKubernetesJobName", "camel-job"); //DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*') - exchange.getIn().setHeader("CamelKubernetesNamespaceName", "default"); - - Map<String, String> joblabels = new HashMap<String, String>(); - joblabels.put("jobLabelKey1", "value1"); - joblabels.put("jobLabelKey2", "value2"); - joblabels.put("app", "jobFromCamelApp"); - exchange.getIn().setHeader("CamelKubernetesJobLabels", joblabels); - - exchange.getIn().setHeader("CamelKubernetesJobSpec", generateJobSpec()); - }) - .to("kubernetes-job:///{{kubernetes-master-url}}?oauthToken={{kubernetes-oauth-token:}}&operation=createJob") - .log("Job created:") - .process(exchange -> { - System.out.println(exchange.getIn().getBody()); - }) - .to(resultEndpoint); - } - - private JobSpec generateJobSpec() { - JobSpec js = new JobSpec(); - - PodTemplateSpec pts = new PodTemplateSpec(); - - PodSpec ps = new PodSpec(); - ps.setRestartPolicy("Never"); - ps.setContainers(generateContainers()); - pts.setSpec(ps); - - ObjectMeta metadata = new ObjectMeta(); - Map<String, String> annotations = new HashMap<String, String>(); - annotations.put("jobMetadataAnnotation1", "random value"); - metadata.setAnnotations(annotations); - - Map<String, String> podlabels = new HashMap<String, String>(); - podlabels.put("podLabelKey1", "value1"); - podlabels.put("podLabelKey2", "value2"); - podlabels.put("app", "podFromCamelApp"); - metadata.setLabels(podlabels); - - pts.setMetadata(metadata); - js.setTemplate(pts); - return js; - } - - private List<Container> generateContainers() { - Container container = new Container(); - container.setName("pi"); - container.setImage("perl"); - List<String> command = new ArrayList<String>(); - command.add("echo"); - command.add("Job created from Apache Camel code at " + (new Date())); - container.setCommand(command); - List<Container> containers = new ArrayList<Container>(); - containers.add(container); - return containers; - } -} +from("timer:foo?delay=1000&repeatCount=1") + .routeId("kubernetes-jobcreate-client") + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesJobName", "camel-job"); + exchange.getIn().setHeader("CamelKubernetesNamespaceName", "default"); + exchange.getIn().setHeader("CamelKubernetesJobLabels", + Map.of("jobLabelKey1", "value1", "jobLabelKey2", "value2", "app", "jobFromCamelApp")); + + Container container = new Container(); + container.setName("pi"); + container.setImage("perl"); + container.setCommand(List.of("echo", "Job created from Apache Camel")); + + PodSpec ps = new PodSpec(); + ps.setRestartPolicy("Never"); + ps.setContainers(List.of(container)); + + ObjectMeta metadata = new ObjectMeta(); + metadata.setAnnotations(Map.of("jobMetadataAnnotation1", "random value")); + metadata.setLabels(Map.of("podLabelKey1", "value1", "podLabelKey2", "value2", "app", "podFromCamelApp")); + + PodTemplateSpec pts = new PodTemplateSpec(); + pts.setSpec(ps); + pts.setMetadata(metadata); + + JobSpec js = new JobSpec(); + js.setTemplate(pts); + exchange.getIn().setHeader("CamelKubernetesJobSpec", js); + }) + .to("kubernetes-job:///{{kubernetes-master-url}}?oauthToken={{kubernetes-oauth-token:}}&operation=createJob") + .log("Job created:") + .to("log:output"); ---- diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc index 131838ee3e10..45f0579198f5 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc @@ -86,18 +86,13 @@ This operation returns a list of namespaces from your cluster - `listNamespacesByLabels`: this operation lists the namespaces by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesNamespaceLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesNamespaceLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-namespaces:///?kubernetesClient=#kubernetesClient&operation=listNamespacesByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc index a97fcd3944a1..205987f7d88b 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc @@ -87,18 +87,13 @@ This operation returns a List of Nodes from your cluster - `listNodesByLabels`: this operation lists the nodes by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesNodeLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesNodeLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-nodes:///?kubernetesClient=#kubernetesClient&operation=listNodesByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc index 997a1c086a31..eb44a5e41732 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc @@ -87,18 +87,13 @@ This operation returns a list of PVC from your cluster - `listPersistentVolumesClaimsByLabels`: this operation lists the PVCs by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesPersistentVolumesClaimsLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesPersistentVolumesClaimsLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-persistent-volumes-claims:///?kubernetesClient=#kubernetesClient&operation=listPersistentVolumesClaimsByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc index c682b9b2a2da..1057ca247166 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc @@ -84,18 +84,13 @@ This operation returns a list of PVs from your cluster - `listPersistentVolumesByLabels`: this operation lists the PVs by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesPersistentVolumesLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesPersistentVolumesLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-persistent-volumes:///?kubernetesClient=#kubernetesClient&operation=listPersistentVolumesByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc index ea635e073231..587efa2b613f 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc @@ -87,18 +87,13 @@ This operation returns a list of pods from your cluster - `listPodsByLabels`: this operation lists the pods by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesPodLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesPodLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=listPodsByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc index ca0eb755d9ed..346e5793afca 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc @@ -89,18 +89,13 @@ This operation returns a list of RCs from your cluster - `listReplicationControllersByLabels`: this operation lists the RCs by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesReplicationControllersLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesReplicationControllersLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-replication-controllers:///?kubernetesClient=#kubernetesClient&operation=listReplicationControllersByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc index 52a184ce8fe4..12c225a58785 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc @@ -87,18 +87,13 @@ This operation returns a list of resource quotas from your cluster - `listResourcesQuotaByLabels`: this operation lists the resource quotas by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesResourcesQuotaLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesResourcesQuotaLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-resources-quota:///?kubernetesClient=#kubernetesClient&operation=listResourcesQuotaByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc index 47774aba0c56..380ff6e6fe8a 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc @@ -87,18 +87,13 @@ This operation returns a list of services from your cluster - `listServiceAccountsByLabels`: this operation lists the SAs by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesServiceAccountsLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesServiceAccountsLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-service-accounts:///?kubernetesClient=#kubernetesClient&operation=listServiceAccountsByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc index f62148f8d4a0..f17b6f046a11 100644 --- a/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc +++ b/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc @@ -86,18 +86,13 @@ This operation returns a List of services from your cluster - `listServicesByLabels`: this operation lists the deployments by labels on a kubernetes cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesServiceLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesServiceLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("kubernetes-services:///?kubernetesClient=#kubernetesClient&operation=listServicesByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc index 74bb19fae19f..4b4819937d2f 100644 --- a/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc +++ b/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc @@ -84,18 +84,13 @@ This operation returns a list of builds from your Openshift cluster - `listBuildsByLabels`: this operation lists the build configs by labels on an Openshift cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesBuildConfigsLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesBuildConfigsLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("openshift-build-configs:///?kubernetesClient=#kubernetesClient&operation=listBuildConfigsByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc index 486e8bbf148f..f75ef907ef87 100644 --- a/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc +++ b/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc @@ -84,18 +84,13 @@ This operation returns a List of Builds from your Openshift cluster - `listBuildsByLabels`: this operation lists the builds by labels on an Openshift cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesBuildsLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesBuildsLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("openshift-builds:///?kubernetesClient=#kubernetesClient&operation=listBuildsByLabels") .to("mock:result"); diff --git a/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc index dfc786ac8cb0..1ca80c2156d4 100644 --- a/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc +++ b/components/camel-kubernetes/src/main/docs/openshift-deploymentconfigs-component.adoc @@ -86,18 +86,13 @@ This operation returns a list of deployment configs from your cluster - `listDeploymentConfigsByLabels`: this operation lists the deployment configs by labels on an Openshift cluster -._Java-only: uses inline Processor with HashMap_ +._Java-only: sets a Map header for label selection_ [source,java] ---- from("direct:listByLabels") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - Map<String, String> labels = new HashMap<>(); - labels.put("key1", "value1"); - labels.put("key2", "value2"); - exchange.getIn().setHeader("CamelKubernetesDeploymentsLabels", labels); - } + .process(exchange -> { + exchange.getIn().setHeader("CamelKubernetesDeploymentsLabels", + Map.of("key1", "value1", "key2", "value2")); }) .to("openshift-deploymentconfigs:///?kubernetesClient=#kubernetesClient&operation=listDeploymentConfigsByLabels") .to("mock:result"); diff --git a/components/camel-metrics/src/main/docs/metrics-component.adoc b/components/camel-metrics/src/main/docs/metrics-component.adoc index e73a608fbedb..b54426eb04b1 100644 --- a/components/camel-metrics/src/main/docs/metrics-component.adoc +++ b/components/camel-metrics/src/main/docs/metrics-component.adoc @@ -59,62 +59,6 @@ This default registry can be replaced with a custom one by providing a `MetricRegistry` bean. If multiple `MetricRegistry` beans exist in the application, the one with name `metricRegistry` is used. -For example: - -[tabs] -==== - -Java (Spring):: -+ -[source,java] ----- -@Configuration -public static class MyConfig extends SingleRouteCamelConfiguration { - - @Bean - @Override - public RouteBuilder route() { - return new RouteBuilder() { - @Override - public void configure() throws Exception { - // define Camel routes here - } - }; - } - - @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME) - public MetricRegistry getMetricRegistry() { - MetricRegistry registry = ...; - return registry; - } -} ----- - -Java (CDI):: -+ -[source,java] ----- -class MyBean extends RouteBuilder { - - @Override - public void configure() { - from("...") - // Register the 'my-meter' meter in the MetricRegistry below - .to("metrics:meter:my-meter"); - } - - @Produces - // If multiple MetricRegistry beans - // @Named(MetricsComponent.METRIC_REGISTRY_NAME) - MetricRegistry registry() { - MetricRegistry registry = new MetricRegistry(); - // ... - return registry; - } -} ----- - -==== == Usage diff --git a/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc b/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc index c4eb8896a69a..2a03e8b856a6 100644 --- a/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc +++ b/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc @@ -187,12 +187,9 @@ public void process(Exchange exchange) throws Exception { .setProperty("CamelBaggage_myValue", constant("1234")) .routeId("start") .log("A message") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - // Baggage is available via the Micrometer Observability API - String val = tracer.getBaggage("myValue").get(); - } + .process(exchange -> { + // Baggage is available via the Micrometer Observability API + String val = tracer.getBaggage("myValue").get(); }) .to("log:info"); ---- diff --git a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc index b8c02364e088..cf000be2bf47 100644 --- a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc +++ b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc @@ -375,12 +375,9 @@ For this reason, whenever you need to provide custom telemetry information, it i .setProperty("CamelBaggage_myValue", constant("1234")) .routeId("start") .log("A message") - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - // Baggage is available via the OpenTelemetry API - String val = Baggage.current().getEntryValue("myValue"); - } + .process(exchange -> { + // Baggage is available via the OpenTelemetry API + String val = Baggage.current().getEntryValue("myValue"); }) .to("log:info"); ---- diff --git a/components/camel-stax/src/main/docs/stax-component.adoc b/components/camel-stax/src/main/docs/stax-component.adoc index 53efe4f02edd..b5819c74eaa8 100644 --- a/components/camel-stax/src/main/docs/stax-component.adoc +++ b/components/camel-stax/src/main/docs/stax-component.adoc @@ -73,12 +73,9 @@ Here is an example: from("file:target/in") .to("stax:org.superbiz.handler.CountingHandler") // CountingHandler implements org.xml.sax.ContentHandler or extends org.xml.sax.helpers.DefaultHandler - .process(new Processor() { - @Override - public void process(Exchange exchange) throws Exception { - CountingHandler handler = exchange.getIn().getBody(CountingHandler.class); - // do some great work with the handler - } + .process(exchange -> { + CountingHandler handler = exchange.getIn().getBody(CountingHandler.class); + // do some great work with the handler }); ----
