CAMEL-10743: Added guard for Apex REST APIs and other minor fixes for JSON Schema support
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fa4e6123 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fa4e6123 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fa4e6123 Branch: refs/heads/master Commit: fa4e6123fbd4f264a1d685c4f5250672e8f23c22 Parents: 0a7433d 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 00:43:52 2017 -0700 ---------------------------------------------------------------------- .../salesforce/api/dto/AbstractSObjectBase.java | 2 +- .../salesforce/api/utils/DateTimeDeserializer.java | 4 ++++ .../salesforce/api/utils/DateTimeSerializer.java | 12 ++++++++++++ .../salesforce/internal/SalesforceSession.java | 5 +++++ .../internal/client/DefaultRestClient.java | 15 ++++++++++++--- 5 files changed, 34 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/fa4e6123/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/fa4e6123/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/fa4e6123/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/fa4e6123/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 a21a3eb..7aaaca0 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 @@ -249,6 +249,11 @@ public class SalesforceSession implements Service { LOG.info("Login successful"); accessToken = token.getAccessToken(); 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/fa4e6123/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 2f3bad9..01a0f29 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 @@ -393,9 +393,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