From e9831553263243c36aa6fa792c4377e3ef7ca4d1 Mon Sep 17 00:00:00 2001 From: Les Hazlewood Date: Fri, 3 Apr 2015 19:06:42 -0700 Subject: [PATCH] #18: added initial implementation that *should* work in Android environments. This still needs to be tested in a real Android project. --- pom.xml | 16 ++++++++++ .../io/jsonwebtoken/impl/Base64Codec.java | 30 ++++++++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 899f5e93..763739a4 100644 --- a/pom.xml +++ b/pom.xml @@ -106,6 +106,22 @@ true + + + com.google.android + android + 4.1.1.4 + provided + + + commons-logging + commons-logging + + + + ch.qos.logback diff --git a/src/main/java/io/jsonwebtoken/impl/Base64Codec.java b/src/main/java/io/jsonwebtoken/impl/Base64Codec.java index 87672ba9..a47f6f17 100644 --- a/src/main/java/io/jsonwebtoken/impl/Base64Codec.java +++ b/src/main/java/io/jsonwebtoken/impl/Base64Codec.java @@ -15,18 +15,40 @@ */ package io.jsonwebtoken.impl; -import javax.xml.bind.DatatypeConverter; +import io.jsonwebtoken.lang.Classes; public class Base64Codec extends AbstractTextCodec { - @Override + private static final boolean STANDARD_JVM = Classes.isAvailable("javax.xml.bind.DatatypeConverter"); + + private static final boolean ANDROID = Classes.isAvailable("android.util.Base64"); + public String encode(byte[] data) { - return DatatypeConverter.printBase64Binary(data); + + if (STANDARD_JVM) { + return javax.xml.bind.DatatypeConverter.printBase64Binary(data); + } + + if (ANDROID) { + int flags = android.util.Base64.NO_PADDING | android.util.Base64.NO_WRAP; + return android.util.Base64.encodeToString(data, flags); + } + + throw new IllegalStateException("Unable to locate a Base64 codec for the current JVM"); } @Override public byte[] decode(String encoded) { - return DatatypeConverter.parseBase64Binary(encoded); + + if (STANDARD_JVM) { + return javax.xml.bind.DatatypeConverter.parseBase64Binary(encoded); + } + + if (ANDROID) { + return android.util.Base64.decode(encoded, android.util.Base64.DEFAULT); + } + + throw new IllegalStateException("Unable to locate a Base64 codec for the current JVM"); } }