You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dh...@apache.org on 2017/08/03 08:35:49 UTC
[1/8] camel git commit: CAMEL-10743: Added guard for Apex REST APIs
and other minor fixes for JSON Schema support
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 <dh...@yahoo.com>
Authored: Wed Aug 2 23:16:52 2017 -0700
Committer: Dhiraj Bokde <dh...@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
[3/8] camel git commit: CAMEL-10744: Updated camel salesforce maven
plugin to generate json schema file with types for Salesforce objects
Posted by dh...@apache.org.
CAMEL-10744: Updated camel salesforce maven plugin to generate json schema file with types for Salesforce objects
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8ef01f9e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8ef01f9e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8ef01f9e
Branch: refs/heads/camel-2.19.x
Commit: 8ef01f9e7470d9a9cfda893ac992663cee5a2bfc
Parents: e0fe1df
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 00:16:56 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:13:29 2017 -0700
----------------------------------------------------------------------
.../apache/camel/maven/CamelSalesforceMojo.java | 72 +++++++++++++++++---
.../CamelSalesforceMojoIntegrationTest.java | 33 +++++++--
2 files changed, 90 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/8ef01f9e/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java
index a169047..6a48ea7 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/CamelSalesforceMojo.java
@@ -24,6 +24,8 @@ import java.io.Writer;
import java.lang.reflect.Field;
import java.net.URI;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -272,6 +274,24 @@ public class CamelSalesforceMojo extends AbstractMojo {
@Parameter(property = "camelSalesforce.useStringsForPicklists", defaultValue = "false")
protected Boolean useStringsForPicklists;
+ /**
+ * Generate JSON Schema for DTOs, instead of Java Objects.
+ */
+ @Parameter(property = "camelSalesforce.jsonSchema")
+ protected boolean jsonSchema;
+
+ /**
+ * Schema ID for JSON Schema for DTOs.
+ */
+ @Parameter(property = "camelSalesforce.jsonSchemaId", defaultValue = JsonUtils.DEFAULT_ID_PREFIX)
+ protected String jsonSchemaId;
+
+ /**
+ * Schema ID for JSON Schema for DTOs.
+ */
+ @Parameter(property = "camelSalesforce.jsonSchemaFilename", defaultValue = "salesforce-dto-schema.json")
+ protected String jsonSchemaFilename;
+
VelocityEngine engine;
private long responseTimeout;
@@ -402,22 +422,52 @@ public class CamelSalesforceMojo extends AbstractMojo {
}
}
- getLog().info("Generating Java Classes...");
- // generate POJOs for every object description
- final GeneratorUtility utility = new GeneratorUtility(useStringsForPicklists);
- // should we provide a flag to control timestamp generation?
- final String generatedDate = new Date().toString();
- for (SObjectDescription description : descriptions) {
- if (IGNORED_OBJECTS.contains(description.getName())) {
- continue;
+ if (!jsonSchema) {
+
+ getLog().info("Generating Java Classes...");
+ // generate POJOs for every object description
+ final GeneratorUtility utility = new GeneratorUtility(useStringsForPicklists);
+ // should we provide a flag to control timestamp generation?
+ final String generatedDate = new Date().toString();
+ for (SObjectDescription description : descriptions) {
+ if (IGNORED_OBJECTS.contains(description.getName())) {
+ continue;
+ }
+ try {
+ processDescription(pkgDir, description, utility, generatedDate);
+ } catch (IOException e) {
+ throw new MojoExecutionException("Unable to generate source files for: " + description.getName(), e);
+ }
+ }
+
+ getLog().info(String.format("Successfully generated %s Java Classes", descriptions.size() * 2));
+
+ } else {
+
+ getLog().info("Generating JSON Schema...");
+ // generate JSON schema for every object description
+ final ObjectMapper schemaObjectMapper = JsonUtils.createSchemaObjectMapper();
+ final Set<Object> allSchemas = new HashSet<>();
+ for (SObjectDescription description : descriptions) {
+ if (IGNORED_OBJECTS.contains(description.getName())) {
+ continue;
+ }
+ try {
+ allSchemas.add(JsonUtils.getSObjectJsonSchema(schemaObjectMapper, description, jsonSchemaId, true));
+ } catch (IOException e) {
+ throw new MojoExecutionException("Unable to generate JSON Schema types for: " + description.getName(), e);
+ }
}
+
+ final Path schemaFilePath = outputDirectory.toPath().resolve(jsonSchemaFilename);
try {
- processDescription(pkgDir, description, utility, generatedDate);
+ Files.write(schemaFilePath, JsonUtils.getJsonSchemaString(schemaObjectMapper, allSchemas, jsonSchemaId).getBytes("UTF-8"));
} catch (IOException e) {
- throw new MojoExecutionException("Unable to generate source files for: " + description.getName(), e);
+ throw new MojoExecutionException("Unable to generate JSON Schema source file: " + schemaFilePath, e);
}
+
+ getLog().info(String.format("Successfully generated %s JSON Types in file %s", descriptions.size() * 2, schemaFilePath));
}
- getLog().info(String.format("Successfully generated %s Java Classes", descriptions.size() * 2));
} finally {
// remember to stop the client
http://git-wip-us.apache.org/repos/asf/camel/blob/8ef01f9e/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
index 8856b7e..2f75608 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
@@ -25,10 +25,15 @@ import java.util.Properties;
import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
import org.apache.camel.component.salesforce.SalesforceLoginConfig;
+import org.apache.camel.component.salesforce.api.utils.JsonUtils;
import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.Assert;
import org.junit.Test;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
+
public class CamelSalesforceMojoIntegrationTest {
private static final String TEST_LOGIN_PROPERTIES = "../test-salesforce-login.properties";
@@ -47,6 +52,26 @@ public class CamelSalesforceMojoIntegrationTest {
// TODO check that the generated code compiles
}
+ @Test
+ public void testExecuteJsonSchema() throws Exception {
+ CamelSalesforceMojo mojo = createMojo();
+ mojo.jsonSchema = true;
+ mojo.jsonSchemaFilename = "test-schema.json";
+ mojo.jsonSchemaId = JsonUtils.DEFAULT_ID_PREFIX;
+
+ // generate code
+ mojo.execute();
+
+ // validate generated schema
+ File schemaFile = mojo.outputDirectory.toPath().resolve("test-schema.json").toFile();
+ Assert.assertTrue("Output file was not created",
+ schemaFile.exists());
+ ObjectMapper objectMapper = JsonUtils.createObjectMapper();
+ JsonSchema jsonSchema = objectMapper.readValue(schemaFile, JsonSchema.class);
+ Assert.assertTrue("Expected root JSON schema with oneOf element",
+ jsonSchema.isObjectSchema() && !((ObjectSchema)jsonSchema).getOneOf().isEmpty());
+ }
+
protected CamelSalesforceMojo createMojo() throws IOException {
CamelSalesforceMojo mojo = new CamelSalesforceMojo();
@@ -82,10 +107,10 @@ public class CamelSalesforceMojoIntegrationTest {
try {
stream = new FileInputStream(TEST_LOGIN_PROPERTIES);
properties.load(stream);
- mojo.clientId = properties.getProperty("clientId");
- mojo.clientSecret = properties.getProperty("clientSecret");
- mojo.userName = properties.getProperty("userName");
- mojo.password = properties.getProperty("password");
+ mojo.clientId = properties.getProperty("salesforce.client.id");
+ mojo.clientSecret = properties.getProperty("salesforce.client.secret");
+ mojo.userName = properties.getProperty("salesforce.username");
+ mojo.password = properties.getProperty("salesforce.password");
} catch (FileNotFoundException e) {
throw new FileNotFoundException("Create a properties file named "
+ TEST_LOGIN_PROPERTIES + " with clientId, clientSecret, userName, password"
[2/8] camel git commit: CAMEL-10744: Added utility APIs in Salesforce
JsonUtils to generate JSON schema from SObjectDescription,
added required modules to Karaf camel-salesforce feature
Posted by dh...@apache.org.
CAMEL-10744: Added utility APIs in Salesforce JsonUtils to generate JSON schema from SObjectDescription, added required modules to Karaf camel-salesforce feature
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e0fe1df7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e0fe1df7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e0fe1df7
Branch: refs/heads/camel-2.19.x
Commit: e0fe1df75a383ebea78a40125d0d55654ce4f31e
Parents: 6f9ed73
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 00:12:19 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:13:01 2017 -0700
----------------------------------------------------------------------
.../camel-salesforce-component/pom.xml | 15 ++
.../salesforce/api/utils/JsonUtils.java | 225 +++++++++++++++++++
.../salesforce/api/utils/JsonUtilsTest.java | 56 +++++
parent/pom.xml | 6 +
.../features/src/main/resources/features.xml | 2 +
5 files changed, 304 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/e0fe1df7/components/camel-salesforce/camel-salesforce-component/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/pom.xml b/components/camel-salesforce/camel-salesforce-component/pom.xml
index b3b0214..f258da5 100644
--- a/components/camel-salesforce/camel-salesforce-component/pom.xml
+++ b/components/camel-salesforce/camel-salesforce-component/pom.xml
@@ -88,6 +88,15 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
+ <!-- json schema -->
+ <dependency>
+ <groupId>com.fasterxml.jackson.jaxrs</groupId>
+ <artifactId>jackson-jaxrs-json-provider</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.module</groupId>
+ <artifactId>jackson-module-jsonSchema</artifactId>
+ </dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
@@ -169,6 +178,12 @@
<version>2.2</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.squareup.okhttp3</groupId>
+ <artifactId>mockwebserver</artifactId>
+ <version>${squareup-okhttp3-version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/camel/blob/e0fe1df7/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
index 2c3a04f..959e00b 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
@@ -16,13 +16,50 @@
*/
package org.apache.camel.component.salesforce.api.utils;
+import java.lang.reflect.Modifier;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.joining;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonValueFormat;
+import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
+import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
+import com.fasterxml.jackson.module.jsonSchema.types.ArraySchema;
+import com.fasterxml.jackson.module.jsonSchema.types.BooleanSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.IntegerSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.NullSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.NumberSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.SimpleTypeSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.StringSchema;
+
+import org.apache.camel.component.salesforce.api.dto.AbstractDTOBase;
+import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
+import org.apache.camel.component.salesforce.api.dto.Address;
+import org.apache.camel.component.salesforce.api.dto.GeoLocation;
+import org.apache.camel.component.salesforce.api.dto.PickListValue;
+import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
+import org.apache.camel.component.salesforce.api.dto.SObjectField;
+import org.apache.camel.impl.DefaultPackageScanClassResolver;
/**
* Factory class for creating {@linkplain com.fasterxml.jackson.databind.ObjectMapper}
*/
public abstract class JsonUtils {
+
+ public static final String SCHEMA4 = "http://json-schema.org/draft-04/schema#";
+ public static final String DEFAULT_ID_PREFIX = "urn:jsonschema:org:apache:camel:component:salesforce:dto";
+
+ private static final String API_DTO_ID = "org:urn:jsonschema:org:apache:camel:component:salesforce:api:dto";
+
public static ObjectMapper createObjectMapper() {
// enable date time support including Java 1.8 ZonedDateTime
ObjectMapper objectMapper = new ObjectMapper();
@@ -31,4 +68,192 @@ public abstract class JsonUtils {
return objectMapper;
}
+ public static String getBasicApiJsonSchema() throws JsonProcessingException {
+ ObjectMapper mapper = createSchemaObjectMapper();
+ JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);
+
+ DefaultPackageScanClassResolver packageScanClassResolver = new DefaultPackageScanClassResolver();
+
+ Set<Class<?>> schemaClasses = new HashSet<>();
+
+ // get non-abstract extensions of AbstractDTOBase
+ schemaClasses.addAll(packageScanClassResolver.findByFilter(
+ type -> !Modifier.isAbstract(type.getModifiers())
+ && AbstractDTOBase.class.isAssignableFrom(type),
+ "org.apache.camel.component.salesforce.api.dto"));
+
+ // get non-abstract extensions of AbstractDTOBase
+ schemaClasses.addAll(packageScanClassResolver.findByFilter(
+ type -> !Modifier.isAbstract(type.getModifiers())
+ && AbstractDTOBase.class.isAssignableFrom(type),
+ "org.apache.camel.component.salesforce.api.dto"));
+
+ Set<Object> allSchemas = new HashSet<>();
+ for (Class<?> aClass : schemaClasses) {
+ JsonSchema jsonSchema = schemaGen.generateSchema(aClass);
+ allSchemas.add(jsonSchema);
+ }
+
+ return getJsonSchemaString(mapper, allSchemas, API_DTO_ID);
+ }
+
+ public static String getJsonSchemaString(ObjectMapper mapper, Set<Object> allSchemas, String id) throws JsonProcessingException {
+ ObjectSchema rootSchema = new ObjectSchema();
+ rootSchema.set$schema(SCHEMA4);
+ rootSchema.setId(id);
+ rootSchema.setOneOf(allSchemas);
+
+ return mapper.writeValueAsString(rootSchema);
+ }
+
+ public static String getSObjectJsonSchema(SObjectDescription description) throws JsonProcessingException {
+ return getSObjectJsonSchema(description, true);
+ }
+
+ public static String getSObjectJsonSchema(SObjectDescription description, boolean addQuerySchema) throws JsonProcessingException {
+ ObjectMapper schemaObjectMapper = createSchemaObjectMapper();
+ return getJsonSchemaString(schemaObjectMapper, getSObjectJsonSchema(schemaObjectMapper, description, DEFAULT_ID_PREFIX, addQuerySchema), DEFAULT_ID_PREFIX);
+ }
+
+ public static Set<Object> getSObjectJsonSchema(ObjectMapper objectMapper, SObjectDescription description, String idPrefix, boolean addQuerySchema) throws JsonProcessingException {
+ Set<Object> allSchemas = new HashSet<>();
+
+ // generate SObject schema from description
+ ObjectSchema sobjectSchema = new ObjectSchema();
+ sobjectSchema.setId(idPrefix + ":" + description.getName());
+ sobjectSchema.setTitle(description.getLabel());
+
+ SimpleTypeSchema addressSchema = null;
+ SimpleTypeSchema geoLocationSchema = null;
+
+ for (SObjectField field : description.getFields()) {
+
+ SimpleTypeSchema fieldSchema = new NullSchema();
+ String soapType = field.getSoapType();
+
+ switch (soapType.substring(soapType.indexOf(':') + 1)) {
+ case "ID": // mapping for tns:ID SOAP type
+ case "string":
+ case "base64Binary":
+ // Salesforce maps any types like string, picklist, reference, etc. to string
+ case "anyType":
+ fieldSchema = new StringSchema();
+ break;
+
+ case "integer":
+ case "int":
+ case "long":
+ case "short":
+ case "byte":
+ case "unsignedInt":
+ case "unsignedShort":
+ case "unsignedByte":
+ fieldSchema = new IntegerSchema();
+ break;
+
+ case "decimal":
+ case "float":
+ case "double":
+ fieldSchema = new NumberSchema();
+ break;
+
+ case "boolean":
+ fieldSchema = new BooleanSchema();
+ break;
+
+ case "dateTime":
+ case "time":
+ case "date":
+ case "g":
+ fieldSchema = new StringSchema();
+ ((StringSchema) fieldSchema).setFormat(JsonValueFormat.DATE_TIME);
+ break;
+
+ case "address":
+ if (addressSchema == null) {
+ addressSchema = getSchemaFromClass(objectMapper, Address.class);
+ }
+ fieldSchema = addressSchema;
+ break;
+
+ case "location":
+ if (geoLocationSchema == null) {
+ geoLocationSchema = getSchemaFromClass(objectMapper, GeoLocation.class);
+ }
+ fieldSchema = geoLocationSchema;
+ break;
+
+ default:
+ throw new IllegalArgumentException("Unsupported type " + soapType);
+ }
+
+ List<PickListValue> picklistValues = field.getPicklistValues();
+ switch (field.getType()) {
+ case "picklist":
+ fieldSchema.asStringSchema().setEnums(
+ picklistValues == null ? Collections.EMPTY_SET : picklistValues.stream()
+ .map(PickListValue::getValue)
+ .distinct()
+ .collect(Collectors.toSet()));
+ break;
+
+ case "multipicklist":
+ // TODO regex needs more work to not allow values not separated by ','
+ fieldSchema.asStringSchema().setPattern(picklistValues == null ? "" : picklistValues.stream()
+ .map(val -> "(,?(" + val.getValue() + "))")
+ .distinct()
+ .collect(joining("|", "(", ")")));
+ break;
+
+ default:
+ // nothing to fix
+ }
+
+ // additional field properties
+ fieldSchema.setTitle(field.getLabel());
+ fieldSchema.setDefault(field.getDefaultValue());
+ if (field.isUpdateable() != null) {
+ fieldSchema.setReadonly(!field.isUpdateable());
+ }
+
+ // add property to sobject schema
+ if (field.isNillable()) {
+ sobjectSchema.putOptionalProperty(field.getName(), fieldSchema);
+ } else {
+ sobjectSchema.putProperty(field.getName(), fieldSchema);
+ }
+ }
+
+ // add sobject schema to root schema
+ allSchemas.add(sobjectSchema);
+
+ if (addQuerySchema) {
+ // add a simple query schema for this sobject for lookups, etc.
+ ObjectSchema queryRecords = getSchemaFromClass(objectMapper, AbstractQueryRecordsBase.class);
+ queryRecords.setId(idPrefix + ":QueryRecords" + description.getName());
+
+ ObjectSchema refSchema = new ObjectSchema();
+ refSchema.set$ref(sobjectSchema.getId());
+
+ ArraySchema recordsProperty = new ArraySchema();
+ recordsProperty.setItems(new ArraySchema.SingleItems(refSchema));
+ queryRecords.putProperty("records", recordsProperty);
+
+ allSchemas.add(queryRecords);
+ }
+
+ return allSchemas;
+ }
+
+ public static ObjectMapper createSchemaObjectMapper() {
+ ObjectMapper objectMapper = createObjectMapper();
+ objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
+ objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+ return objectMapper;
+ }
+
+ private static ObjectSchema getSchemaFromClass(ObjectMapper objectMapper, Class<?> type) throws JsonMappingException {
+ return new JsonSchemaGenerator(objectMapper).generateSchema(type).asObjectSchema();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/e0fe1df7/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
new file mode 100644
index 0000000..cd59a9e
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
@@ -0,0 +1,56 @@
+package org.apache.camel.component.salesforce.api.utils;
+
+import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
+import org.apache.camel.component.salesforce.dto.generated.Account;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Unit test for {@link JsonUtils}
+ */
+public class JsonUtilsTest {
+
+ public static final Logger LOG = LoggerFactory.getLogger(JsonUtilsTest.class);
+
+ @Test
+ public void getBasicApiJsonSchema() throws Exception {
+
+ // create basic api dto schema
+ LOG.info("Basic Api Schema...");
+ String basicApiJsonSchema = JsonUtils.getBasicApiJsonSchema();
+ LOG.info(basicApiJsonSchema);
+
+ // parse schema to validate
+ ObjectMapper objectMapper = JsonUtils.createObjectMapper();
+ JsonSchema jsonSchema = objectMapper.readValue(basicApiJsonSchema, JsonSchema.class);
+ assertTrue(jsonSchema.isObjectSchema());
+ assertFalse(((ObjectSchema)jsonSchema).getOneOf().isEmpty());
+ }
+
+ @Test
+ public void getSObjectJsonSchema() throws Exception {
+
+ // create sobject dto schema
+ SObjectDescription description = new Account().description();
+
+ LOG.info("SObject Schema...");
+ String sObjectJsonSchema = JsonUtils.getSObjectJsonSchema(description);
+ LOG.info(sObjectJsonSchema);
+
+ // parse schema to validate
+ ObjectMapper objectMapper = JsonUtils.createObjectMapper();
+ JsonSchema jsonSchema = objectMapper.readValue(sObjectJsonSchema, JsonSchema.class);
+ assertTrue(jsonSchema.isObjectSchema());
+ assertEquals(2, ((ObjectSchema)jsonSchema).getOneOf().size());
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/e0fe1df7/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 6714d0d..cfbc5e4 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -622,6 +622,7 @@
<spymemcached-bundle-version>2.5_2</spymemcached-bundle-version> <!-- FIXME cmueller: not in sync! -->
<spymemcached-version>2.12.0</spymemcached-version>
<squareup-okhttp-version>2.7.5</squareup-okhttp-version>
+ <squareup-okhttp3-version>3.8.1</squareup-okhttp3-version>
<squareup-okhttp-bundle-version>2.7.5_1</squareup-okhttp-bundle-version>
<squareup-okio-version>1.11.0</squareup-okio-version>
<squareup-okio-bundle-version>1.11.0_1</squareup-okio-bundle-version>
@@ -3457,6 +3458,11 @@
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>${jackson2-version}</version>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.module</groupId>
+ <artifactId>jackson-module-jsonSchema</artifactId>
+ <version>${jackson2-version}</version>
+ </dependency>
<dependency>
<groupId>io.netty</groupId>
http://git-wip-us.apache.org/repos/asf/camel/blob/e0fe1df7/platforms/karaf/features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index a6e2213..1f23fda 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -1574,6 +1574,8 @@
<bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle>
<bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson2-version}</bundle>
<bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-databind/${jackson2-version}</bundle>
+ <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-jaxrs-json-provider/${jackson2-version}</bundle>
+ <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-module-jsonSchema/${jackson2-version}</bundle>
<bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xstream/${xstream-bundle-version}</bundle>
<bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/${xpp3-bundle-version}</bundle>
<bundle dependency='true'>mvn:javax.servlet/javax.servlet-api/${javax.servlet-api-version}</bundle>
[7/8] camel git commit: CAMEL-10743: Added support for rawPayload
parameter in Salesforce Streaming API
Posted by dh...@apache.org.
CAMEL-10743: Added support for rawPayload parameter in Salesforce Streaming API
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bb2adef7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bb2adef7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bb2adef7
Branch: refs/heads/camel-2.19.x
Commit: bb2adef735af8b0e301651a391eff8fde246f3ba
Parents: da79c3b
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 00:38:52 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:14:26 2017 -0700
----------------------------------------------------------------------
.../component/salesforce/SalesforceConsumer.java | 5 ++++-
.../salesforce/StreamingApiIntegrationTest.java | 17 +++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/bb2adef7/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
index df29dd8..0484aee 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
@@ -174,7 +174,10 @@ public class SalesforceConsumer extends DefaultConsumer {
final String sObjectString = objectMapper.writeValueAsString(sObject);
log.debug("Received SObject: {}", sObjectString);
- if (sObjectClass == null) {
+ if (endpoint.getConfiguration().getRawPayload()) {
+ // return sobject string as exchange body
+ in.setBody(sObjectString);
+ } else if (sObjectClass == null) {
// return sobject map as exchange body
in.setBody(sObject);
} else {
http://git-wip-us.apache.org/repos/asf/camel/blob/bb2adef7/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/StreamingApiIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/StreamingApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/StreamingApiIntegrationTest.java
index e0ed9ff..33139df 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/StreamingApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/StreamingApiIntegrationTest.java
@@ -36,6 +36,12 @@ public class StreamingApiIntegrationTest extends AbstractSalesforceTestBase {
mock.expectedHeaderReceived("CamelSalesforceTopicName", "CamelTestTopic");
mock.expectedHeaderReceived("CamelSalesforceChannel", "/topic/CamelTestTopic");
+ MockEndpoint rawPayloadMock = getMockEndpoint("mock:RawPayloadCamelTestTopic");
+ rawPayloadMock.expectedMessageCount(1);
+ // assert expected static headers
+ rawPayloadMock.expectedHeaderReceived("CamelSalesforceTopicName", "CamelTestTopic");
+ rawPayloadMock.expectedHeaderReceived("CamelSalesforceChannel", "/topic/CamelTestTopic");
+
Merchandise__c merchandise = new Merchandise__c();
merchandise.setName("TestNotification");
merchandise.setDescription__c("Merchandise for testing Streaming API updated on " + ZonedDateTime.now().toString());
@@ -50,6 +56,7 @@ public class StreamingApiIntegrationTest extends AbstractSalesforceTestBase {
mock.assertIsSatisfied();
final Message in = mock.getExchanges().get(0).getIn();
merchandise = in.getMandatoryBody(Merchandise__c.class);
+
assertNotNull("Missing event body", merchandise);
log.info("Merchandise notification: {}", merchandise.toString());
assertNotNull("Missing field Id", merchandise.getId());
@@ -60,6 +67,11 @@ public class StreamingApiIntegrationTest extends AbstractSalesforceTestBase {
assertNotNull("Missing header CamelSalesforceEventType", in.getHeader("CamelSalesforceEventType"));
assertNotNull("Missing header CamelSalesforceCreatedDate", in.getHeader("CamelSalesforceCreatedDate"));
+ // validate raw payload message
+ rawPayloadMock.assertIsSatisfied();
+ final Message inRaw = rawPayloadMock.getExchanges().get(0).getIn();
+ assertTrue("Expected String message body for Raw Payload", inRaw.getBody() instanceof String);
+
} finally {
// remove the test record
assertNull(template().requestBody("direct:deleteSObjectWithId", merchandise));
@@ -89,6 +101,11 @@ public class StreamingApiIntegrationTest extends AbstractSalesforceTestBase {
+ "updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c").
to("mock:CamelTestTopic");
+ from("salesforce:CamelTestTopic?rawPayload=true¬ifyForFields=ALL&"
+ + "notifyForOperationCreate=true¬ifyForOperationDelete=true¬ifyForOperationUpdate=true&"
+ + "updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c").
+ to("mock:RawPayloadCamelTestTopic");
+
// route for creating test record
from("direct:upsertSObject").
to("salesforce:upsertSObject?SObjectIdName=Name");
[4/8] camel git commit: CAMEL-10743: Add rawPayload parameter to
support XML or JSON String input and output with Salesforce endpoints,
avoiding generating DTOs
Posted by dh...@apache.org.
CAMEL-10743: Add rawPayload parameter to support XML or JSON String input and output with Salesforce endpoints, avoiding generating DTOs
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b356aa70
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b356aa70
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b356aa70
Branch: refs/heads/camel-2.19.x
Commit: b356aa706a131ec17c24f4a076907f10f3010d5f
Parents: 8ef01f9
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 00:34:32 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:13:45 2017 -0700
----------------------------------------------------------------------
.../src/main/docs/salesforce-component.adoc | 3 ++-
.../component/salesforce/SalesforceComponent.java | 2 +-
.../salesforce/SalesforceEndpointConfig.java | 16 ++++++++++++++++
.../processor/AbstractSalesforceProcessor.java | 2 ++
4 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/b356aa70/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
index c950e34..ff4bf4f 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
@@ -532,7 +532,7 @@ with the following path and query parameters:
| **topicName** | The name of the topic to use | | String
|=======================================================================
-#### Query Parameters (42 parameters):
+#### Query Parameters (43 parameters):
[width="100%",cols="2,5,^1,2",options="header"]
|=======================================================================
@@ -561,6 +561,7 @@ with the following path and query parameters:
| **notifyForOperationUndelete** (common) | Notify for un-delete operation defaults to false (API version = 29.0) | | Boolean
| **notifyForOperationUpdate** (common) | Notify for update operation defaults to false (API version = 29.0) | | Boolean
| **objectMapper** (common) | Custom Jackson ObjectMapper to use when serializing/deserializing Salesforce objects. | | ObjectMapper
+| **rawPayload** (common) | Use raw payload String for request and response (either JSON or XML depending on format) instead of DTOs false by default | false | boolean
| **reportId** (common) | Salesforce1 Analytics report Id | | String
| **reportMetadata** (common) | Salesforce1 Analytics report metadata for filtering | | ReportMetadata
| **resultId** (common) | Bulk API Result ID | | String
http://git-wip-us.apache.org/repos/asf/camel/blob/b356aa70/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
index 3147f53..c793aa2 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java
@@ -373,7 +373,7 @@ public class SalesforceComponent extends DefaultComponent implements VerifiableC
LOG.info("Found {} generated classes in packages: {}", classMap.size(), Arrays.asList(packages));
} else {
// use an empty map to avoid NPEs later
- LOG.warn("Missing property packages, getSObject* operations will NOT work");
+ LOG.warn("Missing property packages, getSObject* operations will NOT work without property rawPayload=true");
classMap = new HashMap<String, Class<?>>(0);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/b356aa70/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
index 5363c0c..a23e83d 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
@@ -49,6 +49,8 @@ public class SalesforceEndpointConfig implements Cloneable {
// parameters for Rest API
public static final String FORMAT = "format";
+ public static final String RAW_PAYLOAD = "rawPayload";
+
public static final String SOBJECT_NAME = "sObjectName";
public static final String SOBJECT_ID = "sObjectId";
public static final String SOBJECT_FIELDS = "sObjectFields";
@@ -100,6 +102,8 @@ public class SalesforceEndpointConfig implements Cloneable {
// Rest API properties
@UriParam
private PayloadFormat format = PayloadFormat.JSON;
+ @UriParam
+ private boolean rawPayload;
@UriParam(displayName = "SObject Name")
private String sObjectName;
@UriParam(displayName = "SObject Id")
@@ -213,6 +217,18 @@ public class SalesforceEndpointConfig implements Cloneable {
this.format = format;
}
+ public boolean getRawPayload() {
+ return rawPayload;
+ }
+
+ /**
+ * Use raw payload {@link String} for request and response (either JSON or XML depending on {@code format}),
+ * instead of DTOs, false by default
+ */
+ public void setRawPayload(boolean rawPayload) {
+ this.rawPayload = rawPayload;
+ }
+
public String getApiVersion() {
return apiVersion;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/b356aa70/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
index 3d25e90..2b5119e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractSalesforceProcessor.java
@@ -46,6 +46,7 @@ public abstract class AbstractSalesforceProcessor implements SalesforceProcessor
protected final OperationName operationName;
protected final SalesforceSession session;
protected final SalesforceHttpClient httpClient;
+ protected final boolean rawPayload;
public AbstractSalesforceProcessor(SalesforceEndpoint endpoint) {
this.endpoint = endpoint;
@@ -55,6 +56,7 @@ public abstract class AbstractSalesforceProcessor implements SalesforceProcessor
final SalesforceComponent component = endpoint.getComponent();
this.session = component.getSession();
this.httpClient = endpoint.getConfiguration().getHttpClient();
+ this.rawPayload = endpoint.getConfiguration().getRawPayload();
}
@Override
[6/8] camel git commit: CAMEL-10743: Added support for rawPayload
parameter in Salesforce REST APIs
Posted by dh...@apache.org.
CAMEL-10743: Added support for rawPayload parameter in Salesforce REST APIs
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/da79c3b5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/da79c3b5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/da79c3b5
Branch: refs/heads/camel-2.19.x
Commit: da79c3b5cf1b8b26f06d5c490d8c69d90c45081c
Parents: 6787c74
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 00:38:21 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:14:12 2017 -0700
----------------------------------------------------------------------
.../processor/AbstractRestProcessor.java | 6 +
.../internal/processor/JsonRestProcessor.java | 6 +-
.../internal/processor/XmlRestProcessor.java | 3 +-
.../component/salesforce/RawPayloadTest.java | 240 +++++++++++++++++++
.../salesforce/RestApiIntegrationTest.java | 1 +
5 files changed, 252 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/da79c3b5/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
index 758cc57..74be887 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/AbstractRestProcessor.java
@@ -810,6 +810,12 @@ public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor
protected abstract InputStream getRequestStream(Object object) throws SalesforceException;
private void setResponseClass(Exchange exchange, String sObjectName) throws SalesforceException {
+
+ // nothing to do if using rawPayload
+ if (rawPayload) {
+ return;
+ }
+
Class<?> sObjectClass;
if (sObjectName != null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/da79c3b5/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
index d52601f..a8086f7 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
@@ -184,13 +184,13 @@ public class JsonRestProcessor extends AbstractRestProcessor {
}
} else if (responseEntity != null) {
// do we need to un-marshal a response
- Object response = null;
+ final Object response;
Class<?> responseClass = exchange.getProperty(RESPONSE_CLASS, Class.class);
- if (responseClass != null) {
+ if (!rawPayload && responseClass != null) {
response = objectMapper.readValue(responseEntity, responseClass);
} else {
TypeReference<?> responseType = exchange.getProperty(RESPONSE_TYPE, TypeReference.class);
- if (responseType != null) {
+ if (!rawPayload && responseType != null) {
response = objectMapper.readValue(responseEntity, responseType);
} else {
// return the response as a stream, for getBlobField
http://git-wip-us.apache.org/repos/asf/camel/blob/da79c3b5/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
index 6650ff0..3bcba03 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
@@ -33,6 +33,7 @@ import com.thoughtworks.xstream.io.xml.CompactWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.thoughtworks.xstream.mapper.CachingMapper;
import com.thoughtworks.xstream.mapper.CannotResolveClassException;
+
import org.apache.camel.AsyncCallback;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
@@ -236,7 +237,7 @@ public class XmlRestProcessor extends AbstractRestProcessor {
// do we need to un-marshal a response
final Class<?> responseClass = exchange.getProperty(RESPONSE_CLASS, Class.class);
Object response;
- if (responseClass != null) {
+ if (!rawPayload && responseClass != null) {
// its ok to call this multiple times, as xstream ignores duplicate calls
localXStream.processAnnotations(responseClass);
final String responseAlias = exchange.getProperty(RESPONSE_ALIAS, String.class);
http://git-wip-us.apache.org/repos/asf/camel/blob/da79c3b5/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
new file mode 100644
index 0000000..7d6941c
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
@@ -0,0 +1,240 @@
+/**
+ * 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.component.salesforce;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.eclipse.jetty.http.HttpHeader;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+import okhttp3.HttpUrl;
+import okhttp3.mockwebserver.Dispatcher;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
+
+@Category(Standalone.class)
+@RunWith(Parameterized.class)
+public class RawPayloadTest extends AbstractSalesforceTestBase {
+
+ private static final String OAUTH2_TOKEN_PATH = "/services/oauth2/token";
+ private static final String XML_RESPONSE = "<response/>";
+ private static final String JSON_RESPONSE = "{ \"response\" : \"mock\" }";
+
+ private static HttpUrl loginUrl;
+ private static MockWebServer server;
+
+ @Parameter
+ public static String format;
+
+ @Parameter(1)
+ public static String endpointUri;
+
+ private static String lastFormat;
+ private static String expectedResponse;
+ private static String requestBody;
+ private static Map<String, Object> headers;
+
+ @Override
+ protected void createComponent() throws Exception {
+
+ // create the component
+ SalesforceComponent component = new SalesforceComponent();
+ final SalesforceEndpointConfig config = new SalesforceEndpointConfig();
+ config.setApiVersion(System.getProperty("apiVersion", salesforceApiVersionToUse()));
+ component.setConfig(config);
+
+ SalesforceLoginConfig dummyLoginConfig = new SalesforceLoginConfig();
+ dummyLoginConfig.setClientId("ignored");
+ dummyLoginConfig.setClientSecret("ignored");
+ dummyLoginConfig.setRefreshToken("ignored");
+ dummyLoginConfig.setLoginUrl(loginUrl.toString());
+ component.setLoginConfig(dummyLoginConfig);
+
+ // add it to context
+ context().addComponent("salesforce", component);
+ }
+
+ @AfterClass
+ public static void shutDownServer() throws IOException {
+ // shutdown mock server
+ if (server != null) {
+ server.shutdown();
+ }
+ }
+
+ @BeforeClass
+ public static void startServer() throws IOException {
+
+ // create mock server
+ server = new MockWebServer();
+
+ server.setDispatcher(new Dispatcher() {
+ @Override
+ public MockResponse dispatch(RecordedRequest recordedRequest) throws InterruptedException {
+ if (recordedRequest.getPath().equals(OAUTH2_TOKEN_PATH)) {
+ return new MockResponse()
+ .setResponseCode(200)
+ .setBody("{ \"access_token\": \"mock_token\", \"instance_url\": \"" + loginUrl + "\"}");
+ } else {
+ return new MockResponse()
+ .setResponseCode(200)
+ .setHeader(HttpHeader.CONTENT_TYPE.toString(), recordedRequest.getHeader(HttpHeader.CONTENT_TYPE.toString()))
+ .setBody("XML".equals(format) ? XML_RESPONSE : JSON_RESPONSE);
+ }
+ }
+ });
+
+ // start the server
+ server.start();
+ loginUrl = server.url("");
+ }
+
+ @Before
+ public void setupRequestResponse() {
+ if (!format.equals(lastFormat)) {
+ // expected response and test request
+ final boolean isXml = "XML".equals(format);
+ expectedResponse = isXml ? XML_RESPONSE : JSON_RESPONSE;
+ if (isXml) {
+ requestBody = "<request/>";
+ } else {
+ requestBody = "{ \"request\" : \"mock\" }";
+ }
+ headers = new HashMap<>();
+ headers.put("sObjectId", "mockId");
+ headers.put("sObjectIdValue", "mockIdValue");
+ headers.put("id", "mockId");
+ headers.put(SalesforceEndpointConfig.APEX_QUERY_PARAM_PREFIX + "id", "mockId");
+
+ lastFormat = format;
+ }
+ }
+
+ @Test
+ public void testRestApi() throws Exception {
+ final String responseBody = template().requestBodyAndHeaders(endpointUri, requestBody, headers, String.class);
+ assertNotNull("Null response for endpoint " + endpointUri, responseBody);
+ assertEquals("Unexpected response for endpoint " + endpointUri, expectedResponse, responseBody);
+ }
+
+ @Override
+ protected RouteBuilder doCreateRouteBuilder() throws Exception {
+
+ // create test route
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+
+ // testGetVersion
+ from("direct:getVersions").to("salesforce:getVersions?rawPayload=true&format=" + format);
+
+ // testGetResources
+ from("direct:getResources").to("salesforce:getResources?rawPayload=true&format=" + format);
+
+ // testGetGlobalObjects
+ from("direct:getGlobalObjects").to("salesforce:getGlobalObjects?rawPayload=true&format=" + format);
+
+ // testGetBasicInfo
+ from("direct:getBasicInfo").to("salesforce:getBasicInfo?sObjectName=Merchandise__c&rawPayload=true&format=" + format);
+
+ // testGetDescription
+ from("direct:getDescription")
+ .to("salesforce:getDescription?sObjectName=Merchandise__c&rawPayload=true&format=" + format);
+
+ // testGetSObject
+ from("direct:getSObject")
+ .to("salesforce:getSObject?sObjectName=Merchandise__c&sObjectFields=Description__c,Price__c&rawPayload=true&format="
+ + format);
+
+ // testCreateSObject
+ from("direct:createSObject").to("salesforce:createSObject?sObjectName=Merchandise__c&rawPayload=true&format=" + format);
+
+ // testUpdateSObject
+ from("direct:updateSObject").to("salesforce:updateSObject?sObjectName=Merchandise__c&rawPayload=true&format=" + format);
+
+ // testDeleteSObject
+ from("direct:deleteSObject").to("salesforce:deleteSObject?sObjectName=Merchandise__c&rawPayload=true&format=" + format);
+
+ // testGetSObjectWithId
+ from("direct:getSObjectWithId")
+ .to("salesforce:getSObjectWithId?sObjectName=Line_Item__c&sObjectIdName=Name&rawPayload=true&format=" + format);
+
+ // testUpsertSObject
+ from("direct:upsertSObject")
+ .to("salesforce:upsertSObject?sObjectName=Line_Item__c&sObjectIdName=Name&rawPayload=true&format=" + format);
+
+ // testDeleteSObjectWithId
+ from("direct:deleteSObjectWithId")
+ .to("salesforce:deleteSObjectWithId?sObjectName=Line_Item__c&sObjectIdName=Name&rawPayload=true&format=" + format);
+
+ // testGetBlobField
+ from("direct:getBlobField")
+ .to("salesforce:getBlobField?sObjectName=Document&sObjectBlobFieldName=Body&rawPayload=true&format=" + format);
+
+ // testQuery
+ from("direct:query").to("salesforce:query?sObjectQuery=SELECT name from Line_Item__c&rawPayload=true&format=" + format);
+
+ // testQueryAll
+ from("direct:queryAll")
+ .to("salesforce:queryAll?sObjectQuery=SELECT name from Line_Item__c&rawPayload=true&format=" + format);
+
+ // testSearch
+ from("direct:search").to("salesforce:search?sObjectSearch=FIND {Wee}&rawPayload=true&format=" + format);
+
+ // testApexCall
+ from("direct:apexCallGet")
+ .to("salesforce:apexCall?apexMethod=GET&apexUrl=Merchandise/{id}&sObjectName=Merchandise__c&rawPayload=true&format="
+ + format);
+
+ from("direct:apexCallGetWithId").to("salesforce:apexCall/Merchandise/?apexMethod=GET&id=dummyId&rawPayload=true&format="
+ + format);
+
+ from("direct:apexCallPatch").to("salesforce:apexCall/Merchandise/?rawPayload=true&format=" + format
+ + "&apexMethod=PATCH");
+ }
+ };
+ }
+
+ @Parameters(name = "format = {0}, endpoint = {1}")
+ public static List<String[]> parameters() {
+ final String[] endpoints = {"direct:getVersions", "direct:getResources", "direct:getGlobalObjects",
+ "direct:getBasicInfo", "direct:getDescription", "direct:getSObject", "direct:createSObject",
+ "direct:updateSObject", "direct:deleteSObject", "direct:getSObjectWithId", "direct:upsertSObject",
+ "direct:deleteSObjectWithId", "direct:getBlobField", "direct:query", "direct:queryAll",
+ "direct:search", "direct:apexCallGet", "direct:apexCallGetWithId", "direct:apexCallPatch"};
+
+ final String[] formats = {"XML", "JSON"};
+
+ return Stream.of(formats).flatMap(f -> Stream.of(endpoints).map(e -> new String[]{f, e}))
+ .collect(Collectors.toList());
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/da79c3b5/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
index ccd09d9..13485ce 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
@@ -134,6 +134,7 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase {
merchandise.setName("Test Merchandise");
merchandise.setPrice__c(10.0);
merchandise.setTotal_Inventory__c(100.0);
+ merchandise.setDescription__c("Test Merchandise!");
final CreateSObjectResult result = template().requestBody("salesforce:createSObject", merchandise,
CreateSObjectResult.class);
[5/8] camel git commit: CAMEL-10743: Added rawPayload parameter in
Salesforce Spring Boot starter
Posted by dh...@apache.org.
CAMEL-10743: Added rawPayload parameter in Salesforce Spring Boot starter
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6787c748
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6787c748
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6787c748
Branch: refs/heads/camel-2.19.x
Commit: 6787c7489a0eb676ff1260cb00cc73f3be8ddd37
Parents: b356aa7
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 00:35:41 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:14:01 2017 -0700
----------------------------------------------------------------------
.../springboot/SalesforceComponentConfiguration.java | 14 ++++++++++++++
1 file changed, 14 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6787c748/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
index 3cde2be..40dcbe7 100644
--- a/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
@@ -427,6 +427,12 @@ public class SalesforceComponentConfiguration {
*/
private PayloadFormat format;
/**
+ * Use raw payload {@link String} for request and response (either JSON
+ * or XML depending on {@code format} ), instead of DTOs, false by
+ * default
+ */
+ private Boolean rawPayload = false;
+ /**
* Salesforce API version, defaults to
* SalesforceEndpointConfig.DEFAULT_VERSION
*/
@@ -654,6 +660,14 @@ public class SalesforceComponentConfiguration {
this.format = format;
}
+ public Boolean getRawPayload() {
+ return rawPayload;
+ }
+
+ public void setRawPayload(Boolean rawPayload) {
+ this.rawPayload = rawPayload;
+ }
+
public String getApiVersion() {
return apiVersion;
}
[8/8] camel git commit: CAMEL-10743: Fixed CS errors
Posted by dh...@apache.org.
CAMEL-10743: Fixed CS errors
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/862be0ee
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/862be0ee
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/862be0ee
Branch: refs/heads/camel-2.19.x
Commit: 862be0eea31732ea3bfcefec465a07d429d3f27b
Parents: bb2adef
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Thu Aug 3 01:34:34 2017 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Thu Aug 3 01:34:34 2017 -0700
----------------------------------------------------------------------
.../salesforce/internal/SalesforceSession.java | 2 +-
.../component/salesforce/RawPayloadTest.java | 32 ++++++++++----------
.../salesforce/api/utils/JsonUtilsTest.java | 26 +++++++++++++---
.../CamelSalesforceMojoIntegrationTest.java | 8 ++---
4 files changed, 42 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/862be0ee/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 a7a9303..9ed4404 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,7 @@ public class SalesforceSession implements Service {
// don't log token or instance URL for security reasons
LOG.info("Login successful");
accessToken = token.getAccessToken();
- instanceUrl = Optional.ofNullable(config.getInstanceUrl()).orElse(token.getInstanceUrl());
+ instanceUrl = token.getInstanceUrl();
// strip trailing '/'
int lastChar = instanceUrl.length() - 1;
if (instanceUrl.charAt(lastChar) == '/') {
http://git-wip-us.apache.org/repos/asf/camel/blob/862be0ee/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
index 7d6941c..c7c74af 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
@@ -23,6 +23,12 @@ import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import okhttp3.HttpUrl;
+import okhttp3.mockwebserver.Dispatcher;
+import okhttp3.mockwebserver.MockResponse;
+import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
+
import org.apache.camel.builder.RouteBuilder;
import org.eclipse.jetty.http.HttpHeader;
import org.junit.AfterClass;
@@ -35,16 +41,16 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
-import okhttp3.HttpUrl;
-import okhttp3.mockwebserver.Dispatcher;
-import okhttp3.mockwebserver.MockResponse;
-import okhttp3.mockwebserver.MockWebServer;
-import okhttp3.mockwebserver.RecordedRequest;
-
@Category(Standalone.class)
@RunWith(Parameterized.class)
public class RawPayloadTest extends AbstractSalesforceTestBase {
+ @Parameter
+ public static String format;
+
+ @Parameter(1)
+ public static String endpointUri;
+
private static final String OAUTH2_TOKEN_PATH = "/services/oauth2/token";
private static final String XML_RESPONSE = "<response/>";
private static final String JSON_RESPONSE = "{ \"response\" : \"mock\" }";
@@ -52,12 +58,6 @@ public class RawPayloadTest extends AbstractSalesforceTestBase {
private static HttpUrl loginUrl;
private static MockWebServer server;
- @Parameter
- public static String format;
-
- @Parameter(1)
- public static String endpointUri;
-
private static String lastFormat;
private static String expectedResponse;
private static String requestBody;
@@ -227,10 +227,10 @@ public class RawPayloadTest extends AbstractSalesforceTestBase {
@Parameters(name = "format = {0}, endpoint = {1}")
public static List<String[]> parameters() {
final String[] endpoints = {"direct:getVersions", "direct:getResources", "direct:getGlobalObjects",
- "direct:getBasicInfo", "direct:getDescription", "direct:getSObject", "direct:createSObject",
- "direct:updateSObject", "direct:deleteSObject", "direct:getSObjectWithId", "direct:upsertSObject",
- "direct:deleteSObjectWithId", "direct:getBlobField", "direct:query", "direct:queryAll",
- "direct:search", "direct:apexCallGet", "direct:apexCallGetWithId", "direct:apexCallPatch"};
+ "direct:getBasicInfo", "direct:getDescription", "direct:getSObject", "direct:createSObject",
+ "direct:updateSObject", "direct:deleteSObject", "direct:getSObjectWithId", "direct:upsertSObject",
+ "direct:deleteSObjectWithId", "direct:getBlobField", "direct:query", "direct:queryAll",
+ "direct:search", "direct:apexCallGet", "direct:apexCallGetWithId", "direct:apexCallPatch"};
final String[] formats = {"XML", "JSON"};
http://git-wip-us.apache.org/repos/asf/camel/blob/862be0ee/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
index cd59a9e..ccbe730 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
@@ -1,15 +1,31 @@
+/**
+ * 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.component.salesforce.api.utils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
+
import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
import org.apache.camel.component.salesforce.dto.generated.Account;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
-import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -53,4 +69,4 @@ public class JsonUtilsTest {
assertEquals(2, ((ObjectSchema)jsonSchema).getOneOf().size());
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/862be0ee/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
index 2f75608..4d47e2f 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
@@ -23,6 +23,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
+import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
+
import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
import org.apache.camel.component.salesforce.SalesforceLoginConfig;
import org.apache.camel.component.salesforce.api.utils.JsonUtils;
@@ -30,10 +34,6 @@ import org.apache.maven.plugin.logging.SystemStreamLog;
import org.junit.Assert;
import org.junit.Test;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
-import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
-
public class CamelSalesforceMojoIntegrationTest {
private static final String TEST_LOGIN_PROPERTIES = "../test-salesforce-login.properties";