-
Notifications
You must be signed in to change notification settings - Fork 140
Do not rely on DatatypeConverter for Base64 conversion #590
Copy link
Copy link
Closed
Labels
Milestone
Description
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:
database-rider/rider-core/src/main/java/com/github/database/rider/core/dataset/writer/YMLWriter.java
Line 96 in 3874d8d
| 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.
Reactions are currently unavailable