Skip to content

Do not rely on DatatypeConverter for Base64 conversion #590

@netmikey

Description

@netmikey

We're using Spring Boot 3 with Java 17.

When I try to export a DataSet that contains byte[] columns using this code:

DataSetExporter.getInstance().export(
    connection, 
    new DataSetExportConfig().outputFileName("exported.yml"));

We get this stack trace:

java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
	at com.github.database.rider.core.dataset.writer.YMLWriter.row(YMLWriter.java:96)
	at org.dbunit.dataset.stream.DataSetProducerAdapter.produce(DataSetProducerAdapter.java:104)
	at com.github.database.rider.core.dataset.writer.YMLWriter.write(YMLWriter.java:117)
	at com.github.database.rider.core.exporter.DataSetExporter.export(DataSetExporter.java:144)
	at com.github.database.rider.core.exporter.DataSetExporter.export(DataSetExporter.java:71)
	at com.github.database.rider.core.exporter.DataSetExporter.export(DataSetExporter.java:67)

This is because most projects migrated away from javax API in favor of the jakarta equivalents. It looks like YMLWriter uses DatatypeConverter for Base64 conversion:

out.write(DatatypeConverter.printBase64Binary((byte[]) values[i]));

Rider should probably prefer using the JDKs java.util.Base64 class (available since Java 8) for this conversion. This would avoid relying on that old javax class.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions