001package io.prometheus.client.exporter; 002 003import javax.xml.bind.DatatypeConverter; 004 005/** 006 * This class delegates to either javax.xml.bind.DatatypeConverter (for Java < 8) or java.util.Base64 (Java 8+) 007 * to perform Base64 encoding of a String. 008 * 009 * This code requires Java 8+ for compilation. 010 */ 011public class Base64 { 012 013 private static final boolean HAS_JAVA_UTIL_BASE64 = hasJavaUtilBase64(); 014 015 private static boolean hasJavaUtilBase64() { 016 try { 017 Class.forName("java.util.Base64"); 018 // Java 8+ 019 return true; 020 } catch (Throwable t) { 021 // Java < 8 022 return false; 023 } 024 } 025 026 private Base64() {} 027 028 /** 029 * Encodes a byte[] to a String using Base64. 030 * 031 * Passing a null argument will cause a NullPointerException to be thrown. 032 * 033 * @param src string to be encoded 034 * @return String in Base64 encoding 035 */ 036 @SuppressWarnings("all") 037 public static String encodeToString(byte[] src) { 038 if (src == null) { 039 throw new NullPointerException(); 040 } 041 042 if (HAS_JAVA_UTIL_BASE64) { 043 return java.util.Base64.getEncoder().encodeToString(src); 044 } else { 045 return DatatypeConverter.printBase64Binary(src); 046 } 047 } 048}