When an application is started with a custom java agent and if the agent throws an exception, yajsw throws a NullPointerException in org.rzo.yajsw.log.MyLogger.
Versions
Java version: 21
yajsw version: 13.13
Start command
java -javaagent:custom_agent.jar -jar my.jar
Reproduce
public class JarAgent {
public static void premain(String agentArgs) {
throw new RuntimeException("Boom!");
}
}
Building an agent with Maven
<!--
A Java Agent is a regular jar with an additional manifest entry
to bootstrap the premain method.
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Premain-Class>JarAgent</Premain-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
Exception observed
[null - INFO] 25-04-09 16:09:13 gobler terminated OUTPUT 5172
Exception in org.rzo.yajsw.log.MyLogger: java.lang.NullPointerException: Cannot invoke "java.nio.ByteBuffer.hasRemaining()" because "this.buf" is null
org.rzo.yajsw.io.CyclicBufferFileInputStream$1.read(CyclicBufferFileInputStream.java:210)
java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:345)
java.base/java.io.BufferedInputStream.implRead(BufferedInputStream.java:420)
java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:405)
java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:350)
java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:393)
java.base/sun.nio.cs.StreamDecoder.lockedRead(StreamDecoder.java:217)
java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:171)
java.base/java.io.InputStreamReader.read(InputStreamReader.java:188)
java.base/java.io.BufferedReader.fill(BufferedReader.java:160)
java.base/java.io.BufferedReader.implReadLine(BufferedReader.java:370)
java.base/java.io.BufferedReader.readLine(BufferedReader.java:347)
java.base/java.io.BufferedReader.readLine(BufferedReader.java:436)
org.rzo.yajsw.wrapper.AbstractWrappedProcess$Gobler.run(AbstractWrappedProcess.java:3281)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
java.base/java.lang.Thread.run(Thread.java:1583)
Requested behavior
Show the error in the wrapper logs that prevented the java application from starting.