diff --git a/java-client/src/main/java/co/elastic/clients/util/LanguageRuntimeVersions.java b/java-client/src/main/java/co/elastic/clients/util/LanguageRuntimeVersions.java index 356ceebe0..977f3c142 100644 --- a/java-client/src/main/java/co/elastic/clients/util/LanguageRuntimeVersions.java +++ b/java-client/src/main/java/co/elastic/clients/util/LanguageRuntimeVersions.java @@ -19,10 +19,11 @@ package co.elastic.clients.util; -// Copied verbatim from https://github.com/elastic/jvm-languages-sniffer +// Based on https://github.com/elastic/jvm-languages-sniffer import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Properties; public class LanguageRuntimeVersions { @@ -59,6 +60,11 @@ public static String getRuntimeMetadata() { s.append(",jrb=").append(version); } + version = springDataVersion(); + if (version != null) { + s.append(",sde=").append(version); + } + return s.toString(); } @@ -89,6 +95,18 @@ public static String jRubyVersion() { return keepMajorMinor(getStaticField("org.jruby.runtime.Constants", "VERSION")); } + public static String springDataVersion() { + // org.springframework.data.elasticsearch.support.VersionInfo.versionProperties() + Properties springProp = (Properties) callStaticMethodObject( + "org.springframework.data.elasticsearch.support.VersionInfo", + "versionProperties"); + if (springProp != null) { + return keepMajorMinor(springProp.getProperty("version.spring-data-elasticsearch")); + } + return ""; + + } + private static String getStaticField(String className, String fieldName) { Class clazz; try { @@ -121,6 +139,22 @@ private static String callStaticMethod(String className, String methodName) { } } + private static Object callStaticMethodObject(String className, String methodName) { + Class clazz; + try { + clazz = Class.forName(className); + } catch (ClassNotFoundException e) { + return null; + } + + try { + Method m = clazz.getMethod(methodName); + return m.invoke(null); + } catch (Exception e) { + return null; // can't get version information + } + } + static String keepMajorMinor(String version) { if (version == null) { return null;