diff --git a/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java b/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java
index 1ef0276faf95..970ca555fea6 100644
--- a/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java
+++ b/google-cloud-core/src/main/java/com/google/cloud/HttpTransportOptions.java
@@ -19,6 +19,7 @@
import static com.google.common.base.MoreObjects.firstNonNull;
import com.google.api.client.extensions.appengine.http.UrlFetchTransport;
+import com.google.api.client.http.HttpHeaders;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpTransport;
@@ -154,10 +155,26 @@ public void initialize(HttpRequest httpRequest) throws IOException {
if (readTimeout >= 0) {
httpRequest.setReadTimeout(readTimeout);
}
+
+ HttpHeaders headers = httpRequest.getHeaders();
+ headers.set("x-goog-api-client", getXGoogApiClientHeader());
}
};
}
+ String getXGoogApiClientHeader() {
+ return String.format(
+ "gl-java/%s %s/%s",
+ getJavaVersion(),
+ ServiceOptions.getGoogApiClientLibName(),
+ ServiceOptions.getLibraryVersion());
+ }
+
+ private static String getJavaVersion() {
+ String javaVersion = Runtime.class.getPackage().getImplementationVersion();
+ return javaVersion != null ? javaVersion : "";
+ }
+
/**
* Returns the timeout in milliseconds to establish a connection. 0 is an infinite timeout, a
* negative number is the default value (20000).
diff --git a/google-cloud-core/src/main/java/com/google/cloud/ServiceOptions.java b/google-cloud-core/src/main/java/com/google/cloud/ServiceOptions.java
index 843f775eca01..55f2c08ac4c5 100644
--- a/google-cloud-core/src/main/java/com/google/cloud/ServiceOptions.java
+++ b/google-cloud-core/src/main/java/com/google/cloud/ServiceOptions.java
@@ -525,7 +525,7 @@ public TransportOptions getTransportOptions() {
/**
* Returns the application's name as a string in the format {@code gcloud-java/[version]}.
*/
- public String getApplicationName() {
+ public static String getApplicationName() {
return APPLICATION_NAME;
}
@@ -533,21 +533,21 @@ public String getApplicationName() {
/**
* Returns the library's name, {@code gcloud-java}, as a string.
*/
- public String getLibraryName() {
+ public static String getLibraryName() {
return LIBRARY_NAME;
}
/**
* Returns the library's name used by x-goog-api-client header as a string.
*/
- public String getGoogApiClientLibName() {
+ public static String getGoogApiClientLibName() {
return X_GOOGLE_CLIENT_HEADER_NAME;
}
/**
* Returns the library's version as a string.
*/
- public String getLibraryVersion() {
+ public static String getLibraryVersion() {
return LIBRARY_VERSION;
}
diff --git a/google-cloud-core/src/test/java/com/google/cloud/HttpTransportOptionsTest.java b/google-cloud-core/src/test/java/com/google/cloud/HttpTransportOptionsTest.java
index f5013181b2a5..23a2c10a5084 100644
--- a/google-cloud-core/src/test/java/com/google/cloud/HttpTransportOptionsTest.java
+++ b/google-cloud-core/src/test/java/com/google/cloud/HttpTransportOptionsTest.java
@@ -23,6 +23,7 @@
import com.google.auth.http.HttpTransportFactory;
import com.google.cloud.HttpTransportOptions.DefaultHttpTransportFactory;
+import java.util.regex.Pattern;
import org.easymock.EasyMock;
import org.junit.Test;
@@ -60,4 +61,12 @@ public void testBaseHashCode() {
assertEquals(OPTIONS.hashCode(), OPTIONS_COPY.hashCode());
assertNotEquals(DEFAULT_OPTIONS.hashCode(), OPTIONS.hashCode());
}
+
+ @Test
+ public void testHeader() {
+ String expectedHeaderPattern = "^gl-java/.* gccl/.*";
+ assertTrue(Pattern.compile(expectedHeaderPattern)
+ .matcher(DEFAULT_OPTIONS.getXGoogApiClientHeader())
+ .find());
+ }
}
diff --git a/pom.xml b/pom.xml
index 1d0e44083488..e78b87aba329 100644
--- a/pom.xml
+++ b/pom.xml
@@ -92,7 +92,7 @@
github
0.6.0
1.0.3
- 0.6.0
+ 0.6.1
0.1.5
0.10.1-alpha-SNAPSHOT
0.10.1-beta-SNAPSHOT