*/
package org.opendaylight.yangtools.yang.data.impl.codec;
-import static com.google.common.base.Preconditions.checkArgument;
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;
import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
@Override
void validate(final byte[] value) {
- // FIXME: throw an exception capturing the constraint violation
- checkArgument(lengthConstraint.getAllowedRanges().contains(value.length),
- "Value length %s does not match constraint %s", value.length, lengthConstraint);
+ final RangeSet<Integer> ranges = lengthConstraint.getAllowedRanges();
+ if (!ranges.contains(value.length)) {
+ throw new YangInvalidValueException(ErrorType.APPLICATION, lengthConstraint,
+ "Value length " + value.length + " is not in required ranges " + ranges);
+ }
}
}
@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);
}