You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2026/09/09 12:25:19 UTC
(camel-spring-boot-examples) branch main updated: Fix rest-openapi, observation, and twitter-salesforce examples
This is an automated email from the ASF dual-hosted git repository.
Croway pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot-examples.git
The following commit(s) were added to refs/heads/main by this push:
new 2c8dbf82 Fix rest-openapi, observation, and twitter-salesforce examples
2c8dbf82 is described below
commit 2c8dbf821a9ea1a5588278248e205fd65b0b9d50
Author: Federico Mariani <34...@users.noreply.github.com>
AuthorDate: Wed Sep 9 14:25:14 2026 +0200
Fix rest-openapi, observation, and twitter-salesforce examples
---
rest-openapi/README.adoc | 18 ++++---
twitter-salesforce/README.adoc | 38 ++++++++++----
twitter-salesforce/pom.xml | 1 +
.../example/mention/TwitterSalesforceRoute.java | 23 ++------
.../apache/camel/example/mention/dto/Contact.java | 61 ++++++++++++++++++++++
.../apache/camel/salesforce/draftdto/Contact.java | 6 ---
6 files changed, 105 insertions(+), 42 deletions(-)
diff --git a/rest-openapi/README.adoc b/rest-openapi/README.adoc
index bf74d547..b35d97ba 100644
--- a/rest-openapi/README.adoc
+++ b/rest-openapi/README.adoc
@@ -25,7 +25,7 @@ You should see the following output when the application is launched:
[source,text]
----
...
-[INFO] --- spring-boot-maven-plugin:1.5.10.RELEASE:run (default-cli) @ camel-example-spring-boot-rest-openapi ---
+[INFO] --- spring-boot:4.1.1:run (default-cli) @ camel-example-spring-boot-rest-openapi ---
[...]
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
@@ -33,12 +33,14 @@ You should see the following output when the application is launched:
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
- :: Spring Boot :: (v2.0.0.RELEASE)
-[...]
-2017-03-05 14:55:44.032 INFO 15312 --- [ main] o.a.camel.spring.SpringCamelContext : Total 4 routes, of which 4 are started.
-2017-03-05 14:55:44.034 INFO 15312 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.22.0-SNAPSHOT (CamelContext: camel-1) started in 0.614 seconds
-2017-03-05 14:55:44.131 INFO 15312 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
-2017-03-05 14:55:44.140 INFO 15312 --- [ main] o.a.c.example.springboot.Application : Started Application in 6.265 seconds (JVM running for 21.092)
+
+ :: Spring Boot :: (v4.1.1)
+
+2026-09-04T10:13:59.681+02:00 INFO 26229 --- [ main] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
+2026-09-04T10:13:59.872+02:00 INFO 26229 --- [ main] o.a.c.impl.engine.AbstractCamelContext : Apache Camel 4.23.0-SNAPSHOT (MyCamel) is starting
+2026-09-04T10:13:59.913+02:00 INFO 26229 --- [ main] o.a.c.impl.engine.AbstractCamelContext : Routes startup (total:4 rest-dsl:4)
+2026-09-04T10:13:59.913+02:00 INFO 26229 --- [ main] o.a.c.impl.engine.AbstractCamelContext : Apache Camel 4.23.0-SNAPSHOT (MyCamel) started in 41ms (build:0ms init:0ms start:41ms boot:586ms)
+2026-09-04T10:13:59.915+02:00 INFO 26229 --- [ main] o.a.c.example.springboot.Application : Started Application in 1.476 seconds (process running for 1.63)
----
After the Spring Boot application is started, you can open the following URL in your web browser to access the REST endpoint and retrieve a list of users: http://localhost:8080/api/users
@@ -77,7 +79,7 @@ The Spring Boot application can be stopped pressing `[CTRL] + [C]` in the shell.
=== Actuator
-The actuator is available at: `http://localhost:8080/actuator/` such as metrics for Prometheus: `http://localhost:8080/actuator/prometheus`.
+The actuator is available at: `http://localhost:8080/actuator` such as metrics for Prometheus: `http://localhost:8080/actuator/prometheus`.
=== Help and contributions
diff --git a/twitter-salesforce/README.adoc b/twitter-salesforce/README.adoc
index 0cc46065..6ddf5d6c 100644
--- a/twitter-salesforce/README.adoc
+++ b/twitter-salesforce/README.adoc
@@ -8,20 +8,26 @@ as a contact in Salesforce.
=== Configuring Twitter
-This example is already configured using a testing purpose twitter
-account named `cameltweet'. And therefore the example is ready to run
-out of the box.
+This example ships with the keys and tokens of a long-standing testing
+Twitter/X account named `cameltweet`, used only to let the example show
+a complete, working configuration; they are not a working credential you
+can rely on. They predate Twitter/X's 2023 API overhaul and are very
+likely no longer valid, and even if they were, they are for a shared
+testing account, not something to build on.
-This account is only for testing purpose, and should not be used in your
-custom applications. For that you need to setup and use your own twitter
-account.
+You must self-provision your own Twitter/X developer app and use its
+consumer key/secret and access token/secret in place of the values in
+`+application.properties+` before this example will actually run.
=== Configuring Salesforce
-This example uses Camels own test Salesforce developer account, you
-would most likely want to sign up with your own Developer account at
-https://developer.salesforce.com/. After you have done that, you’ll need
-to create a Connected Application for your integration.
+This example ships with `+clientId+`/`+clientSecret+` values for a Camel
+test Salesforce developer account, included only to show what a filled-in
+configuration looks like. As with the Twitter/X keys above, self-provision
+your own Salesforce Developer account at
+https://developer.salesforce.com/ for anything beyond reading this
+example, and follow the steps below to create your own Connected
+Application for your integration.
To do this after logging in to your Salesforce Developer account,
navigate to _Apps_ located under _Build_ and then _Create_, there you
@@ -89,6 +95,18 @@ to use the `+camel-salesforce-maven-plugin+` and specify the desired DTO in <con
To generate only DTOs needed for Contact, but the parameter value can be
specified using regular expressions.
+Running that plugin needs a live login against a real org, so it only
+runs under the `+generate-salesforce-dto+` profile (`+-Dgenerate.dto+`),
+never during a plain `+mvn compile+`. This example itself only sets
+`+LastName+` and `+TwitterScreenName__c+`, so it doesn't need a
+generated DTO - it uses the minimal, hand-maintained
+`+org.apache.camel.example.mention.dto.Contact+` bundled with the
+example, which is enough to compile and run without any Salesforce
+credentials at build time. The plugin and profile are kept around as a
+starting point if you want to extend the route to read or write
+additional fields on `+Contact+` (or other SObjects) - generate a DTO
+for them and use it in place of the bundled one.
+
=== Build
You will need to compile this example first:
diff --git a/twitter-salesforce/pom.xml b/twitter-salesforce/pom.xml
index f26ee437..4b54aad8 100644
--- a/twitter-salesforce/pom.xml
+++ b/twitter-salesforce/pom.xml
@@ -126,6 +126,7 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
+ <version>3.0.0</version>
<executions>
<execution>
<id>add-source</id>
diff --git a/twitter-salesforce/src/main/java/org/apache/camel/example/mention/TwitterSalesforceRoute.java b/twitter-salesforce/src/main/java/org/apache/camel/example/mention/TwitterSalesforceRoute.java
index 2f57362d..6a1be0d9 100644
--- a/twitter-salesforce/src/main/java/org/apache/camel/example/mention/TwitterSalesforceRoute.java
+++ b/twitter-salesforce/src/main/java/org/apache/camel/example/mention/TwitterSalesforceRoute.java
@@ -16,10 +16,8 @@
*/
package org.apache.camel.example.mention;
-import java.lang.Class;
-import java.lang.reflect.Method;
-import org.apache.camel.salesforce.draftdto.Contact;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.example.mention.dto.Contact;
import org.springframework.stereotype.Component;
import twitter4j.v1.Status;
import twitter4j.v1.User;
@@ -34,22 +32,11 @@ public class TwitterSalesforceRoute extends RouteBuilder {
.process(exchange -> {
Status status = exchange.getIn().getBody(Status.class);
User user = status.getUser();
- String name = user.getName();
- String screenName = user.getScreenName();
- Class contact = null;
- if (Class.forName("org.apache.camel.salesforce.dto.Contact") != null) {
- contact = Class.forName("org.apache.camel.salesforce.dto.Contact");
- } else {
- contact = Contact.class;
- }
-
- Object contactObject = contact.getDeclaredConstructor().newInstance();
- Method setLastName = contact.getMethod("setLastName", String.class);
- Method setTwitterScreenName__c = contact.getMethod("setTwitterScreenName__c", String.class);
- setLastName.invoke(contactObject, name);
- setTwitterScreenName__c.invoke(contactObject, screenName);
- exchange.getIn().setBody(contactObject);
+ Contact contact = new Contact();
+ contact.setLastName(user.getName());
+ contact.setTwitterScreenName__c(user.getScreenName());
+ exchange.getIn().setBody(contact);
})
.to("salesforce:upsertSObject?sObjectIdName=TwitterScreenName__c")
.log("SObject ID: ${body?.id}");
diff --git a/twitter-salesforce/src/main/java/org/apache/camel/example/mention/dto/Contact.java b/twitter-salesforce/src/main/java/org/apache/camel/example/mention/dto/Contact.java
new file mode 100644
index 00000000..f795d368
--- /dev/null
+++ b/twitter-salesforce/src/main/java/org/apache/camel/example/mention/dto/Contact.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.example.mention.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
+
+/**
+ * Minimal, hand-maintained stand-in for the Salesforce {@code Contact} DTO that
+ * {@code camel-salesforce-maven-plugin} would otherwise generate from a live org (see the
+ * {@code generate-salesforce-dto} Maven profile). It only carries the fields this example
+ * actually sets, so the module builds and runs without needing Salesforce credentials at
+ * build time.
+ */
+public class Contact extends AbstractSObjectBase {
+
+ private String lastName;
+ private String twitterScreenNameC;
+
+ public Contact() {
+ getAttributes().setType("Contact");
+ }
+
+ // Salesforce field API names are case-sensitive (LastName, TwitterScreenName__c); without
+ // @JsonProperty, Jackson would decapitalize the leading letter of the bean-derived property
+ // name and silently send the wrong field names to the Salesforce REST API.
+ @JsonProperty("LastName")
+ public String getLastName() {
+ return lastName;
+ }
+
+ @JsonProperty("LastName")
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ @JsonProperty("TwitterScreenName__c")
+ public String getTwitterScreenName__c() {
+ return twitterScreenNameC;
+ }
+
+ @JsonProperty("TwitterScreenName__c")
+ public void setTwitterScreenName__c(String twitterScreenNameC) {
+ this.twitterScreenNameC = twitterScreenNameC;
+ }
+
+}
diff --git a/twitter-salesforce/src/main/java/org/apache/camel/salesforce/draftdto/Contact.java b/twitter-salesforce/src/main/java/org/apache/camel/salesforce/draftdto/Contact.java
deleted file mode 100644
index 4d46cf35..00000000
--- a/twitter-salesforce/src/main/java/org/apache/camel/salesforce/draftdto/Contact.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.apache.camel.salesforce.draftdto;
-
-public abstract class Contact {
- public abstract void setLastName(String LastName);
- public abstract void setTwitterScreenName__c(String TwitterScreenName__c);
-}