Skip to content

Commit 61d54d0

Browse files
committed
Fix VirtualPrinting
Fixes java.lang.ExceptionInInitializerError caused by: java.lang.NullPointerException: Cannot invoke "org.apache.commons.logging.Log.error(Object, java.lang.Throwable)" because "org.apache.pdfbox.io.IOUtils.LOG" is null
1 parent a0fc695 commit 61d54d0

File tree

4 files changed

+10
-6
lines changed

4 files changed

+10
-6
lines changed

build.gradle.kts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ dependencies {
5151
implementation("co.touchlab:kermit:$kermitVersion")
5252
implementation("io.sentry:sentry:7.2.0")
5353

54-
// TODO pdfbox does not work well with conveyor as the tool uses jlink and pdfbox is a auto-module which is not
55-
// supported by jlink. Updating to 3.0.1 currently would break the Mediator completely. With 3.0.0-RC1 just
56-
// VirtualPrinters do not work.
57-
implementation("org.apache.pdfbox:pdfbox:3.0.0-RC1")
54+
implementation("org.apache.pdfbox:pdfbox:3.0.1")
5855
runtimeOnly("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.7.3") // Adds a Main Dispatcher for Desktop
5956

6057
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")

conveyor.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ app {
2222

2323
vcs-url = github.com/DatepollSystems/WaiterRobot-Desktop
2424
license = GPL-3.0
25+
26+
jvm {
27+
modules += jdk.unsupported // Needed for apache.pdfbox (org.apache.pdfbox.io.IOUtils wants to use sun.misc.Unsafe)
28+
}
2529
}
2630

2731
conveyor.compatibility-level = 12

src/main/kotlin/org/datepollsystems/waiterrobot/mediator/printer/AbstractLocalPrinter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.datepollsystems.waiterrobot.mediator.printer
22

33
import org.apache.pdfbox.Loader
44
import org.apache.pdfbox.pdmodel.PDDocument
5+
import org.koin.core.component.KoinComponent
56
import java.util.*
67

78
/**
@@ -12,8 +13,7 @@ import java.util.*
1213
* @author Fabian Schedler
1314
* @see org.datepollsystems.waiterrobot.mediator.printer.LocalPrinterTest.testPrint
1415
*/
15-
abstract class AbstractLocalPrinter : LocalPrinterInfo {
16-
16+
abstract class AbstractLocalPrinter : LocalPrinterInfo, KoinComponent {
1717
fun printPdf(pdfId: String, base64data: String) {
1818
val decoded = Base64.getDecoder().decode(base64data)
1919
printPdf(pdfId, Loader.loadPDF(decoded))

src/main/kotlin/org/datepollsystems/waiterrobot/mediator/printer/VirtualLocalPrinter.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@ package org.datepollsystems.waiterrobot.mediator.printer
22

33
import org.apache.pdfbox.pdmodel.PDDocument
44
import org.datepollsystems.waiterrobot.mediator.App
5+
import org.datepollsystems.waiterrobot.mediator.core.di.injectLogger
56
import java.io.File
67
import kotlin.io.path.Path
78

89
class VirtualLocalPrinter(number: Int) : AbstractLocalPrinter() {
910
override val localId: String = "virtualPrinter_$number"
1011
override val name: String = "Virtual Printer $number"
1112
private val basePath: File = Path(App.config.basePath, "virtualPrinters", number.toString()).toFile()
13+
private val logger by injectLogger(this::class.simpleName + "#$localId")
1214

1315
init {
1416
basePath.mkdirs()
17+
logger.i("Will save to: ${basePath.absolutePath}")
1518
}
1619

1720
override fun printPdf(pdfId: String, document: PDDocument) {

0 commit comments

Comments
 (0)