Updated Branches: refs/heads/master 3553b95ad -> 512b0a165
CAMEL-6428: camel-salesforce component. Thanks to Dhiraj Bokde for the contribution. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/512b0a16 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/512b0a16 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/512b0a16 Branch: refs/heads/master Commit: 512b0a165273dd0296580997fef6002635ed034b Parents: 3553b95 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Jun 8 08:57:59 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Jun 8 08:57:59 2013 +0200 ---------------------------------------------------------------------- .../camel-salesforce-component/pom.xml | 5 + .../component/salesforce/SalesforceComponent.java | 96 +++++++- .../component/salesforce/SalesforceConsumer.java | 13 +- .../component/salesforce/SalesforceEndpoint.java | 11 +- .../salesforce/SalesforceEndpointConfig.java | 58 +++-- .../component/salesforce/SalesforceProducer.java | 2 +- .../internal/client/DefaultRestClient.java | 27 +- .../internal/processor/AbstractRestProcessor.java | 25 +-- .../salesforce/BulkApiBatchIntegrationTest.java | 18 +- .../component/salesforce/LoginConfigHelper.java | 2 +- .../salesforce/RestApiIntegrationTest.java | 56 ++--- .../SalesforceComponentConfigurationTest.java | 201 +++++++++++++++ .../apache/camel/maven/CamelSalesforceMojo.java | 34 +-- .../maven/CamelSalesforceMojoIntegrationTest.java | 2 +- 14 files changed, 410 insertions(+), 140 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 5d6c831..933e2f5 100644 --- a/components/camel-salesforce/camel-salesforce-component/pom.xml +++ b/components/camel-salesforce/camel-salesforce-component/pom.xml @@ -45,6 +45,11 @@ <artifactId>camel-core</artifactId> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>spi-annotations</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 57ee583..4f075e0 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 @@ -16,35 +16,42 @@ */ package org.apache.camel.component.salesforce; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - +import org.apache.camel.CamelContext; +import org.apache.camel.ComponentConfiguration; import org.apache.camel.Endpoint; import org.apache.camel.component.salesforce.api.SalesforceException; +import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase; import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase; import org.apache.camel.component.salesforce.internal.OperationName; import org.apache.camel.component.salesforce.internal.SalesforceSession; import org.apache.camel.component.salesforce.internal.streaming.SubscriptionHelper; -import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.impl.UriEndpointComponent; +import org.apache.camel.spi.EndpointCompleter; import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.ReflectionHelper; import org.apache.camel.util.ServiceHelper; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.RedirectListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Represents the component that manages {@link SalesforceEndpoint}. */ -public class SalesforceComponent extends DefaultComponent { +public class SalesforceComponent extends UriEndpointComponent implements EndpointCompleter { private static final Logger LOG = LoggerFactory.getLogger(SalesforceComponent.class); private static final int MAX_CONNECTIONS_PER_ADDRESS = 20; private static final int CONNECTION_TIMEOUT = 60000; private static final int RESPONSE_TIMEOUT = 60000; + private static final Pattern SOBJECT_NAME_PATTERN = Pattern.compile("^.*[\\?&]sObjectName=([^&,]+).*$"); private SalesforceLoginConfig loginConfig; private SalesforceEndpointConfig config; @@ -58,6 +65,14 @@ public class SalesforceComponent extends DefaultComponent { // Lazily created helper for consumer endpoints private SubscriptionHelper subscriptionHelper; + public SalesforceComponent() { + super(SalesforceEndpoint.class); + } + + public SalesforceComponent(CamelContext context) { + super(context, SalesforceEndpoint.class); + } + protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { // get Operation from remaining URI OperationName operationName = null; @@ -151,7 +166,8 @@ public class SalesforceComponent extends DefaultComponent { private Map<String, Class<?>> parsePackages() { Map<String, Class<?>> result = new HashMap<String, Class<?>>(); - Set<Class<?>> classes = getCamelContext().getPackageScanClassResolver().findImplementations(AbstractSObjectBase.class, packages); + Set<Class<?>> classes = getCamelContext().getPackageScanClassResolver(). + findImplementations(AbstractSObjectBase.class, packages); for (Class<?> aClass : classes) { // findImplementations also returns AbstractSObjectBase for some reason!!! if (AbstractSObjectBase.class != aClass) { @@ -198,6 +214,70 @@ public class SalesforceComponent extends DefaultComponent { return subscriptionHelper; } + @Override + public List<String> completeEndpointPath(ComponentConfiguration configuration, String completionText) { + final List<String> result = new ArrayList<String>(); + // return operations names on empty completion text + final boolean empty = ObjectHelper.isEmpty(completionText); + if (empty || completionText.indexOf('?') == -1) { + if (empty) { + completionText = ""; + } + final OperationName[] values = OperationName.values(); + for (OperationName val : values) { + final String strValue = val.value(); + if (strValue.startsWith(completionText)) { + result.add(strValue); + } + } + // also add place holder for user defined push topic name for empty completionText + if (empty) { + result.add("[PushTopicName]"); + } + } else { + // handle package parameters + if (completionText.matches("^.*[\\?&]sObjectName=$")) { + result.addAll(classMap.keySet()); + } else if (completionText.matches("^.*[\\?&]sObjectFields=$")) { + // find sObjectName from configuration or completionText + String sObjectName = (String) configuration.getParameter("sObjectName"); + if (sObjectName == null) { + final Matcher matcher = SOBJECT_NAME_PATTERN.matcher(completionText); + if (matcher.matches()) { + sObjectName = matcher.group(1); + } + } + // return all fields of sObject + if (sObjectName != null) { + final Class<?> aClass = classMap.get(sObjectName); + ReflectionHelper.doWithFields(aClass, new ReflectionHelper.FieldCallback() { + @Override + public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException { + // get non-static fields + if ((field.getModifiers() & Modifier.STATIC) == 0) { + result.add(field.getName()); + } + } + }); + } + } else if (completionText.matches("^.*[\\?&]sObjectClass=$")) { + for (Class c : classMap.values()) { + result.add(c.getName()); + } + // also add Query records classes + Set<Class<?>> classes = getCamelContext().getPackageScanClassResolver(). + findImplementations(AbstractQueryRecordsBase.class, packages); + for (Class<?> aClass : classes) { + // findImplementations also returns AbstractQueryRecordsBase for some reason!!! + if (AbstractQueryRecordsBase.class != aClass) { + result.add(aClass.getName()); + } + } + } + } + return result; + } + public SalesforceLoginConfig getLoginConfig() { return loginConfig; } http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 c3f6a05..983d41d 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 @@ -16,15 +16,11 @@ */ package org.apache.camel.component.salesforce; -import java.io.IOException; -import java.io.StringReader; -import java.util.HashMap; -import java.util.Map; - import org.apache.camel.AsyncCallback; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.component.salesforce.internal.PayloadFormat; import org.apache.camel.component.salesforce.internal.client.DefaultRestClient; import org.apache.camel.component.salesforce.internal.client.RestClient; import org.apache.camel.component.salesforce.internal.streaming.PushTopicHelper; @@ -35,6 +31,11 @@ import org.codehaus.jackson.map.ObjectMapper; import org.cometd.bayeux.Message; import org.cometd.bayeux.client.ClientSessionChannel; +import java.io.IOException; +import java.io.StringReader; +import java.util.HashMap; +import java.util.Map; + /** * The Salesforce consumer. */ @@ -102,7 +103,7 @@ public class SalesforceConsumer extends DefaultConsumer { // create REST client for PushTopic operations SalesforceComponent component = endpoint.getComponent(); RestClient restClient = new DefaultRestClient(component.getConfig().getHttpClient(), - endpoint.getConfiguration().getApiVersion(), "json", component.getSession()); + endpoint.getConfiguration().getApiVersion(), PayloadFormat.JSON, component.getSession()); // don't forget to start the client ServiceHelper.startService(restClient); http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java index b7283eb..97e8bcc 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java @@ -22,17 +22,22 @@ import org.apache.camel.Producer; import org.apache.camel.component.salesforce.internal.OperationName; import org.apache.camel.impl.DefaultEndpoint; import org.apache.camel.impl.SynchronousDelegateProducer; +import org.apache.camel.spi.UriEndpoint; +import org.apache.camel.spi.UriParam; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Represents a Salesforce endpoint. */ +@UriEndpoint(scheme = "salesforce", consumerClass = SalesforceConsumer.class) public class SalesforceEndpoint extends DefaultEndpoint { private static final Logger LOG = LoggerFactory.getLogger(SalesforceEndpoint.class); + @UriParam private final SalesforceEndpointConfig config; + private final OperationName operationName; private final String topicName; @@ -66,8 +71,10 @@ public class SalesforceEndpoint extends DefaultEndpoint { operationName.value())); } - return new SalesforceConsumer(this, processor, - getComponent().getSubscriptionHelper()); + final SalesforceConsumer consumer = new SalesforceConsumer(this, processor, + getComponent().getSubscriptionHelper()); + configureConsumer(consumer); + return consumer; } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 78643c0..055e91a 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 @@ -16,18 +16,23 @@ */ package org.apache.camel.component.salesforce; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - import org.apache.camel.RuntimeCamelException; import org.apache.camel.component.salesforce.api.dto.bulk.ContentType; -import org.apache.camel.component.salesforce.api.dto.bulk.OperationEnum; import org.apache.camel.component.salesforce.internal.PayloadFormat; import org.apache.camel.component.salesforce.internal.dto.NotifyForFieldsEnum; import org.apache.camel.component.salesforce.internal.dto.NotifyForOperationsEnum; +import org.apache.camel.spi.UriParam; +import org.apache.camel.spi.UriParams; import org.eclipse.jetty.client.HttpClient; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * Salesforce Endpoint configuration. + */ +@UriParams public class SalesforceEndpointConfig implements Cloneable { // default API version @@ -49,43 +54,57 @@ public class SalesforceEndpointConfig implements Cloneable { public static final String SOBJECT_SEARCH = "sObjectSearch"; // parameters for Bulk API - public static final String BULK_OPERATION = "bulkOperation"; public static final String CONTENT_TYPE = "contentType"; public static final String JOB_ID = "jobId"; public static final String BATCH_ID = "batchId"; public static final String RESULT_ID = "resultId"; - // parameters for Streaming API - public static final String UPDATE_TOPIC = "updateTopic"; - // general properties + @UriParam private String apiVersion = DEFAULT_VERSION; // Rest API properties + @UriParam private PayloadFormat format = PayloadFormat.JSON; + @UriParam private String sObjectName; + @UriParam private String sObjectId; + @UriParam private String sObjectFields; + @UriParam private String sObjectIdName; + @UriParam private String sObjectIdValue; + @UriParam private String sObjectBlobFieldName; + @UriParam private String sObjectClass; + @UriParam private String sObjectQuery; + @UriParam private String sObjectSearch; // Bulk API properties - private OperationEnum bulkOperation; + @UriParam private ContentType contentType; + @UriParam private String jobId; + @UriParam private String batchId; + @UriParam private String resultId; // Streaming API properties + @UriParam private boolean updateTopic; + @UriParam private NotifyForFieldsEnum notifyForFields; + @UriParam private NotifyForOperationsEnum notifyForOperations; // Jetty HttpClient, set using reference + @UriParam private HttpClient httpClient; public SalesforceEndpointConfig copy() { @@ -98,12 +117,12 @@ public class SalesforceEndpointConfig implements Cloneable { } } - public PayloadFormat getPayloadFormat() { + public PayloadFormat getFormat() { return format; } - public void setFormat(String format) { - this.format = PayloadFormat.valueOf(format.toUpperCase()); + public void setFormat(PayloadFormat format) { + this.format = format; } public String getApiVersion() { @@ -186,14 +205,6 @@ public class SalesforceEndpointConfig implements Cloneable { this.sObjectSearch = sObjectSearch; } - public OperationEnum getBulkOperation() { - return bulkOperation; - } - - public void setBulkOperation(OperationEnum bulkOperation) { - this.bulkOperation = bulkOperation; - } - public ContentType getContentType() { return contentType; } @@ -275,9 +286,6 @@ public class SalesforceEndpointConfig implements Cloneable { valueMap.put(SOBJECT_SEARCH, sObjectSearch); // add bulk API properties - if (bulkOperation != null) { - valueMap.put(BULK_OPERATION, bulkOperation.value()); - } if (contentType != null) { valueMap.put(CONTENT_TYPE, contentType.value()); } @@ -285,8 +293,6 @@ public class SalesforceEndpointConfig implements Cloneable { valueMap.put(BATCH_ID, batchId); valueMap.put(RESULT_ID, resultId); - valueMap.put(UPDATE_TOPIC, String.valueOf(updateTopic)); - return Collections.unmodifiableMap(valueMap); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java index a095f6f..42c1bfe 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceProducer.java @@ -39,7 +39,7 @@ public class SalesforceProducer extends DefaultAsyncProducer { super(endpoint); final SalesforceEndpointConfig endpointConfig = endpoint.getConfiguration(); - final PayloadFormat payloadFormat = endpointConfig.getPayloadFormat(); + final PayloadFormat payloadFormat = endpointConfig.getFormat(); // check if its a Bulk Operation if (isBulkOperation(endpoint.getOperationName())) { http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 70eec1c..b15d5cf 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 @@ -16,15 +16,10 @@ */ package org.apache.camel.component.salesforce.internal.client; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.List; - import com.thoughtworks.xstream.XStream; import org.apache.camel.component.salesforce.api.SalesforceException; import org.apache.camel.component.salesforce.api.dto.RestError; +import org.apache.camel.component.salesforce.internal.PayloadFormat; import org.apache.camel.component.salesforce.internal.SalesforceSession; import org.apache.camel.component.salesforce.internal.dto.RestErrors; import org.codehaus.jackson.map.ObjectMapper; @@ -36,6 +31,12 @@ import org.eclipse.jetty.http.HttpHeaders; import org.eclipse.jetty.http.HttpMethods; import org.eclipse.jetty.util.StringUtil; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.List; + public class DefaultRestClient extends AbstractClientBase implements RestClient { private static final String SERVICES_DATA = "/services/data/"; @@ -44,10 +45,10 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient private ObjectMapper objectMapper; private XStream xStream; - protected String format; + protected PayloadFormat format; public DefaultRestClient(HttpClient httpClient, - String version, String format, SalesforceSession session) throws SalesforceException { + String version, PayloadFormat format, SalesforceSession session) throws SalesforceException { super(version, session, httpClient); this.format = format; @@ -61,7 +62,7 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient @Override protected void doHttpRequest(ContentExchange request, ClientResponseCallback callback) { // set standard headers for all requests - final String contentType = "json".equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8; + final String contentType = PayloadFormat.JSON.equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8; request.setRequestHeader(HttpHeaders.ACCEPT, contentType); request.setRequestHeader(HttpHeaders.ACCEPT_CHARSET, StringUtil.__UTF8); // request content type and charset is set by the request entity @@ -73,7 +74,7 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient protected SalesforceException createRestException(ContentExchange httpExchange) { // try parsing response according to format try { - if ("json".equals(format)) { + if (PayloadFormat.JSON.equals(format)) { List<RestError> restErrors = objectMapper.readValue( httpExchange.getResponseContent(), new TypeReference<List<RestError>>() { }); @@ -177,7 +178,7 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient // input stream as entity content post.setRequestContentSource(sObject); - post.setRequestContentType("json".equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); + post.setRequestContentType(PayloadFormat.JSON.equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); doHttpRequest(post, new DelegatingClientCallback(callback)); } @@ -191,7 +192,7 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient // input stream as entity content patch.setRequestContentSource(sObject); - patch.setRequestContentType("json".equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); + patch.setRequestContentType(PayloadFormat.JSON.equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); doHttpRequest(patch, new DelegatingClientCallback(callback)); } @@ -231,7 +232,7 @@ public class DefaultRestClient extends AbstractClientBase implements RestClient // input stream as entity content patch.setRequestContentSource(sObject); // TODO will the encoding always be UTF-8?? - patch.setRequestContentType("json".equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); + patch.setRequestContentType(PayloadFormat.JSON.equals(format) ? APPLICATION_JSON_UTF8 : APPLICATION_XML_UTF8); doHttpRequest(patch, new DelegatingClientCallback(callback)); } http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 82e2c14..ed7a212 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 @@ -16,11 +16,6 @@ */ package org.apache.camel.component.salesforce.internal.processor; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Map; - import org.apache.camel.AsyncCallback; import org.apache.camel.Exchange; import org.apache.camel.component.salesforce.SalesforceEndpoint; @@ -31,16 +26,12 @@ import org.apache.camel.component.salesforce.internal.client.DefaultRestClient; import org.apache.camel.component.salesforce.internal.client.RestClient; import org.apache.camel.util.ServiceHelper; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.API_VERSION; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_BLOB_FIELD_NAME; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_CLASS; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_EXT_ID_NAME; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_EXT_ID_VALUE; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_FIELDS; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_ID; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_NAME; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_QUERY; -import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.SOBJECT_SEARCH; +import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Map; + +import static org.apache.camel.component.salesforce.SalesforceEndpointConfig.*; public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor { @@ -52,10 +43,10 @@ public abstract class AbstractRestProcessor extends AbstractSalesforceProcessor public AbstractRestProcessor(SalesforceEndpoint endpoint) throws SalesforceException { super(endpoint); - final PayloadFormat payloadFormat = endpoint.getConfiguration().getPayloadFormat(); + final PayloadFormat payloadFormat = endpoint.getConfiguration().getFormat(); this.restClient = new DefaultRestClient(httpClient, endpointConfigMap.get(API_VERSION), - payloadFormat.toString().toLowerCase(), session); + payloadFormat, session); this.classMap = endpoint.getComponent().getClassMap(); } http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiBatchIntegrationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiBatchIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiBatchIntegrationTest.java index 5406c16..52bf7cc 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiBatchIntegrationTest.java +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiBatchIntegrationTest.java @@ -16,21 +16,17 @@ */ package org.apache.camel.component.salesforce; +import org.apache.camel.component.salesforce.api.dto.bulk.*; +import org.apache.camel.component.salesforce.dto.Merchandise__c; +import org.junit.experimental.theories.DataPoints; +import org.junit.experimental.theories.Theory; + import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.camel.component.salesforce.api.dto.bulk.BatchInfo; -import org.apache.camel.component.salesforce.api.dto.bulk.BatchStateEnum; -import org.apache.camel.component.salesforce.api.dto.bulk.ContentType; -import org.apache.camel.component.salesforce.api.dto.bulk.JobInfo; -import org.apache.camel.component.salesforce.api.dto.bulk.OperationEnum; -import org.apache.camel.component.salesforce.dto.Merchandise__c; -import org.junit.experimental.theories.DataPoints; -import org.junit.experimental.theories.Theory; - public class BulkApiBatchIntegrationTest extends AbstractBulkApiTestBase { private static final String TEST_REQUEST_XML = "/test-request.xml"; private static final String TEST_REQUEST_CSV = "/test-request.csv"; @@ -40,12 +36,12 @@ public class BulkApiBatchIntegrationTest extends AbstractBulkApiTestBase { List<BatchTest> result = new ArrayList<BatchTest>(); BatchTest test = new BatchTest(); test.contentType = ContentType.XML; - test.stream = AbstractBulkApiTestBase.class.getResourceAsStream(TEST_REQUEST_XML); + test.stream = BulkApiBatchIntegrationTest.class.getResourceAsStream(TEST_REQUEST_XML); result.add(test); test = new BatchTest(); test.contentType = ContentType.CSV; - test.stream = AbstractBulkApiTestBase.class.getResourceAsStream(TEST_REQUEST_CSV); + test.stream = BulkApiBatchIntegrationTest.class.getResourceAsStream(TEST_REQUEST_CSV); result.add(test); // TODO test ZIP_XML and ZIP_CSV http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java index 4d10618..f3153c0 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java @@ -26,7 +26,7 @@ import java.util.Properties; public class LoginConfigHelper extends Assert { - private static final String TEST_LOGIN_PROPERTIES = "test-salesforce-login.properties"; + private static final String TEST_LOGIN_PROPERTIES = "../test-salesforce-login.properties"; public static SalesforceLoginConfig getLoginConfig() throws IOException { http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 a7510e3..6589cdf 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 @@ -16,24 +16,8 @@ */ package org.apache.camel.component.salesforce; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; -import java.util.HashMap; -import java.util.List; - import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.salesforce.api.dto.CreateSObjectResult; -import org.apache.camel.component.salesforce.api.dto.GlobalObjects; -import org.apache.camel.component.salesforce.api.dto.RestResources; -import org.apache.camel.component.salesforce.api.dto.SObjectBasicInfo; -import org.apache.camel.component.salesforce.api.dto.SObjectDescription; -import org.apache.camel.component.salesforce.api.dto.SearchResult; -import org.apache.camel.component.salesforce.api.dto.SearchResults; -import org.apache.camel.component.salesforce.api.dto.Version; -import org.apache.camel.component.salesforce.api.dto.Versions; +import org.apache.camel.component.salesforce.api.dto.*; import org.apache.camel.component.salesforce.dto.Document; import org.apache.camel.component.salesforce.dto.Line_Item__c; import org.apache.camel.component.salesforce.dto.Merchandise__c; @@ -42,6 +26,14 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; +import java.util.HashMap; +import java.util.List; + public class RestApiIntegrationTest extends AbstractSalesforceTestBase { private static final Logger LOG = LoggerFactory.getLogger(RestApiIntegrationTest.class); @@ -310,105 +302,105 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase { // allow overriding format per endpoint from("direct:getVersionsXml") - .to("salesforce:getVersions?format=xml"); + .to("salesforce:getVersions?format=XML"); // testGetResources from("direct:getResources") .to("salesforce:getResources"); from("direct:getResourcesXml") - .to("salesforce:getResources?format=xml"); + .to("salesforce:getResources?format=XML"); // testGetGlobalObjects from("direct:getGlobalObjects") .to("salesforce:getGlobalObjects"); from("direct:getGlobalObjectsXml") - .to("salesforce:getGlobalObjects?format=xml"); + .to("salesforce:getGlobalObjects?format=XML"); // testGetBasicInfo from("direct:getBasicInfo") .to("salesforce:getBasicInfo?sObjectName=Merchandise__c"); from("direct:getBasicInfoXml") - .to("salesforce:getBasicInfo?format=xml&sObjectName=Merchandise__c"); + .to("salesforce:getBasicInfo?format=XML&sObjectName=Merchandise__c"); // testGetDescription from("direct:getDescription") .to("salesforce:getDescription?sObjectName=Merchandise__c"); from("direct:getDescriptionXml") - .to("salesforce:getDescription?format=xml&sObjectName=Merchandise__c"); + .to("salesforce:getDescription?format=XML&sObjectName=Merchandise__c"); // testGetSObject from("direct:getSObject") .to("salesforce:getSObject?sObjectName=Merchandise__c&sObjectFields=Description__c,Price__c"); from("direct:getSObjectXml") - .to("salesforce:getSObject?format=xml&sObjectName=Merchandise__c&sObjectFields=Description__c,Total_Inventory__c"); + .to("salesforce:getSObject?format=XML&sObjectName=Merchandise__c&sObjectFields=Description__c,Total_Inventory__c"); // testCreateSObject from("direct:CreateSObject") .to("salesforce:createSObject?sObjectName=Merchandise__c"); from("direct:CreateSObjectXml") - .to("salesforce:createSObject?format=xml&sObjectName=Merchandise__c"); + .to("salesforce:createSObject?format=XML&sObjectName=Merchandise__c"); // testUpdateSObject from("direct:UpdateSObject") .to("salesforce:updateSObject?sObjectName=Merchandise__c"); from("direct:UpdateSObjectXml") - .to("salesforce:updateSObject?format=xml&sObjectName=Merchandise__c"); + .to("salesforce:updateSObject?format=XML&sObjectName=Merchandise__c"); // testDeleteSObject from("direct:deleteSObject") .to("salesforce:deleteSObject?sObjectName=Merchandise__c"); from("direct:deleteSObjectXml") - .to("salesforce:deleteSObject?format=xml&sObjectName=Merchandise__c"); + .to("salesforce:deleteSObject?format=XML&sObjectName=Merchandise__c"); // testGetSObjectWithId from("direct:getSObjectWithId") .to("salesforce:getSObjectWithId?sObjectName=Line_Item__c&sObjectIdName=Name"); from("direct:getSObjectWithIdXml") - .to("salesforce:getSObjectWithId?format=xml&sObjectName=Line_Item__c&sObjectIdName=Name"); + .to("salesforce:getSObjectWithId?format=XML&sObjectName=Line_Item__c&sObjectIdName=Name"); // testUpsertSObject from("direct:upsertSObject") .to("salesforce:upsertSObject?sObjectName=Line_Item__c&sObjectIdName=Name"); from("direct:upsertSObjectXml") - .to("salesforce:upsertSObject?format=xml&sObjectName=Line_Item__c&sObjectIdName=Name"); + .to("salesforce:upsertSObject?format=XML&sObjectName=Line_Item__c&sObjectIdName=Name"); // testDeleteSObjectWithId from("direct:deleteSObjectWithId") .to("salesforce:deleteSObjectWithId?sObjectName=Line_Item__c&sObjectIdName=Name"); from("direct:deleteSObjectWithIdXml") - .to("salesforce:deleteSObjectWithId?format=xml&sObjectName=Line_Item__c&sObjectIdName=Name"); + .to("salesforce:deleteSObjectWithId?format=XML&sObjectName=Line_Item__c&sObjectIdName=Name"); // testGetBlobField from("direct:getBlobField") .to("salesforce:getBlobField?sObjectName=Document&sObjectBlobFieldName=Body"); from("direct:getBlobFieldXml") - .to("salesforce:getBlobField?format=xml&sObjectName=Document&sObjectBlobFieldName=Body"); + .to("salesforce:getBlobField?format=XML&sObjectName=Document&sObjectBlobFieldName=Body"); // testQuery from("direct:query") .to("salesforce:query?sObjectQuery=SELECT name from Line_Item__c&sObjectClass=org.apache.camel.component.salesforce.dto.QueryRecordsLine_Item__c"); from("direct:queryXml") - .to("salesforce:query?format=xml&sObjectQuery=SELECT name from Line_Item__c&sObjectClass=org.apache.camel.component.salesforce.dto.QueryRecordsLine_Item__c"); + .to("salesforce:query?format=XML&sObjectQuery=SELECT name from Line_Item__c&sObjectClass=org.apache.camel.component.salesforce.dto.QueryRecordsLine_Item__c"); // testSearch from("direct:search") .to("salesforce:search?sObjectSearch=FIND {Wee}"); from("direct:searchXml") - .to("salesforce:search?format=xml&sObjectSearch=FIND {Wee}"); + .to("salesforce:search?format=XML&sObjectSearch=FIND {Wee}"); } }; } http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java new file mode 100644 index 0000000..c556061 --- /dev/null +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurationTest.java @@ -0,0 +1,201 @@ +/** + * 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 org.apache.camel.CamelContext; +import org.apache.camel.Component; +import org.apache.camel.ComponentConfiguration; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.salesforce.dto.Document; +import org.apache.camel.component.salesforce.dto.Line_Item__c; +import org.apache.camel.component.salesforce.dto.Merchandise__c; +import org.apache.camel.component.salesforce.dto.QueryRecordsLine_Item__c; +import org.apache.camel.component.salesforce.internal.PayloadFormat; +import org.apache.camel.impl.ParameterConfiguration; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Ignore; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + + +/** + * Lets test the use of the ComponentConfiguration on the Salesforce endpoint + */ +@Ignore("Must run manually with a user supplied test-salesforce-login.properties") +public class SalesforceComponentConfigurationTest extends CamelTestSupport { + + private static final Logger LOG = LoggerFactory.getLogger(SalesforceComponentConfigurationTest.class); + + protected String componentName = "salesforce123"; + protected boolean verbose = true; + + @Test + public void testConfiguration() throws Exception { + Component component = context().getComponent(componentName); + ComponentConfiguration configuration = component.createComponentConfiguration(); + SortedMap<String, ParameterConfiguration> parameterConfigurationMap = configuration.getParameterConfigurationMap(); + if (verbose) { + Set<Map.Entry<String, ParameterConfiguration>> entries = parameterConfigurationMap.entrySet(); + for (Map.Entry<String, ParameterConfiguration> entry : entries) { + String name = entry.getKey(); + ParameterConfiguration config = entry.getValue(); + LOG.info("Has name: {} with type {}", name, config.getParameterType().getName()); + } + } + + assertParameterConfig(configuration, "format", PayloadFormat.class); + assertParameterConfig(configuration, "sObjectName", String.class); + assertParameterConfig(configuration, "sObjectFields", String.class); + assertParameterConfig(configuration, "updateTopic", boolean.class); + + configuration.setParameter("format", PayloadFormat.XML); + configuration.setParameter("sObjectName", "Merchandise__c"); + configuration.setParameter("sObjectFields", "Description__c,Total_Inventory__c"); + configuration.setParameter("updateTopic", false); + + // operation name is base uri + configuration.setBaseUri("getSObject"); + + SalesforceEndpoint endpoint = assertIsInstanceOf(SalesforceEndpoint.class, configuration.createEndpoint()); + final SalesforceEndpointConfig endpointConfig = endpoint.getConfiguration(); + assertEquals("endpoint.format", PayloadFormat.XML, endpointConfig.getFormat()); + assertEquals("endpoint.sObjectName", "Merchandise__c", endpointConfig.getSObjectName()); + assertEquals("endpoint.sObjectFields", "Description__c,Total_Inventory__c", endpointConfig.getSObjectFields()); + assertEquals("endpoint.updateTopic", false, endpointConfig.isUpdateTopic()); + } + + public static void assertParameterConfig(ComponentConfiguration configuration, String name, + Class<?> parameterType) { + ParameterConfiguration config = configuration.getParameterConfiguration(name); + assertNotNull("ParameterConfiguration should exist for parameter name " + name, config); + assertEquals("ParameterConfiguration." + name + ".getName()", name, config.getName()); + assertEquals("ParameterConfiguration." + name + ".getParameterType()", parameterType, + config.getParameterType()); + } + + @Test + public void testEndpointCompletion() throws Exception { + Component component = context().getComponent(componentName); + ComponentConfiguration configuration = component.createComponentConfiguration(); + + // get operation names + assertCompletionOptions(configuration.completeEndpointPath(""), + "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", + "createSObject", "updateSObject", "deleteSObject", "getSObjectWithId", "upsertSObject", + "deleteSObjectWithId", "getBlobField", "query", "queryMore", "search", "createJob", "getJob", + "closeJob", "abortJob", "createBatch", "getBatch", "getAllBatches", "getRequest", "getResults", + "createBatchQuery", "getQueryResultIds", "getQueryResult", "[PushTopicName]" + ); + + // get filtered operation names + assertCompletionOptions(configuration.completeEndpointPath("get"), + "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", + "getSObjectWithId", "getBlobField", "getJob", "getBatch", "getAllBatches", "getRequest", "getResults", + "getQueryResultIds", "getQueryResult" + ); + +/* TODO support parameter completion + // get ALL REST operation parameters + // TODO support operation specific parameter completion + assertCompletionOptions(configuration.completeEndpointPath("getSObject?"), + "apiVersion", "httpClient", "format", "sObjectName", "sObjectId", "sObjectFields", + "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); + + // get filtered REST parameters + assertCompletionOptions(configuration.completeEndpointPath("getSObject?format=XML&"), + "apiVersion", "httpClient", "sObjectName", "sObjectId", "sObjectFields", + "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); + + // get ALL Bulk operation parameters + // TODO support operation specific parameter completion + assertCompletionOptions(configuration.completeEndpointPath("createJob?"), + "apiVersion", "httpClient", "sObjectQuery", "contentType", "jobId", "batchId", "resultId"); + + // get filtered Bulk operation parameters + assertCompletionOptions(configuration.completeEndpointPath("createJob?contentType=XML&"), + "apiVersion", "httpClient", "sObjectQuery", "jobId", "batchId", "resultId"); + + // get ALL topic parameters for consumers + assertCompletionOptions(configuration.completeEndpointPath("myTopic?"), + "apiVersion", "httpClient", "updateTopic", "notifyForFields", "notifyForOperations"); + + // get filtered topic parameters for consumers + assertCompletionOptions(configuration.completeEndpointPath("myTopic?updateTopic=true&"), + "apiVersion", "httpClient", "notifyForFields", "notifyForOperations"); + + // get parameters from partial name + assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObject"), + "sObjectName", "sObjectId", "sObjectFields", + "sObjectIdName", "sObjectIdValue", "sObjectBlobFieldName", "sObjectClass", "sObjectQuery", "sObjectSearch"); +*/ + + // get sObjectName values, from scanned DTO packages + assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObjectName="), + "Document", "Line_Item__c", "Merchandise__c"); + + // get sObjectFields values, from scanned DTO + assertCompletionOptions( + configuration.completeEndpointPath("getSObject?sObjectName=Merchandise__c&sObjectFields="), + "attributes", "Id", "OwnerId", "IsDeleted", "Name", "CreatedDate", "CreatedById", + "LastModifiedDate", "LastModifiedById", "SystemModstamp", "LastActivityDate", + "Description__c", "Price__c", "Total_Inventory__c"); + + // get sObjectClass values, from scanned DTO packages + assertCompletionOptions(configuration.completeEndpointPath("getSObject?sObjectClass="), + Document.class.getName(), + Line_Item__c.class.getName(), + Merchandise__c.class.getName(), + QueryRecordsLine_Item__c.class.getName()); + } + + private void assertCompletionOptions(List<String> options, final String ...args) { + List<String> missing = new ArrayList<String>(); + for (String arg : args) { + if (!options.remove(arg)) { + missing.add(arg); + } + } + if (!missing.isEmpty() || !options.isEmpty()) { + fail(String.format("Missing options %s, unknown options %s", + missing, options)); + } + } + + protected CamelContext createCamelContext() throws Exception { + final CamelContext camelContext = super.createCamelContext(); + final SalesforceLoginConfig loginConfig = LoginConfigHelper.getLoginConfig(); + final SalesforceComponent component = new SalesforceComponent(); + component.setLoginConfig(loginConfig); + // set DTO package + component.setPackages(new String[]{ + Merchandise__c.class.getPackage().getName() + }); + camelContext.addComponent(componentName, component); + return camelContext; + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + } + }; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 b191933..5513c9c 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 @@ -16,29 +16,10 @@ */ package org.apache.camel.maven; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.regex.Pattern; - import org.apache.camel.component.salesforce.SalesforceLoginConfig; import org.apache.camel.component.salesforce.api.SalesforceException; -import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase; -import org.apache.camel.component.salesforce.api.dto.GlobalObjects; -import org.apache.camel.component.salesforce.api.dto.PickListValue; -import org.apache.camel.component.salesforce.api.dto.SObject; -import org.apache.camel.component.salesforce.api.dto.SObjectDescription; -import org.apache.camel.component.salesforce.api.dto.SObjectField; +import org.apache.camel.component.salesforce.api.dto.*; +import org.apache.camel.component.salesforce.internal.PayloadFormat; import org.apache.camel.component.salesforce.internal.SalesforceSession; import org.apache.camel.component.salesforce.internal.client.DefaultRestClient; import org.apache.camel.component.salesforce.internal.client.RestClient; @@ -56,6 +37,15 @@ import org.codehaus.jackson.map.ObjectMapper; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.RedirectListener; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; + /** * Goal which generates POJOs for Salesforce SObjects * @@ -206,7 +196,7 @@ public class CamelSalesforceMojo extends AbstractMojo { RestClient restClient = null; try { restClient = new DefaultRestClient(httpClient, - version, "json", session); + version, PayloadFormat.JSON, session); // remember to start the active client object ((DefaultRestClient) restClient).start(); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/camel/blob/512b0a16/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 e3af8d3..917292b 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,7 +25,7 @@ import java.util.Properties; public class CamelSalesforceMojoIntegrationTest { - private static final String TEST_LOGIN_PROPERTIES = "test-salesforce-login.properties"; + private static final String TEST_LOGIN_PROPERTIES = "../test-salesforce-login.properties"; @Test public void testExecute() throws Exception {