Report ErrorType.APPLICATION from codecs
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / codec / BinaryStringCodec.java
index 9ef16743f833605ce8bbf30618c7a8d0ddc43aba..920a19897e752f28575b76dfac756a4070fe868e 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;
@@ -37,7 +36,7 @@ public abstract class BinaryStringCodec extends TypeDefinitionAwareCodec<byte[],
         void validate(final byte[] value) {
             final RangeSet<Integer> ranges = lengthConstraint.getAllowedRanges();
             if (!ranges.contains(value.length)) {
-                throw new YangInvalidValueException(ErrorType.PROTOCOL, lengthConstraint,
+                throw new YangInvalidValueException(ErrorType.APPLICATION, lengthConstraint,
                         "Value length " + value.length + " is not in required ranges " + ranges);
             }
         }
@@ -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);
     }