Repository: camel Updated Branches: refs/heads/camel-2.19.x 38cca4242 -> 862be0eea
CAMEL-10743: Added guard for Apex REST APIs and other minor fixes for JSON Schema support Conflicts: components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6f9ed73b Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6f9ed73b Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6f9ed73b Branch: refs/heads/camel-2.19.x Commit: 6f9ed73b65dc1ca7dea79780ed754453a73e1560 Parents: 38cca42 Author: Dhiraj Bokde <dhira...@yahoo.com> Authored: Wed Aug 2 23:16:52 2017 -0700 Committer: Dhiraj Bokde <dhira...@yahoo.com> Committed: Thu Aug 3 01:12:39 2017 -0700 ---------------------------------------------------------------------- .../salesforce/api/dto/AbstractSObjectBase.java | 2 +- .../salesforce/api/utils/DateTimeDeserializer.java | 4 ++++ .../salesforce/api/utils/DateTimeSerializer.java | 12 ++++++++++++ .../salesforce/internal/SalesforceSession.java | 7 ++++++- .../internal/client/DefaultRestClient.java | 15 ++++++++++++--- 5 files changed, 35 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/6f9ed73b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java index 183a7aa..404bfa2 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractSObjectBase.java @@ -21,7 +21,7 @@ import java.time.ZonedDateTime; import com.fasterxml.jackson.annotation.JsonProperty; //CHECKSTYLE:OFF -public class AbstractSObjectBase extends AbstractDTOBase { +public abstract class AbstractSObjectBase extends AbstractDTOBase { // WARNING: these fields have case sensitive names, // the field name MUST match the field name used by Salesforce http://git-wip-us.apache.org/repos/asf/camel/blob/6f9ed73b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeDeserializer.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeDeserializer.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeDeserializer.java index e62496e..fefa68b 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeDeserializer.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeDeserializer.java @@ -41,4 +41,8 @@ public class DateTimeDeserializer extends JsonDeserializer<ZonedDateTime> { throw JsonMappingException.from(deserializationContext, "Expected String value, got: " + currentToken); } + @Override + public Class<?> handledType() { + return ZonedDateTime.class; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/6f9ed73b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeSerializer.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeSerializer.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeSerializer.java index ccf936a..26c8a39 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeSerializer.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/DateTimeSerializer.java @@ -20,8 +20,11 @@ import java.io.IOException; import java.time.ZonedDateTime; import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper; public class DateTimeSerializer extends JsonSerializer<ZonedDateTime> { @@ -35,4 +38,13 @@ public class DateTimeSerializer extends JsonSerializer<ZonedDateTime> { jsonGenerator.writeString(DateTimeUtils.formatDateTime(dateTime)); } + @Override + public Class<ZonedDateTime> handledType() { + return ZonedDateTime.class; + } + + @Override + public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType type) throws JsonMappingException { + visitor.expectStringFormat(type); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/6f9ed73b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java index a38749b..a7a9303 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java @@ -247,7 +247,12 @@ public class SalesforceSession implements Service { // don't log token or instance URL for security reasons LOG.info("Login successful"); accessToken = token.getAccessToken(); - instanceUrl = token.getInstanceUrl(); + instanceUrl = Optional.ofNullable(config.getInstanceUrl()).orElse(token.getInstanceUrl()); + // strip trailing '/' + int lastChar = instanceUrl.length() - 1; + if (instanceUrl.charAt(lastChar) == '/') { + instanceUrl = instanceUrl.substring(0, lastChar); + } // notify all session listeners for (SalesforceSessionListener listener : listeners) { http://git-wip-us.apache.org/repos/asf/camel/blob/6f9ed73b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java index e8e38e0..248e412 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java @@ -396,9 +396,18 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient request = getRequest(httpMethod, apexCallUrl(apexUrl, queryParams)); // set request SObject and content type if (requestDto != null) { - request.content(new InputStreamContentProvider(requestDto)); - request.header(HttpHeader.CONTENT_TYPE, - PayloadFormat.JSON.equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); + // guard against requests that do not support bodies + switch (request.getMethod()) { + case "PUT": + case "PATCH": + case "POST": + request.content(new InputStreamContentProvider(requestDto)); + request.header(HttpHeader.CONTENT_TYPE, + PayloadFormat.JSON.equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); + break; + default: + // ignore body for other methods + } } // requires authorization token