Drop dependency on javax.xml.bind 52/93852/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 16 Nov 2020 20:16:24 +0000 (21:16 +0100)
committerRobert Varga <nite@hq.sk>
Tue, 17 Nov 2020 00:52:03 +0000 (00:52 +0000)
All we need is a lenient Base64 decoder. Drop the dependency
on javax.xml.bind and use plain java.base-provided one.

JIRA: YANGTOOLS-1174
Change-Id: If02fce547142f3d5b17d8529716d5b266a50a3a8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit a434c624a2a57ddb213af160bdd7341c7fe39e97)

yang/yang-data-impl/pom.xml
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/BinaryStringCodec.java

index 128ff65dbe09e15d98930bd7f68ec1996a5b64ba..efcfd972999d48cbd96985ba927d0068d79fdc39 100644 (file)
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
-        <dependency>
-            <groupId>jakarta.xml.bind</groupId>
-            <artifactId>jakarta.xml.bind-api</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>javax.inject</groupId>
index 9ef16743f833605ce8bbf30618c7a8d0ddc43aba..172d55d7f6534534a1e012b36435f2421c1482e1 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.annotations.Beta;
 import com.google.common.collect.RangeSet;
 import java.util.Base64;
-import javax.xml.bind.DatatypeConverter;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
 import org.opendaylight.yangtools.yang.data.api.codec.BinaryCodec;
 import org.opendaylight.yangtools.yang.data.api.codec.YangInvalidValueException;
@@ -65,13 +64,15 @@ public abstract class BinaryStringCodec extends TypeDefinitionAwareCodec<byte[],
 
     @Override
     public final byte[] deserializeImpl(final String product) {
-        final byte[] ret = DatatypeConverter.parseBase64Binary(product);
+        // https://tools.ietf.org/html/rfc4648#section-4 plus lenient to allow for MIME blocks
+        final byte[] ret = Base64.getMimeDecoder().decode(product);
         validate(ret);
         return ret;
     }
 
     @Override
     protected final String serializeImpl(final byte[] data) {
+        // We do not split data on 76 characters on output
         return Base64.getEncoder().encodeToString(data);
     }