This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new bdd495048da CAMEL-17885 camel google bigquery: Allow to read service
account key file from resolver (#7336)
bdd495048da is described below
commit bdd495048da891a2e856a116355e9ca6b6f58c72
Author: Claudio Miranda <[email protected]>
AuthorDate: Tue Apr 5 01:28:44 2022 -0300
CAMEL-17885 camel google bigquery: Allow to read service account key file
from resolver (#7336)
https://issues.apache.org/jira/browse/CAMEL-17885
* Added the serviceAccountKey as query parameter to the endpoint
* Use resolver to load the service account key content from a variety of
sources: http, base64, classpath, etc.
* Some tests were failing, related to number of expected messages, it
was due to bigquery api was using result.getTotalRows() but for DML
operations, it doesn't work. The JobStatistics.QueryStatistics should
be used instead.
* Removed unused log4j.properties
---
.../bigquery/GoogleBigQueryEndpointConfigurer.java | 6 ++++
.../bigquery/GoogleBigQueryEndpointUriFactory.java | 3 +-
.../sql/GoogleBigQuerySQLEndpointConfigurer.java | 6 ++++
.../sql/GoogleBigQuerySQLEndpointUriFactory.java | 3 +-
.../component/google/bigquery/google-bigquery.json | 1 +
.../google/bigquery/sql/google-bigquery-sql.json | 1 +
.../src/main/docs/google-bigquery-component.adoc | 21 +++++++++++-
.../main/docs/google-bigquery-sql-component.adoc | 21 +++++++++++-
.../google/bigquery/GoogleBigQueryComponent.java | 26 +++++++++------
.../bigquery/GoogleBigQueryConfiguration.java | 30 +++++++++++++++++-
.../bigquery/GoogleBigQueryConnectionFactory.java | 32 +++++++++++++------
.../google/bigquery/GoogleBigQueryEndpoint.java | 19 +++++++++--
.../bigquery/sql/GoogleBigQuerySQLComponent.java | 26 +++++++++------
.../sql/GoogleBigQuerySQLConfiguration.java | 28 +++++++++++++++-
.../bigquery/sql/GoogleBigQuerySQLEndpoint.java | 22 ++++++++++---
.../bigquery/sql/GoogleBigQuerySQLProducer.java | 13 +++++---
.../bigquery/integration/BigQueryITSupport.java | 27 +++++++++++-----
.../sql/GoogleBigQuerySQLProducerBaseTest.java | 12 +++++++
.../GoogleBigQuerySQLProducerWithParamersTest.java | 21 ++++++------
.../GoogleBigQuerySQLProducerWithPatternTest.java | 21 ++++++------
.../src/test/resources/log4j.properties | 37 ----------------------
.../src/test/resources/simple.properties | 1 +
22 files changed, 265 insertions(+), 112 deletions(-)
diff --git
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointConfigurer.java
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointConfigurer.java
index 65a33c5506e..bf8a1f67b42 100644
---
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointConfigurer.java
+++
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointConfigurer.java
@@ -25,6 +25,8 @@ public class GoogleBigQueryEndpointConfigurer extends
PropertyConfigurerSupport
case "connectionFactory":
target.getConfiguration().setConnectionFactory(property(camelContext,
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory.class,
value)); return true;
case "lazystartproducer":
case "lazyStartProducer":
target.setLazyStartProducer(property(camelContext, boolean.class, value));
return true;
+ case "serviceaccountkey":
+ case "serviceAccountKey":
target.getConfiguration().setServiceAccountKey(property(camelContext,
java.lang.String.class, value)); return true;
case "useasinsertid":
case "useAsInsertId":
target.getConfiguration().setUseAsInsertId(property(camelContext,
java.lang.String.class, value)); return true;
default: return false;
@@ -43,6 +45,8 @@ public class GoogleBigQueryEndpointConfigurer extends
PropertyConfigurerSupport
case "connectionFactory": return
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory.class;
case "lazystartproducer":
case "lazyStartProducer": return boolean.class;
+ case "serviceaccountkey":
+ case "serviceAccountKey": return java.lang.String.class;
case "useasinsertid":
case "useAsInsertId": return java.lang.String.class;
default: return null;
@@ -57,6 +61,8 @@ public class GoogleBigQueryEndpointConfigurer extends
PropertyConfigurerSupport
case "connectionFactory": return
target.getConfiguration().getConnectionFactory();
case "lazystartproducer":
case "lazyStartProducer": return target.isLazyStartProducer();
+ case "serviceaccountkey":
+ case "serviceAccountKey": return
target.getConfiguration().getServiceAccountKey();
case "useasinsertid":
case "useAsInsertId": return
target.getConfiguration().getUseAsInsertId();
default: return null;
diff --git
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointUriFactory.java
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointUriFactory.java
index f5b1066f207..aaea30d2099 100644
---
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointUriFactory.java
+++
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpointUriFactory.java
@@ -21,11 +21,12 @@ public class GoogleBigQueryEndpointUriFactory extends
org.apache.camel.support.c
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Set<String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(6);
+ Set<String> props = new HashSet<>(7);
props.add("connectionFactory");
props.add("datasetId");
props.add("lazyStartProducer");
props.add("projectId");
+ props.add("serviceAccountKey");
props.add("tableId");
props.add("useAsInsertId");
PROPERTY_NAMES = Collections.unmodifiableSet(props);
diff --git
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointConfigurer.java
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointConfigurer.java
index 5bc9b814a95..ba62f6316bb 100644
---
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointConfigurer.java
+++
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointConfigurer.java
@@ -25,6 +25,8 @@ public class GoogleBigQuerySQLEndpointConfigurer extends
PropertyConfigurerSuppo
case "connectionFactory":
target.getConfiguration().setConnectionFactory(property(camelContext,
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory.class,
value)); return true;
case "lazystartproducer":
case "lazyStartProducer":
target.setLazyStartProducer(property(camelContext, boolean.class, value));
return true;
+ case "serviceaccountkey":
+ case "serviceAccountKey":
target.getConfiguration().setServiceAccountKey(property(camelContext,
java.lang.String.class, value)); return true;
default: return false;
}
}
@@ -41,6 +43,8 @@ public class GoogleBigQuerySQLEndpointConfigurer extends
PropertyConfigurerSuppo
case "connectionFactory": return
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory.class;
case "lazystartproducer":
case "lazyStartProducer": return boolean.class;
+ case "serviceaccountkey":
+ case "serviceAccountKey": return java.lang.String.class;
default: return null;
}
}
@@ -53,6 +57,8 @@ public class GoogleBigQuerySQLEndpointConfigurer extends
PropertyConfigurerSuppo
case "connectionFactory": return
target.getConfiguration().getConnectionFactory();
case "lazystartproducer":
case "lazyStartProducer": return target.isLazyStartProducer();
+ case "serviceaccountkey":
+ case "serviceAccountKey": return
target.getConfiguration().getServiceAccountKey();
default: return null;
}
}
diff --git
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointUriFactory.java
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointUriFactory.java
index c92c0beb5f2..01978941255 100644
---
a/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointUriFactory.java
+++
b/components/camel-google/camel-google-bigquery/src/generated/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpointUriFactory.java
@@ -21,11 +21,12 @@ public class GoogleBigQuerySQLEndpointUriFactory extends
org.apache.camel.suppor
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Set<String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(4);
+ Set<String> props = new HashSet<>(5);
props.add("connectionFactory");
props.add("lazyStartProducer");
props.add("projectId");
props.add("queryString");
+ props.add("serviceAccountKey");
PROPERTY_NAMES = Collections.unmodifiableSet(props);
SECRET_PROPERTY_NAMES = Collections.emptySet();
MULTI_VALUE_PREFIXES = Collections.emptySet();
diff --git
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
index 2649c56bfe7..067cfbc63ac 100644
---
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
+++
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
@@ -39,6 +39,7 @@
"datasetId": { "kind": "path", "displayName": "Dataset Id", "group":
"common", "label": "common", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration",
"configurationField": "configuration", "description": "BigQuery Dataset Id" },
"tableId": { "kind": "path", "displayName": "Table Id", "group": "common",
"label": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration",
"configurationField": "configuration", "description": "BigQuery table id" },
"connectionFactory": { "kind": "parameter", "displayName": "Connection
Factory", "group": "producer", "label": "", "required": false, "type":
"object", "javaType":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory",
"deprecated": false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration",
"configurationField": "configuration", "description": "ConnectionFacto [...]
+ "serviceAccountKey": { "kind": "parameter", "displayName": "Service
Account Key", "group": "common", "label": "common", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration",
"configurationField": "configuration", "description": "Service account key in
json format to authenticate an application a [...]
"lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start
Producer", "group": "producer", "label": "producer", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether the producer
should be started lazy (on the first message). By starting lazy you can use
this to allow CamelContext and routes to startup in situations where a producer
may otherwise fail during sta [...]
"useAsInsertId": { "kind": "parameter", "displayName": "Use As Insert Id",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration",
"configurationField": "configuration", "description": "Field name to use as
insert id" }
}
diff --git
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
index fb7ffde7a0d..fce30c740a8 100644
---
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
+++
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
@@ -35,6 +35,7 @@
"projectId": { "kind": "path", "displayName": "Project Id", "group":
"common", "label": "common", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
"configurationField": "configuration", "description": "Google Cloud Project
Id" },
"queryString": { "kind": "path", "displayName": "Query String", "group":
"common", "label": "common", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
"configurationField": "configuration", "description": "BigQuery standard SQL
query" },
"connectionFactory": { "kind": "parameter", "displayName": "Connection
Factory", "group": "producer", "label": "", "required": false, "type":
"object", "javaType":
"org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory",
"deprecated": false, "deprecationNote": "", "autowired": true, "secret": false,
"configurationClass":
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
"configurationField": "configuration", "description": "Connecti [...]
+ "serviceAccountKey": { "kind": "parameter", "displayName": "Service
Account Key", "group": "common", "label": "common", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass":
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
"configurationField": "configuration", "description": "Service account key in
json format to authenticate an applic [...]
"lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start
Producer", "group": "producer", "label": "producer", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether the producer
should be started lazy (on the first message). By starting lazy you can use
this to allow CamelContext and routes to startup in situations where a producer
may otherwise fail during sta [...]
}
}
diff --git
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
index edb5100d028..f304940450e 100644
---
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
+++
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
@@ -48,7 +48,26 @@ Google security credentials can be set explicitly by
providing the path to the G
Or they are set implicitly, where the connection factory falls back on
https://developers.google.com/identity/protocols/application-default-credentials#howtheywork[Application
Default Credentials].
-*OBS!* The location of the default credentials file is configurable - via
GOOGLE_APPLICATION_CREDENTIALS environment variable.
+When you have the **service account key** you can provide authentication
credentials to your application code.
+Google security credentials can be set through the component endpoint:
+
+[source,java]
+--------------------------------------------------------
+String endpoint =
"google-bigquery://project-id:datasetId[:tableId]?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
+
+You can also use the base64 encoded content of the authentication credentials
file if you don't want to set a file system path.
+
+[source,java]
+--------------------------------------------------------
+String endpoint =
"google-bigquery://project-id:datasetId[:tableId]?serviceAccountKey=base64:<base64
encoded>";
+--------------------------------------------------------
+
+Or by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
+
+--------------------------------------------------------
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
+--------------------------------------------------------
== URI Format
diff --git
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
index 9ddd143cb80..8a44abc01a7 100644
---
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
+++
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
@@ -47,7 +47,26 @@ Google security credentials can be set explicitly by
providing the path to the G
Or they are set implicitly, where the connection factory falls back on
https://developers.google.com/identity/protocols/application-default-credentials#howtheywork[Application
Default Credentials].
-*OBS!* The location of the default credentials file is configurable - via
GOOGLE_APPLICATION_CREDENTIALS environment variable.
+When you have the **service account key** you can provide authentication
credentials to your application code.
+Google security credentials can be set through the component endpoint:
+
+[source,java]
+--------------------------------------------------------
+String endpoint =
"google-bigquery-sql://project-id:query?serviceAccountKey=/home/user/Downloads/my-key.json";
+--------------------------------------------------------
+
+You can also use the base64 encoded content of the authentication credentials
file if you don't want to set a file system path.
+
+[source,java]
+--------------------------------------------------------
+String endpoint =
"google-bigquery-sql://project-id:query?serviceAccountKey=base64:<base64
encoded>";
+--------------------------------------------------------
+
+Or by setting the environment variable `GOOGLE_APPLICATION_CREDENTIALS` :
+
+--------------------------------------------------------
+export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
+--------------------------------------------------------
== URI Format
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryComponent.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryComponent.java
index 8737c081805..86256646252 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryComponent.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryComponent.java
@@ -29,14 +29,23 @@ public class GoogleBigQueryComponent extends
DefaultComponent {
@Metadata
private String projectId;
+
@Metadata
private String datasetId;
+
+ @Metadata
+ private GoogleBigQueryConfiguration configuration;
+
@Metadata(autowired = true)
private GoogleBigQueryConnectionFactory connectionFactory;
public GoogleBigQueryComponent() {
}
+ public GoogleBigQueryComponent(GoogleBigQueryConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
public GoogleBigQueryComponent(CamelContext camelContext) {
super(camelContext);
}
@@ -50,17 +59,10 @@ public class GoogleBigQueryComponent extends
DefaultComponent {
throw new IllegalArgumentException("Google BigQuery Endpoint
format \"projectId:datasetId:tableName\"");
}
- GoogleBigQueryConfiguration configuration = new
GoogleBigQueryConfiguration();
- configuration.parseRemaining(remaining);
-
- if (configuration.getConnectionFactory() == null) {
- if (connectionFactory == null) {
- connectionFactory = new GoogleBigQueryConnectionFactory();
- }
- configuration.setConnectionFactory(getConnectionFactory());
- }
+ GoogleBigQueryConfiguration conf = configuration != null ?
configuration.copy() : new GoogleBigQueryConfiguration();
+ conf.parseRemaining(remaining);
- GoogleBigQueryEndpoint endpoint = new GoogleBigQueryEndpoint(uri,
this, configuration);
+ GoogleBigQueryEndpoint endpoint = new GoogleBigQueryEndpoint(uri,
this, conf);
setProperties(endpoint, parameters);
return endpoint;
}
@@ -97,4 +99,8 @@ public class GoogleBigQueryComponent extends DefaultComponent
{
public void setConnectionFactory(GoogleBigQueryConnectionFactory
connectionFactory) {
this.connectionFactory = connectionFactory;
}
+
+ public GoogleBigQueryConfiguration getConfiguration() {
+ return configuration;
+ }
}
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConfiguration.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConfiguration.java
index fbc70bce69c..283a4c558f1 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConfiguration.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConfiguration.java
@@ -16,29 +16,39 @@
*/
package org.apache.camel.component.google.bigquery;
+import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.spi.UriPath;
@UriParams
-public class GoogleBigQueryConfiguration {
+public class GoogleBigQueryConfiguration implements Cloneable {
@UriParam(description = "ConnectionFactory to obtain connection to
Bigquery Service. If not provided the default one will be used")
@Metadata(autowired = true)
private GoogleBigQueryConnectionFactory connectionFactory;
+
@UriParam(description = "Field name to use as insert id")
private String useAsInsertId;
+
@UriPath(label = "common", description = "Google Cloud Project Id")
@Metadata(required = true)
private String projectId;
+
@UriPath(label = "common", description = "BigQuery Dataset Id")
@Metadata(required = true)
private String datasetId;
+
@UriPath(label = "common", description = "BigQuery table id")
@Metadata(required = false)
private String tableId;
+ @UriParam(label = "security",
+ description = "Service account key in json format to
authenticate an application as a service account to google cloud platform")
+ @Metadata(required = false)
+ private String serviceAccountKey;
+
public void parseRemaining(String remaining) {
String[] parts = remaining.split(":");
@@ -100,4 +110,22 @@ public class GoogleBigQueryConfiguration {
this.tableId = tableId;
return this;
}
+
+ public String getServiceAccountKey() {
+ return serviceAccountKey;
+ }
+
+ public GoogleBigQueryConfiguration setServiceAccountKey(String
serviceAccountKey) {
+ this.serviceAccountKey = serviceAccountKey;
+ return this;
+ }
+
+ public GoogleBigQueryConfiguration copy() {
+ try {
+ return (GoogleBigQueryConfiguration) super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeCamelException(e);
+ }
+ }
+
}
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
index 3662cdf4d8a..2e7c2a596e7 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.component.google.bigquery;
-import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Collection;
import java.util.Collections;
@@ -26,7 +25,11 @@ import com.google.api.services.bigquery.BigqueryScopes;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelException;
+import org.apache.camel.support.ResourceHelper;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,9 +37,10 @@ public class GoogleBigQueryConnectionFactory {
private final Logger logger =
LoggerFactory.getLogger(GoogleBigQueryConnectionFactory.class);
- private String credentialsFileLocation;
+ private String serviceAccountKeyFile;
private String serviceURL;
private BigQuery client;
+ private CamelContext camelContext;
public GoogleBigQueryConnectionFactory() {
}
@@ -56,9 +60,10 @@ public class GoogleBigQueryConnectionFactory {
GoogleCredentials credentials = null;
- if (credentials == null &&
!Strings.isNullOrEmpty(credentialsFileLocation)) {
+ if (!Strings.isNullOrEmpty(serviceAccountKeyFile)) {
logger.debug("Key File Name has been set explicitly. Initialising
BigQuery using Key File {}",
- credentialsFileLocation);
+ // limit the output as the value could be a long base64
string, we don't want to show it whole
+ StringHelper.limitLength(serviceAccountKeyFile, 70));
credentials = createFromFile();
}
@@ -81,7 +86,11 @@ public class GoogleBigQueryConnectionFactory {
}
private GoogleCredentials createFromFile() throws Exception {
- try (InputStream is = new FileInputStream(credentialsFileLocation)) {
+ if (camelContext == null) {
+ throw new CamelException("CamelContext is null, but must be set
when creating GoogleBigQueryConnectionFactory.");
+ }
+ try (InputStream is
+ =
ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext,
serviceAccountKeyFile);) {
GoogleCredentials credentials = GoogleCredentials.fromStream(is);
if (credentials.createScopedRequired()) {
@@ -104,12 +113,12 @@ public class GoogleBigQueryConnectionFactory {
return credentials;
}
- public String getCredentialsFileLocation() {
- return credentialsFileLocation;
+ public String getServiceAccountKeyFile() {
+ return serviceAccountKeyFile;
}
- public GoogleBigQueryConnectionFactory setCredentialsFileLocation(String
credentialsFileLocation) {
- this.credentialsFileLocation = credentialsFileLocation;
+ public GoogleBigQueryConnectionFactory setServiceAccountKeyFile(String
serviceAccountKeyFile) {
+ this.serviceAccountKeyFile = serviceAccountKeyFile;
resetClient();
return this;
}
@@ -127,4 +136,9 @@ public class GoogleBigQueryConnectionFactory {
private synchronized void resetClient() {
this.client = null;
}
+
+ public GoogleBigQueryConnectionFactory setCamelContext(CamelContext
camelContext) {
+ this.camelContext = camelContext;
+ return this;
+ }
}
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
index e7033b3366c..1d9d331164f 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
@@ -47,6 +47,8 @@ public class GoogleBigQueryEndpoint extends DefaultEndpoint {
@UriParam
protected final GoogleBigQueryConfiguration configuration;
+ private BigQuery bigQuery;
+
protected GoogleBigQueryEndpoint(String endpointUri,
GoogleBigQueryComponent component,
GoogleBigQueryConfiguration
configuration) {
super(endpointUri, component);
@@ -55,9 +57,20 @@ public class GoogleBigQueryEndpoint extends DefaultEndpoint {
@Override
public Producer createProducer() throws Exception {
- BigQuery bigquery =
getConfiguration().getConnectionFactory().getDefaultClient();
- GoogleBigQueryProducer producer = new GoogleBigQueryProducer(bigquery,
this, configuration);
- return producer;
+ return new GoogleBigQueryProducer(bigQuery, this, configuration);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ GoogleBigQueryConnectionFactory connFactory =
configuration.getConnectionFactory();
+ if (connFactory == null) {
+ connFactory = new GoogleBigQueryConnectionFactory()
+ .setCamelContext(getCamelContext())
+
.setServiceAccountKeyFile(configuration.getServiceAccountKey());
+ configuration.setConnectionFactory(connFactory);
+ }
+ bigQuery = connFactory.getDefaultClient();
}
@Override
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
index 31e75a53e85..bc38966e2f4 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
@@ -30,12 +30,20 @@ public class GoogleBigQuerySQLComponent extends
DefaultComponent {
@Metadata
private String projectId;
+
+ @Metadata
+ private GoogleBigQuerySQLConfiguration configuration;
+
@Metadata(autowired = true)
private GoogleBigQueryConnectionFactory connectionFactory;
public GoogleBigQuerySQLComponent() {
}
+ public GoogleBigQuerySQLComponent(GoogleBigQuerySQLConfiguration
configuration) {
+ this.configuration = configuration;
+ }
+
public GoogleBigQuerySQLComponent(CamelContext camelContext) {
super(camelContext);
}
@@ -49,17 +57,11 @@ public class GoogleBigQuerySQLComponent extends
DefaultComponent {
throw new IllegalArgumentException("Google BigQuery Endpoint
format \"projectId:<query>\"");
}
- GoogleBigQuerySQLConfiguration configuration = new
GoogleBigQuerySQLConfiguration();
- configuration.parseRemaining(remaining);
+ GoogleBigQuerySQLConfiguration conf
+ = configuration != null ? configuration.copy() : new
GoogleBigQuerySQLConfiguration();
+ conf.parseRemaining(remaining);
- if (configuration.getConnectionFactory() == null) {
- if (connectionFactory == null) {
- connectionFactory = new GoogleBigQueryConnectionFactory();
- }
- configuration.setConnectionFactory(getConnectionFactory());
- }
-
- GoogleBigQuerySQLEndpoint endpoint = new
GoogleBigQuerySQLEndpoint(uri, this, configuration);
+ GoogleBigQuerySQLEndpoint endpoint = new
GoogleBigQuerySQLEndpoint(uri, this, conf);
setProperties(endpoint, parameters);
return endpoint;
}
@@ -85,4 +87,8 @@ public class GoogleBigQuerySQLComponent extends
DefaultComponent {
public void setConnectionFactory(GoogleBigQueryConnectionFactory
connectionFactory) {
this.connectionFactory = connectionFactory;
}
+
+ public GoogleBigQuerySQLConfiguration getConfiguration() {
+ return configuration;
+ }
}
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
index 6287405a496..507a4a118c3 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLConfiguration.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.google.bigquery.sql;
+import org.apache.camel.RuntimeCamelException;
import
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
@@ -23,18 +24,25 @@ import org.apache.camel.spi.UriParams;
import org.apache.camel.spi.UriPath;
@UriParams
-public class GoogleBigQuerySQLConfiguration {
+public class GoogleBigQuerySQLConfiguration implements Cloneable {
@UriParam(description = "ConnectionFactory to obtain connection to
Bigquery Service. If not provided the default one will be used")
@Metadata(autowired = true)
private GoogleBigQueryConnectionFactory connectionFactory;
+
@UriPath(label = "common", description = "Google Cloud Project Id")
@Metadata(required = true)
private String projectId;
+
@UriPath(label = "common", description = "BigQuery standard SQL query")
@Metadata(required = true)
private String queryString;
+ @UriParam(label = "security",
+ description = "Service account key in json format to
authenticate an application as a service account to google cloud platform")
+ @Metadata(required = false)
+ private String serviceAccountKey;
+
public void parseRemaining(String remaining) {
int indexOfColon = remaining.indexOf(':');
@@ -74,4 +82,22 @@ public class GoogleBigQuerySQLConfiguration {
this.projectId = projectId;
return this;
}
+
+ public String getServiceAccountKey() {
+ return serviceAccountKey;
+ }
+
+ public GoogleBigQuerySQLConfiguration setServiceAccountKey(String
serviceAccountKey) {
+ this.serviceAccountKey = serviceAccountKey;
+ return this;
+ }
+
+ public GoogleBigQuerySQLConfiguration copy() {
+ try {
+ return (GoogleBigQuerySQLConfiguration) super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeCamelException(e);
+ }
+ }
+
}
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
index 35da8fc3288..84dd172ed43 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
@@ -20,6 +20,7 @@ import com.google.cloud.bigquery.BigQuery;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
+import
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory;
import org.apache.camel.component.google.bigquery.GoogleBigQueryConstants;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
@@ -47,6 +48,8 @@ public class GoogleBigQuerySQLEndpoint extends
DefaultEndpoint {
@UriParam
protected final GoogleBigQuerySQLConfiguration configuration;
+ private BigQuery bigQuery;
+
protected GoogleBigQuerySQLEndpoint(String endpointUri,
GoogleBigQuerySQLComponent component,
GoogleBigQuerySQLConfiguration
configuration) {
super(endpointUri, component);
@@ -54,10 +57,21 @@ public class GoogleBigQuerySQLEndpoint extends
DefaultEndpoint {
}
@Override
- public Producer createProducer() throws Exception {
- BigQuery bigquery =
getConfiguration().getConnectionFactory().getDefaultClient();
- GoogleBigQuerySQLProducer producer = new
GoogleBigQuerySQLProducer(bigquery, this, configuration);
- return producer;
+ public Producer createProducer() {
+ return new GoogleBigQuerySQLProducer(bigQuery, this, configuration);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ GoogleBigQueryConnectionFactory connFactory =
configuration.getConnectionFactory();
+ if (connFactory == null) {
+ connFactory = new GoogleBigQueryConnectionFactory()
+ .setCamelContext(getCamelContext())
+
.setServiceAccountKeyFile(configuration.getServiceAccountKey());
+ configuration.setConnectionFactory(connFactory);
+ }
+ bigQuery = connFactory.getDefaultClient();
}
@Override
diff --git
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
index ba49a7af96e..883d90c7522 100644
---
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
+++
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
@@ -23,8 +23,11 @@ import java.util.UUID;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
+import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobException;
import com.google.cloud.bigquery.JobId;
+import com.google.cloud.bigquery.JobInfo;
+import com.google.cloud.bigquery.JobStatistics;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryParameterValue;
import com.google.cloud.bigquery.StandardSQLTypeName;
@@ -102,13 +105,15 @@ public class GoogleBigQuerySQLProducer extends
DefaultProducer {
queryJobId = JobId.of(configuration.getProjectId(),
UUID.randomUUID().toString());
}
- TableResult result = bigquery.query(queryJobConfiguration,
queryJobId);
+ Job job = bigquery.create(JobInfo.of(queryJobId,
queryJobConfiguration)).waitFor();
+ JobStatistics.QueryStatistics statistics = job.getStatistics();
+ TableResult result = job.getQueryResults();
+ long numAffectedRows = statistics.getNumDmlAffectedRows();
if (LOG.isTraceEnabled()) {
- LOG.trace("Result of query {} is {}", translatedQuery,
result.toString());
+ LOG.trace("Query {} - Affected rows {} - Result {}",
translatedQuery, numAffectedRows, result.toString());
}
-
- return result.getTotalRows();
+ return numAffectedRows;
} catch (JobException e) {
throw new Exception("Query " + translatedQuery + " failed: " +
e.getErrors(), e);
} catch (BigQueryException e) {
diff --git
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryITSupport.java
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryITSupport.java
index acf99d4e99a..829843fa4ea 100644
---
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryITSupport.java
+++
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryITSupport.java
@@ -22,7 +22,7 @@ import java.util.Properties;
import java.util.UUID;
import java.util.stream.Collectors;
-import com.google.api.client.googleapis.json.GoogleJsonResponseException;
+import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.FieldList;
import com.google.cloud.bigquery.JobId;
@@ -38,8 +38,10 @@ import org.apache.camel.BindToRegistry;
import org.apache.camel.CamelContext;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.google.bigquery.GoogleBigQueryComponent;
+import org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration;
import
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory;
import
org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLComponent;
+import
org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -87,10 +89,15 @@ public class BigQueryITSupport extends CamelTestSupport {
protected void addBigqueryComponent(CamelContext context) {
+ GoogleBigQueryConfiguration configuration = new
GoogleBigQueryConfiguration()
+ .setServiceAccountKey(CREDENTIALS_FILE_LOCATION);
+
connectionFactory = new GoogleBigQueryConnectionFactory()
- .setCredentialsFileLocation(CREDENTIALS_FILE_LOCATION);
+ .setServiceAccountKeyFile(configuration.getServiceAccountKey())
+ .setCamelContext(context);
+ configuration.setConnectionFactory(connectionFactory);
- GoogleBigQueryComponent component = new GoogleBigQueryComponent();
+ GoogleBigQueryComponent component = new
GoogleBigQueryComponent(configuration);
component.setConnectionFactory(connectionFactory);
context.addComponent("google-bigquery", component);
@@ -99,10 +106,14 @@ public class BigQueryITSupport extends CamelTestSupport {
protected void addBigquerySqlComponent(CamelContext context) {
+ GoogleBigQuerySQLConfiguration configuration = new
GoogleBigQuerySQLConfiguration()
+ .setServiceAccountKey(CREDENTIALS_FILE_LOCATION);
connectionFactory = new GoogleBigQueryConnectionFactory()
- .setCredentialsFileLocation(CREDENTIALS_FILE_LOCATION);
+ .setServiceAccountKeyFile(configuration.getServiceAccountKey())
+ .setCamelContext(context);
+ configuration.setConnectionFactory(connectionFactory);
- GoogleBigQuerySQLComponent component = new
GoogleBigQuerySQLComponent();
+ GoogleBigQuerySQLComponent component = new
GoogleBigQuerySQLComponent(configuration);
component.setConnectionFactory(connectionFactory);
context.addComponent("google-bigquery-sql", component);
@@ -146,9 +157,9 @@ public class BigQueryITSupport extends CamelTestSupport {
TableInfo tableInfo = TableInfo.of(id, builder.build());
try {
getConnectionFactory().getDefaultClient().create(tableInfo);
- } catch (GoogleJsonResponseException e) {
- if (e.getDetails().getCode() == 409) {
- LOGGER.info("Table {} already exist");
+ } catch (BigQueryException e) {
+ if (e.getCode() == 409) {
+ LOGGER.info("TableId {} already exists", tableId);
} else {
throw e;
}
diff --git
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerBaseTest.java
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerBaseTest.java
index 351d7074e50..0f394ace2ef 100644
---
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerBaseTest.java
+++
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerBaseTest.java
@@ -17,7 +17,10 @@
package org.apache.camel.component.google.bigquery.unit.sql;
import com.google.cloud.bigquery.BigQuery;
+import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
+import com.google.cloud.bigquery.JobInfo;
+import com.google.cloud.bigquery.JobStatistics;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import
org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration;
@@ -37,6 +40,8 @@ public abstract class GoogleBigQuerySQLProducerBaseTest
extends CamelTestSupport
protected GoogleBigQuerySQLConfiguration configuration = new
GoogleBigQuerySQLConfiguration();
protected BigQuery bigquery;
protected TableResult tableResult;
+ protected Job job;
+ protected JobStatistics.QueryStatistics statistics;
protected GoogleBigQuerySQLProducer createAndStartProducer() {
configuration.setProjectId(projectId);
@@ -50,6 +55,13 @@ public abstract class GoogleBigQuerySQLProducerBaseTest
extends CamelTestSupport
protected void setupBigqueryMock() throws Exception {
bigquery = mock(BigQuery.class);
tableResult = mock(TableResult.class);
+ job = mock(Job.class);
+ statistics = mock(JobStatistics.QueryStatistics.class);
when(bigquery.query(any(QueryJobConfiguration.class),
any(JobId.class))).thenReturn(tableResult);
+ when(bigquery.create(any(JobInfo.class))).thenReturn(job);
+ when(job.waitFor()).thenReturn(job);
+ when(job.getQueryResults()).thenReturn(tableResult);
+ when(job.getStatistics()).thenReturn(statistics);
+ when(statistics.getNumDmlAffectedRows()).thenReturn(1L);
}
}
diff --git
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithParamersTest.java
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithParamersTest.java
index 6521bd29ea7..9eb0982db56 100644
---
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithParamersTest.java
+++
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithParamersTest.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import com.google.cloud.bigquery.JobId;
+import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.QueryParameterValue;
import org.apache.camel.Exchange;
@@ -34,8 +35,6 @@ import static
org.apache.camel.component.google.bigquery.integration.BigQueryITS
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
public class GoogleBigQuerySQLProducerWithParamersTest extends
GoogleBigQuerySQLProducerBaseTest {
@@ -54,10 +53,10 @@ public class GoogleBigQuerySQLProducerWithParamersTest
extends GoogleBigQuerySQL
body.put("data", "some data");
producer.process(createExchangeWithBody(body));
- ArgumentCaptor<QueryJobConfiguration> dataCaptor =
ArgumentCaptor.forClass(QueryJobConfiguration.class);
- verify(bigquery).query(dataCaptor.capture(), any(JobId.class));
+ ArgumentCaptor<JobInfo> dataCaptor =
ArgumentCaptor.forClass(JobInfo.class);
+ verify(bigquery).create(dataCaptor.capture());
- QueryJobConfiguration request = dataCaptor.getValue();
+ QueryJobConfiguration request =
dataCaptor.getValue().getConfiguration();
assertEquals(sql, request.getQuery());
Map<String, QueryParameterValue> namedParameters =
request.getNamedParameters();
@@ -82,10 +81,10 @@ public class GoogleBigQuerySQLProducerWithParamersTest
extends GoogleBigQuerySQL
producer.process(exchange);
- ArgumentCaptor<QueryJobConfiguration> dataCaptor =
ArgumentCaptor.forClass(QueryJobConfiguration.class);
- verify(bigquery).query(dataCaptor.capture(), any(JobId.class));
+ ArgumentCaptor<JobInfo> dataCaptor =
ArgumentCaptor.forClass(JobInfo.class);
+ verify(bigquery).create(dataCaptor.capture());
- QueryJobConfiguration request = dataCaptor.getValue();
+ QueryJobConfiguration request =
dataCaptor.getValue().getConfiguration();
assertEquals(sql, request.getQuery());
Map<String, QueryParameterValue> namedParameters =
request.getNamedParameters();
@@ -113,10 +112,10 @@ public class GoogleBigQuerySQLProducerWithParamersTest
extends GoogleBigQuerySQL
producer.process(exchange);
- ArgumentCaptor<QueryJobConfiguration> dataCaptor =
ArgumentCaptor.forClass(QueryJobConfiguration.class);
- verify(bigquery).query(dataCaptor.capture(), eq(jobId));
+ ArgumentCaptor<JobInfo> dataCaptor =
ArgumentCaptor.forClass(JobInfo.class);
+ verify(bigquery).create(dataCaptor.capture());
- QueryJobConfiguration request = dataCaptor.getValue();
+ QueryJobConfiguration request =
dataCaptor.getValue().getConfiguration();
assertEquals(sql, request.getQuery());
Map<String, QueryParameterValue> namedParameters =
request.getNamedParameters();
diff --git
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithPatternTest.java
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithPatternTest.java
index 4b510467036..2e838d05705 100644
---
a/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithPatternTest.java
+++
b/components/camel-google/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/sql/GoogleBigQuerySQLProducerWithPatternTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.component.google.bigquery.unit.sql;
import java.util.List;
-import com.google.cloud.bigquery.JobId;
+import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import org.apache.camel.Exchange;
import org.junit.jupiter.api.BeforeEach;
@@ -26,7 +26,6 @@ import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
public class GoogleBigQuerySQLProducerWithPatternTest extends
GoogleBigQuerySQLProducerBaseTest {
@@ -45,12 +44,13 @@ public class GoogleBigQuerySQLProducerWithPatternTest
extends GoogleBigQuerySQLP
String expected = "insert into dataset.testTableId(id, data) values(1,
'test')";
producer.process(exchange);
- ArgumentCaptor<QueryJobConfiguration> dataCaptor =
ArgumentCaptor.forClass(QueryJobConfiguration.class);
- verify(bigquery).query(dataCaptor.capture(), any(JobId.class));
+ ArgumentCaptor<JobInfo> dataCaptor =
ArgumentCaptor.forClass(JobInfo.class);
+ verify(bigquery).create(dataCaptor.capture());
- List<QueryJobConfiguration> requests = dataCaptor.getAllValues();
+ List<JobInfo> requests = dataCaptor.getAllValues();
assertEquals(1, requests.size());
- assertEquals(expected, requests.get(0).getQuery());
+ QueryJobConfiguration conf = requests.get(0).getConfiguration();
+ assertEquals(expected, conf.getQuery());
}
@Test
@@ -60,12 +60,13 @@ public class GoogleBigQuerySQLProducerWithPatternTest
extends GoogleBigQuerySQLP
String expected = "insert into dataset.testTableId(id, data) values(1,
'test')";
producer.process(exchange);
- ArgumentCaptor<QueryJobConfiguration> dataCaptor =
ArgumentCaptor.forClass(QueryJobConfiguration.class);
- verify(bigquery).query(dataCaptor.capture(), any(JobId.class));
+ ArgumentCaptor<JobInfo> dataCaptor =
ArgumentCaptor.forClass(JobInfo.class);
+ verify(bigquery).create(dataCaptor.capture());
- List<QueryJobConfiguration> requests = dataCaptor.getAllValues();
+ List<JobInfo> requests = dataCaptor.getAllValues();
assertEquals(1, requests.size());
- assertEquals(expected, requests.get(0).getQuery());
+ QueryJobConfiguration conf = requests.get(0).getConfiguration();
+ assertEquals(expected, conf.getQuery());
}
}
diff --git
a/components/camel-google/camel-google-bigquery/src/test/resources/log4j.properties
b/components/camel-google/camel-google-bigquery/src/test/resources/log4j.properties
deleted file mode 100644
index 4180b0d91fe..00000000000
---
a/components/camel-google/camel-google-bigquery/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-## ---------------------------------------------------------------------------
-## 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.
-## ---------------------------------------------------------------------------
-
-#
-# The logging properties used during tests..
-#
-log4j.rootLogger=INFO, out
-
-#log4j.logger.org.apache.camel.component.google.pubsub=TRACE
-#log4j.logger.org.apache.camel=DEBUG
-#log4j.logger.org.apache.camel.impl=WARN
-
-# CONSOLE appender not used by default
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1}
- %m%n
-
-# File appender
-log4j.appender.out=org.apache.log4j.FileAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} -
%m%n
-log4j.appender.out.file=target/camel-google-bigquery-test.log
-log4j.appender.out.append=true
diff --git
a/components/camel-google/camel-google-bigquery/src/test/resources/simple.properties
b/components/camel-google/camel-google-bigquery/src/test/resources/simple.properties
index 88c4916240a..f1563effaef 100644
---
a/components/camel-google/camel-google-bigquery/src/test/resources/simple.properties
+++
b/components/camel-google/camel-google-bigquery/src/test/resources/simple.properties
@@ -15,6 +15,7 @@
## limitations under the License.
## ---------------------------------------------------------------------------
+# change the dataset id in insert.sql and delete.sql
project.id=scg-bi-sandbox
bigquery.datasetId=test_dataset
# Service Account Name and Key do not belong to any project